The planning header for one company (PartnerAccountId) and one fiscal year, optionally narrowed to a business unit and a cost centre; the money itself sits on its BudgetLine children, one per GL account. BudgetService enforces that only one active budget may exist per company + business unit + fiscal year, and freezes a budget once its Status reaches Confirmed or Approved (from then on only Status itself may change, on the header and on its lines). Three services read it: BudgetVarianceService (budget vs posted ledger actuals for the year, scoping actuals to the budget's business unit and cost centre), BudgetControlService (run-rate full-year forecast, plus the availability gate that answers whether an account still has budget for a proposed spend), and the budget-vs-actual income statement. Nothing about a budget posts to the ledger — it is a comparison baseline only.
Fields
| Field | Label | Type | Required | What it does |
BusinessUnitId | Business Unit | Lookup → BusinessUnit | | Optional business-unit scope for the whole budget: it participates in the one-active-budget-per-scope uniqueness check (a null business unit is a distinct scope from any named one), and when set it restricts the posted actuals that variance, forecast and the budget income statement compare against to that unit's period balances. |
CreatedById | Created By | Lookup → UserAccount | Yes | |
CreatedDateTime | Created On | DateAndTime | Yes | |
FiscalYearId | Fiscal Year | Lookup → FiscalYear | | |
Id | Id | Guid | Yes | |
IsActive | Is Active | Boolean | | Controls whether the budget reserves its scope and counts as authoritative: only active budgets conflict in the one-budget-per-scope uniqueness check, and only active budgets contribute lines to the availability gate. Deactivating is therefore how a superseded plan is retired without deleting it. |
Label | Label | Text | | |
ModifiedById | Modified By | Lookup → UserAccount | Yes | |
Name | Name | Text, unique | Yes | |
OwnerId | Owner | Lookup → UserAccount | Yes | |
PartnerAccountId | Partner Account | Lookup → Account | | The company (legal entity) whose plan this is — not a customer or supplier, despite the account lookup. It is one of the three keys of the uniqueness rule (company + business unit + fiscal year) and the key the availability gate and the variance and forecast services filter on, so a budget stamped with the wrong company is invisible to all of them. |
PlannedAmount | Planned Amount | Calculated (calculated) | | A stored rollup, not a hand-entered figure: the calculated-field engine recomputes it on every save from the formula summing BudgetAmount across the budget's lines. It is deliberately listed alongside the audit columns in the frozen-budget guard, so this automatic recomputation does not itself count as an illegal edit to a Confirmed or Approved budget. |
RecordTypeId | Record Type | Guid, hidden | | |
Status | Status | PickList | | Workflow state, defaulting to Draft. Confirmed and Approved are treated as locked (case-insensitively): once a budget is in either, the handler rejects any save that modifies a non-audit field other than Status itself, and its lines become read-only too. Reverting to Draft is the documented way back in. Values: Draft, Cancelled, Confirmed. |
UIProps | UI Props | Text | | |
UpdatedDateTime | Updated On | DateAndTime | Yes | |
Actions
| Action | Label | Type | What it does |
BulkDelete | Delete | Delete | Delete the selected records. |
Clone | Clone | ServerAction (Clone) | Create a copy of this record |
Delete | Delete | Delete | Delete |
DeleteInList | Delete | Delete | Delete in a list page |
Edit | Edit | Edit | Edit |
EditInline | Edit Inline | EditInline | Edit |
EditListRow | Edit | Edit | EditListRow |
New | New | New | New |