- Post History
- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
2 hours ago
Understanding the New SPM Inbound Actuals Tables
What problem does this solve?
Tracking actual project costs against planned budgets is critical for financial governance. However, project managers often rely on data that lives in external ERP or financial systems, with no native way to import that data directly into SPM.
The two new Inbound Actuals tables solve this by providing a structured staging layer to receive, validate, and process actual expense data from external systems — mapping it directly to your SPM Projects and their associated Cost Plans and Expense Lines.
Overview of the Two New Tables
Both tables are installed with the Financial Core plugin:
| Table Name | Label | Purpose |
|---|---|---|
sn_invst_pln_inbound_actuals_config |
Inbound Actuals Configuration | Defines how inbound actuals are interpreted for a specific Task |
sn_invst_pln_inbound_actuals |
Inbound Actuals | Stores expense data imported from external financial systems |
Table 1: Inbound Actuals Configuration
sn_invst_pln_inbound_actuals_config
This table stores the configuration that tells SPM how to interpret incoming actual costs for a given Task. It acts as the mapping layer between your ERP system and the SPM task structure.
Key Columns
| Label | Column | Type | Purpose |
|---|---|---|---|
| Task | task |
Reference (task) | Identifies the Task for which the inbound configuration applies |
| Entry Method | entry_method |
Choice: Integration / Manual Entry / Manual Load | Defines how actual costs will be entered for the related task |
| ERP System | erp_system |
String | Identifies the ERP System from which actuals will be loaded |
| Financial Code | financial_code |
String | The task's financial code in the ERP System, used to match incoming records |
task field references the base task table, making this configuration compatible with Projects, Project Tasks, and other task extensions.Table 2: Inbound Actuals
sn_invst_pln_inbound_actuals
This table acts as the staging area for all actual expense records received from external financial systems. Each record represents a single expense entry pending processing into Cost Plans as Expense Line.
Key Columns
| Label | Column | Type | Purpose |
|---|---|---|---|
| Task | task |
Reference (task) | Identifies the Task associated with the actual expense |
| Project | project |
Reference (pm_project) | Identifies the Project for the actual expense |
| Amount | amount |
FX Currency | The actual expense amount |
| Cost Center | cost_center |
Reference (cmn_cost_center) | Cost center associated with the actual expense |
| Expense Category | expense_category |
String | The expense category as received from the ERP system |
| Expense Date | expense_date |
Date | Date of the actual expense |
| Expense Type | expense_type |
Choice: Capex / Opex (default: Capex) | Expense type as received from the ERP system |
| External Identifier | external_identifier |
String | The expense identifier in the ERP system |
| External System | external_system |
String | Identifies the source ERP system |
| Invoice Number | invoice_number |
String | Invoice number linked to the actual expense |
| PO Number | po_number |
String | Purchase Order number linked to the actual expense |
| Processed Date | processed_date |
Date/Time | Date and time the expense was processed by the ERP system |
| State | state |
Choice: Cancelled / Duplicate / Error / In Process / New / Processed / Ready to Process / Skipped | Tracks the import processing state of the record |
| Target Expense Line | target_expense_line |
Reference (fm_expense_line) | Reference to the Expense Line created during the import process |
| Error Message | error_message |
String | Contains error details if record processing fails |
How the Process Works (Example)
The following describes the expected end-to-end flow for importing actuals into SPM:
- Configure the mapping — For each Project Task receiving actuals from an external system, create a record in the Inbound Actuals Configuration table, specifying the Entry Method, ERP System, and Financial Code.
- Receive expense data — Actual expense records arrive in the Inbound Actuals table from your ERP system. These can be loaded via integration, manual entry, or file upload (based on your configured Entry Method).
- Process active configuration records — A custom integration or scheduled job retrieves active Inbound Actuals Configuration records to identify which tasks are eligible for actuals processing.
- Match or create Cost Plan and Expense Lines — For each Inbound Actuals record in Ready to Process state: find an existing Cost Plan that matches, or create a new one; then create the corresponding Expense Line.
- Update record state — After processing, update the Inbound Actuals record with the resulting State (Processed, Error, Skipped, etc.) and populate the Target Expense Line reference.
Important: No out-of-the-box integration, scheduled job, or automation is provided with these tables. The processing logic above must be built and configured by your implementation team.
Key Considerations
- Both tables are installed as part of the Financial Core plugin — ensure this plugin is active in your instance.
- The
taskreference on both tables supports dot-walking to extended task tables (e.g.,pm_project_task), enabling filtering and configuration for specific task types. - The State field on the Inbound Actuals table is the primary mechanism for tracking record lifecycle — monitor for
Errorstates to identify processing issues. - The Financial Code in the configuration table must align with the identifier used in your ERP system to ensure correct record matching.
- Consider building a scheduled job or integration flow to automate the processing of records in
Ready to Processstate.
- 15 Views
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Great work @Luis Ataide
