These cookies are required for the website to function properly. They ensure security, enable basic features like page navigation, and store user session data. You cannot disable these cookies.
Data model
Retain planning identity from the first assumption to the published packet.
23 tables · 73 relationships
Migration order
- Employees, ChartOfAccounts and BudgetEntities establish the permitted identity and account population.
- BudgetCycles, BudgetAccountSettings and Targets establish the calendar, mapping, units and decision policies.
- Drivers, DriverValues and DriverFormulas establish the versioned calculation basis.
- BudgetVersions, BudgetLines, Scenarios and WhatIfRuns retain proposed plans and alternatives.
- RollingForecasts, RollingForecastSubmissions and ForecastAdjustments retain the accepted outlook and per-cell basis.
- Commitments, BudgetTransfers and Approvals retain obligations and authorized reallocations.
- VarianceAnalyses, FluxComments, BoardPacks and AssumptionsLog retain the comparison and review evidence.
Snapshot identity
23 tables
Actual and Forecast cells retain their import or calculation SnapshotKey. DriverValues belongs to a BudgetVersion and scenario. A published comparison names its actuals, forecast and transfer cutoff. Applying a transfer changes EffectiveBudget through append-only deltas, preserving the original locked amount. BoardPacks retains its exact manifest and PDF hash.
Actual and Forecast cells retain their import or calculation SnapshotKey. DriverValues belongs to a BudgetVersion and scenario. A published comparison names its actuals, forecast and transfer cutoff. Applying a transfer changes EffectiveBudget through append-only deltas, preserving the original locked amount. BoardPacks retains its exact manifest and PDF hash.
BudgetCyclesThe annual or quarterly planning cycle. One Cycle per FiscalYearmaster
| Field | Type | Required | Details |
|---|---|---|---|
CycleCode | text | yes | e.g. FY26-Annual, FY26-MidYear |
Name | text | yes | e.g. FY26 Annual Plan |
Cadence | select | yes | Annual, MidYearReforecast, QuarterlyUpdate, Adhoc |
FiscalYear | number | yes | US calendar year |
FiscalStartDate | date | yes | Typically Jan 1 |
FiscalEndDate | date | yes | Typically Dec 31 |
BaselineSource | select | yes | PriorYearActuals, PriorYearBudget, BoardPack, ZBB |
KickoffDate | date | Cycle launch date | |
SubmissionDueDate | date | Department submissions deadline | |
Status | select | yes | Planning, Open, Locked, Closed |
Currency | select | yes | USD only at this tier |
Owner | reference | yes | → Employees (FP&A Director) |
Active | toggle | yes | |
TransferApprovalThreshold | currency | yes | USD threshold: FP&A Director up to and including this amount, CFO above; no self-approval |
TransferPolicy | text | yes | Approved source availability, closed-period and account-class restrictions |
BudgetVersionsVersions within a Cycle. The audit-friendly chain — V1-Submission,transaction
| Field | Type | Required | Details |
|---|---|---|---|
VersionNumber | text | yes | e.g. FY26-V1, FY26-V3-BoardApproved |
Cycle | reference | yes | → BudgetCycles |
Name | text | yes | Display label |
VersionType | select | yes | Submission, NegotiationCFO, BoardApproved, MidYearReforecast, BoardApprovedRevision |
ParentVersion | reference | → BudgetVersions (self) — what this Version forked from | |
Status | select | yes | Draft, Submitted, InReview, Approved, Locked, Superseded |
OwnerEntity | reference | → BudgetEntities (when Version is Entity-scoped during submission) | |
CreatedBy | reference | yes | → Employees |
CreatedAt | date | yes | |
ApprovedBy | reference | → Employees (CFO on final approval) | |
ApprovedAt | date | ||
LockedAt | date | Set when Status flips to Locked | |
TotalRevenue | formula | yes | Sum base-scenario Budget amounts for this Version classified as Revenue; exclude Actual and Forecast rows |
TotalOpEx | formula | yes | Sum base-scenario Budget amounts for this Version classified as OperatingExpense under the frozen planning mapping |
EBITDA | formula | yes | Planning measure from the frozen Revenue minus CostOfSales minus OperatingExpense mapping; exclude depreciation, amortization, interest and tax; retain the reconciliation to ledger classifications |
Notes | text | ||
SubmissionRevision | number | yes | Increment on material resubmission; approvals bind this exact revision |
BoardResolutionRef | text | Recorded external board authorization, required before BoardApproved or BoardApprovedRevision is locked | |
BoardResolutionDate | date | Date of the recorded board decision | |
BoardEvidenceVerifiedBy | reference | → Employees; CFO verifying the external resolution, not acting as a fictional Board role |
BudgetEntitiesCost centers, departments, programs, and legal entities beingmaster
| Field | Type | Required | Details |
|---|---|---|---|
EntityCode | text | yes | |
Name | text | yes | |
EntityType | select | yes | LegalEntity, Division, Department, CostCenter, Program, Initiative |
Parent | reference | → BudgetEntities (self) | |
Owner | reference | yes | → Employees (Cost-Center Head) |
Currency | select | yes | USD |
FiscalCalendar | select | yes | UScalendar — Jan-Dec at this tier |
Active | toggle | yes |
BudgetLinesThe atomic line of the plan. Each cell keeps its version, period, account, entity and scenario. Budget cells are unique within that basis. Forecast cells additionally require RollingForecast and SnapshotKey; Actual cells require a reconciled ledger SnapshotKey. A comparison names its chosen bases explicitly instead of joining ambiguous latest rows. Published snapshots and locked plan amounts are immutable.transaction
| Field | Type | Required | Details |
|---|---|---|---|
Version | reference | yes | → BudgetVersions |
Period | date | yes | First of month — the periodic grain |
Account | reference | yes | → ChartOfAccounts (read from Finance / Accounting) |
Entity | reference | yes | → BudgetEntities |
Scenario | reference | → Scenarios (null = base scenario for the Version) | |
Type | select | yes | Budget, Forecast, Actual |
Amount | currency | yes | USD |
DriverFormula | reference | → DriverFormulas (when Amount was computed, not entered) | |
ManualOverride | toggle | True when user overrode the formula-computed value | |
ComputedAmount | currency | What the formula produced (kept for diff display) | |
CommittedAmount | currency | Read-only operational cache of remaining unrecognized commitments, scoped to the active baseline; refreshing this cache cannot change locked Amount or any published snapshot | |
Notes | text | ||
LastRecomputedAt | date | ||
RollingForecast | reference | → RollingForecasts; required only for Forecast cells | |
SnapshotKey | text | yes | Immutable calculation or reconciled import batch identity; included in Forecast/Actual uniqueness |
CalculationBasis | text | yes | Frozen driver values, defaults, formula revision, mapping and manual override evidence |
Published | toggle | yes | True only after validation and reconciliation; unpublished batches are excluded from reporting |
DriversInput drivers used by formulas — Headcount, AvgSalary, RentPerSF,master
| Field | Type | Required | Details |
|---|---|---|---|
DriverCode | text | yes | e.g. HEADCOUNT, AVGSALARY, RENT_PER_SF |
Name | text | yes | |
Category | select | yes | Workforce, Compensation, Facilities, Sales, Productivity, External |
Unit | select | yes | Count, Currency, Percent, SquareFeet, Hours, Ratio |
DefaultValue | number | Used when no DriverValues row exists for the cell | |
Sourced | select | yes | Manual, FromHRMS, FromCRMForecast, FromPayroll, FromPortfolio, FromExternal |
Owner | reference | yes | → Employees (FP&A Analyst typically) |
Active | toggle | yes |
DriverValuesPer Driver per Entity per Period the actual numeric value used by Line item of Drivers.line item
| Field | Type | Required | Details |
|---|---|---|---|
Driver | reference | yes | → Drivers |
Entity | reference | yes | → BudgetEntities |
Period | date | yes | First of month |
Scenario | reference | → Scenarios (null = base) | |
Value | number | yes | Interpreted per Drivers.Unit |
Source | select | yes | Manual, FromIntegration, ScenarioOverride |
EffectiveFrom | date | yes | |
Notes | text | ||
Version | reference | yes | → BudgetVersions; unique with Driver, Entity, Period and Scenario |
BasisRevision | text | yes | Frozen input revision used by the calculation; preserve earlier approved bases |
DriverFormulasFormula definitions referencing Drivers and other DriverFormulas.master
| Field | Type | Required | Details |
|---|---|---|---|
FormulaCode | text | yes | e.g. PERSONNEL_EXPENSE, FACILITIES_RENT |
Name | text | yes | |
Account | reference | yes | → ChartOfAccounts (the GL account this formula computes for) |
Expression | text | yes | e.g. Drivers.HEADCOUNT * Drivers.AVGSALARY * (1 + Drivers.BENEFIT_LOAD_PCT/100) / 12 |
AppliesTo | select | yes | AllEntities, EntityType, NamedEntities |
EntityFilter | text | When AppliesTo != AllEntities | |
Cadence | select | yes | PerMonth, PerQuarter, PerYear |
ManualOverridable | toggle | yes | When true users may override the computed BudgetLine.Amount |
Owner | reference | yes | → Employees (FP&A Director or Admin) |
Active | toggle | yes | |
Revision | text | yes | Immutable expression revision retained with each computed line |
ScenariosWhat-if scenarios — Base, Upside, Downside, BoardCommit,transaction
| Field | Type | Required | Details |
|---|---|---|---|
ScenarioCode | text | yes | |
Name | text | yes | |
Version | reference | yes | → BudgetVersions |
ScenarioType | select | yes | Base, Upside, Downside, BoardCommit, BackOfTheEnvelope, Stress |
Lineage | reference | → Scenarios (parent — what this was cloned from) | |
Description | text | Narrative of the assumption set | |
Author | reference | yes | → Employees |
CreatedAt | date | yes | |
Status | select | yes | Draft, Computed, Shared, Archived |
LastComputedAt | date |
WhatIfRunsOutputs of the scenario engine. One row per scenario executiontransaction
| Field | Type | Required | Details |
|---|---|---|---|
RunNumber | text | yes | |
Scenario | reference | yes | → Scenarios |
Version | reference | yes | → BudgetVersions |
BaselineRevenue | currency | yes | |
ScenarioRevenue | currency | yes | |
BaselineOpEx | currency | yes | |
ScenarioOpEx | currency | yes | |
BaselineEBITDA | currency | yes | |
ScenarioEBITDA | currency | yes | |
RevenueDelta | formula | yes | fx: ScenarioRevenue − BaselineRevenue |
EBITDADelta | formula | yes | fx: ScenarioEBITDA − BaselineEBITDA |
InputsSummary | text | Markdown table of Driver overrides applied | |
RunAt | date | yes | |
RunBy | reference | yes | → Employees |
RollingForecastsThe rolling N-month forward view that updates monthly. Distincttransaction
| Field | Type | Required | Details |
|---|---|---|---|
ForecastCode | text | yes | e.g. FY26-Q3-12moForecast |
Name | text | yes | |
Cycle | reference | yes | → BudgetCycles |
AsOfPeriod | date | yes | The "as of" period (first month of forecast window) |
HorizonMonths | number | yes | e.g. 12 for a 12-month rolling forecast |
WindowStart | date | yes | AsOfPeriod |
WindowEnd | date | yes | Exclusive end: AsOfPeriod plus HorizonMonths; include month starts >= WindowStart and < WindowEnd |
Status | select | yes | Open, Locked, Superseded |
Owner | reference | yes | → Employees (FP&A Director) |
LastRecomputedAt | date | ||
Notes | text | ||
PublishedSnapshotKey | text | Accepted forecast calculation snapshot, preserved when the next monthly forecast is created | |
ActualsSnapshotKey | text | yes | Reconciled actuals batch used as the forecast basis |
RollingForecastSubmissionsPer Entity per RollingForecast submission of the Entity's view oftransaction
| Field | Type | Required | Details |
|---|---|---|---|
SubmissionNumber | text | yes | |
RollingForecast | reference | yes | → RollingForecasts |
Entity | reference | yes | → BudgetEntities |
SubmittedBy | reference | yes | → Employees (Cost-Center Head) |
Status | select | yes | Draft, Submitted, FPAReviewed, Accepted, Reopened |
SubmittedAt | date | ||
ReviewedBy | reference | → Employees (FP&A Analyst) | |
ReviewedAt | date | ||
TotalForecastRevenue | currency | Entity's revenue forecast across the window | |
TotalForecastOpEx | currency | Entity's OpEx forecast across the window | |
Notes | text | Cost-Center Head commentary | |
SubmissionRevision | number | yes | Immutable submitted revision with its per-account, per-period forecast line snapshot |
LinesSnapshotKey | text | yes | BudgetLines Forecast cells for this RollingForecast and Entity; totals alone cannot produce a forecast curve |
AcceptedBy | reference | → Employees; FP&A Director accepting the reviewed revision | |
AcceptedAt | date | Acceptance timestamp |
ForecastAdjustmentsTop-down overlays by FP&A on top of the Entity-submitted forecast.transaction
| Field | Type | Required | Details |
|---|---|---|---|
AdjustmentNumber | text | yes | |
RollingForecast | reference | yes | → RollingForecasts |
Entity | reference | yes | → BudgetEntities; allocate an organization-level change into explicit scoped cells before applying |
Account | reference | yes | → ChartOfAccounts |
Period | date | yes | First of month |
Type | select | yes | AddRevenue, RemoveRevenue, AddOpEx, RemoveOpEx, ManualOverlay |
Amount | currency | yes | Signed additive USD delta exactly once; Add types >= 0, Remove types <= 0; ManualOverlay is also a delta, never an implicit replacement |
Reason | text | yes | |
AdjustedBy | reference | yes | → Employees (FP&A Director or CFO) |
AdjustedAt | date | yes | |
SnapshotKey | text | yes | Forecast calculation revision receiving this overlay; no changes to published snapshots |
VarianceAnalysesPeriodic Actual-vs-Budget-vs-Forecast per `(Version, Period, Entity, Account, ActualsSnapshotKey, ForecastSnapshotKey, TransferCutoff)`.transaction
| Field | Type | Required | Details |
|---|---|---|---|
Period | date | yes | First of month |
Entity | reference | yes | → BudgetEntities |
Account | reference | yes | → ChartOfAccounts |
Version | reference | yes | → BudgetVersions (the locked Version variance is computed against) |
BudgetAmount | currency | yes | Locked baseline plus authorized applied transfer deltas through TransferCutoff |
ActualAmount | currency | yes | |
ForecastAmount | currency | From the explicitly selected accepted forecast snapshot covering this period; absent remains null | |
Variance | formula | yes | fx: ActualAmount − BudgetAmount |
VariancePct | formula | Variance / ABS(BudgetAmount) × 100; null when BudgetAmount is zero, with absolute variance still shown | |
ForecastVariance | formula | fx: ActualAmount − ForecastAmount | |
Material | formula | yes | ABS(Variance) > MaterialityThreshold OR non-null ABS(VariancePct) > configured MaterialityPct; dollars and percentages are evaluated separately |
Owner | reference | yes | → Employees (Cost-Center Head responsible for Entity) |
FluxStatus | select | yes | NotRequired, Pending, Submitted, Reviewed |
ComputedAt | date | yes | |
ActualsSnapshotKey | text | yes | Reconciled ledger batch; part of this comparison identity |
ForecastSnapshotKey | text | Explicit accepted forecast snapshot; not a moving latest-row lookup | |
TransferCutoff | date | yes | Applied transfer cutoff used for EffectiveBudget and historical reproducibility |
SettingsBasis | text | yes | Frozen account mapping and threshold basis; entity override precedes global setting |
FluxCommentsNarrative explanations of material variances. One or more per Line item of VarianceAnalyses.line item
| Field | Type | Required | Details |
|---|---|---|---|
VarianceAnalysis | reference | yes | → VarianceAnalyses |
Author | reference | yes | → Employees |
AuthorRole | select | yes | CostCenterHead, FPAAnalyst, FPADirector, CFO |
Body | text | yes | Markdown — the flux commentary |
Driver | reference | → Drivers (when the comment cites a specific driver) | |
Quantification | currency | Dollar amount the comment explains (when partial) | |
CreatedAt | date | yes | |
Reviewed | toggle | True after FP&A Analyst review |
BoardPacksQuarterly (or monthly) board financial packets. Generated 5transaction
| Field | Type | Required | Details |
|---|---|---|---|
PackNumber | text | yes | |
Cycle | reference | yes | → BudgetCycles |
MeetingDate | date | yes | |
AsOfPeriod | date | yes | The close period the pack reports on |
BasedOnVersion | reference | yes | → BudgetVersions (typically V3-BoardApproved or BoardApprovedRevision) |
BasedOnForecast | reference | → RollingForecasts | |
Status | select | yes | Draft, Generated, InReview, Approved, Distributed |
GeneratedAt | date | ||
ApprovedBy | reference | → Employees (CFO) | |
ApprovedAt | date | ||
PdfURL | text | Frozen PDF | |
DistributedAt | date | ||
RevisionRequested | toggle | Set when board mandates a budget revision | |
RevisionNotes | text | Board-mandated changes feeding budget-revision-after-board-approval | |
SnapshotManifest | text | yes | Exact budget revision, actuals batch, forecast snapshot, transfer cutoff, scenario runs, assumptions and PDF hash |
BoardResolutionRef | text | External board mandate reference; CFO pack approval alone cannot create board authorization |
CommitmentsRead-mirror of open POs and signed contracts from SCM Procurementtransaction
| Field | Type | Required | Details |
|---|---|---|---|
CommitmentNumber | text | yes | Source system identifier (e.g. PO number) |
SourceSystem | select | yes | Procurement, Contracts, Manual |
SourceRecordId | text | yes | Foreign reference into source system |
Account | reference | yes | → ChartOfAccounts |
Entity | reference | yes | → BudgetEntities |
Period | date | yes | Expected GL hit period |
Vendor | text | ||
Description | text | ||
CommittedAmount | currency | yes | USD; remaining open commitment |
OriginalAmount | currency | yes | USD; full PO / contract amount |
Status | select | yes | Open, PartiallyConsumed, Consumed, Cancelled |
CommittedAt | date | yes | |
LastSyncedAt | date | yes | |
SourceLineKey | text | yes | Stable source line and allocation identity with source system, account, entity and period; not just a whole PO id |
BudgetTransfersMid-year reallocation of approved budget between Entities ortransaction
| Field | Type | Required | Details |
|---|---|---|---|
TransferNumber | text | yes | |
Version | reference | yes | → BudgetVersions (the approved Version being amended) |
Period | date | yes | |
FromEntity | reference | yes | → BudgetEntities |
FromAccount | reference | yes | → ChartOfAccounts |
ToEntity | reference | yes | → BudgetEntities |
ToAccount | reference | yes | → ChartOfAccounts |
Amount | currency | yes | USD; positive |
Reason | text | yes | |
RequestedBy | reference | yes | → Employees |
RequestedAt | date | yes | |
ApprovedBy | reference | → Employees (FP&A Director or CFO above threshold) | |
ApprovedAt | date | ||
Status | select | yes | Draft, Submitted, Approved, Applied, Rejected, Cancelled |
AppliedAt | date | When both balanced deltas became effective atomically; retry returns the same applied transfer | |
SubmissionRevision | number | yes | Exact transfer revision authorized by its approval route |
TargetsTop-down financial targets cascaded from CFO down to Entities.master
| Field | Type | Required | Details |
|---|---|---|---|
TargetCode | text | yes | |
Cycle | reference | yes | → BudgetCycles |
Entity | reference | yes | → BudgetEntities (use root entity for org targets) |
Account | reference | → ChartOfAccounts (null when target is a derived metric like EBITDA) | |
Metric | select | yes | Revenue, OpEx, GrossMargin, EBITDA, Cash, Headcount, NewLogo |
Period | date | yes | |
Amount | number | yes | USD for currency metrics, count for Headcount/NewLogo; retain metric unit |
SetBy | reference | yes | → Employees (CFO) |
SetAt | date | yes | |
Notes | text | ||
Active | toggle | yes |
ApprovalsApproval-step audit trail for a budget revision or its specific BudgetTransfer. Cost-Center Head submits; FP&A Analyst reviews, FP&A Director approves the planning review and CFO gives final financial approval. External board evidence is recorded separately by CFO. A transfer uses its configured Director/CFO route rather than approving the whole version again. Line item of BudgetVersions.line item
| Field | Type | Required | Details |
|---|---|---|---|
Version | reference | yes | → BudgetVersions |
StepOrder | number | yes | 1, 2, 3 ... |
ApproverRole | select | yes | FPAAnalyst, FPADirector, CFO |
Approver | reference | → Employees (resolved from Role + scope) | |
Status | select | yes | Pending, Approved, Rejected, Skipped |
DecidedAt | date | ||
Comment | text | ||
BudgetTransfer | reference | → BudgetTransfers; when set, must belong to Version and authorizes only that transfer | |
SubmissionRevision | number | yes | Version or transfer revision, according to the declared approval subject |
AssumptionsLogAudit trail of every Driver, DriverValue, and DriverFormula changetransaction
| Field | Type | Required | Details |
|---|---|---|---|
LogNumber | text | yes | |
Version | reference | → BudgetVersions | |
ChangeType | select | yes | DriverCreated, DriverUpdated, DriverValueUpdated, FormulaCreated, FormulaUpdated, TransferApplied, ScenarioCloned, RevisionApplied |
Driver | reference | → Drivers | |
DriverFormula | reference | → DriverFormulas | |
FromValue | text | Serialized prior value | |
ToValue | text | Serialized new value | |
Reason | text | yes | |
ChangedBy | reference | yes | → Employees |
ChangedAt | date | yes | |
RelatedRecord | text | e.g. BudgetTransfer ID, BoardPack ID |
BudgetAccountSettingsPer-Account (optionally per-Entity) thresholds that drivemaster
| Field | Type | Required | Details |
|---|---|---|---|
Account | reference | yes | → ChartOfAccounts |
Entity | reference | → BudgetEntities (null = all entities) | |
MaterialityThreshold | currency | yes | Variance dollar threshold above which Material flag fires |
MaterialityPct | number | Variance % alternate threshold | |
RequiresFluxComment | toggle | yes | |
Active | toggle | yes | |
PlanningClass | select | yes | Revenue, CostOfSales, OperatingExpense, DepreciationAmortization, Interest, Tax, BalanceSheet, Other |
EffectiveFrom | date | yes | Basis start; no ambiguous overlapping active scope |
BasisRevision | text | yes | Mapping and threshold revision retained by comparisons |
EmployeesA scoped employee identity directory synchronized from the organization identity or HR source. This reference supports ownership and approval attribution; it does not add payroll or HR administration. Role membership alone never grants access to every directory field. External auditors and portal users receive only the identities needed for their granted work.master
| Field | Type | Required | Details |
|---|---|---|---|
EmployeeNumber | text | yes | Stable source identifier; unique within the organization |
Name | text | yes | Display name for an assigned owner or approver |
UserKey | text | yes | Bound to the authenticated platform user; never supplied as authority by a client |
Department | text | Organization-scoped department key | |
Manager | reference | → Employees; synchronized reporting relationship | |
Active | boolean | yes | Inactive identities retained for historical attribution; cannot receive new work |
ChartOfAccountsA read-only reference mirror of ledger accounts used for planning, actuals and variance analysis. The connected ledger owns account creation, posting permissions and balances. Import keys are unique per ledger entity; this mirror does not turn the planning application into a general ledger.master
| Field | Type | Required | Details |
|---|---|---|---|
AccountNumber | text | yes | Stable account code from the source ledger |
Entity | text | yes | Entity key from the source ledger |
Name | text | yes | Account display name |
AccountType | select | yes | Asset, Liability, Equity, Revenue, Expense |
Active | boolean | yes | Source account availability |