M2 · Rafał Mokrowiecki resource library · v1.0

An IT budget you can explain and maintain

Approved budget, actuals, open commitments, year outturn and transparent cost allocation, with explicit calculation rules.

Start with en-przyklad, the fully worked hypothetical example for June 2027. Use en-szablon for your own data. The example does not represent a client, project result or recommended spending level.

1. Scope and calculation basis

One entity, calendar year, PLN excluding VAT. This is a management and purchasing model: purchases are recognised in the document month, with capital purchases at purchase value. Internal team costs use the basis agreed with finance. Depreciation, accruals, prepayments and bank payments are not calculated automatically. Agree OpEx/CapEx classification within your organisation; the model does not provide accounting advice.

Year outturn = closed-month actuals + open commitments due within the year + future uncommitted costs under the selected case. The approved budget remains a separate comparator. A positive variance means forecast overspend.

Prepared v1.0 scopeCapacity
Budget items / months30 / 12
ERP document rows / commitment stages1,000 / 100
Allocation drivers / ERP mappings / business units12 / 60 / 4

These are the prepared M2 formula ranges, not Excel's technical limits or a spending threshold. Do not add records outside them. Aggregate source data with a reconciliation trail, extend and verify the model, or move to a suitable system.

2. Set-up and company identity

  1. Extract the full package into your own folder and retain an unchanged original.
  2. In Settings, enter company, year, closed months (0–12), report owner and four business-unit names. Use the single case selector.
  3. In Plan, assign each item a stable ID, description, owner, Run/Change, OpEx/CapEx and allocation driver. Enter 12 monthly amounts, including explicit zeros.
  4. Provide driver units, source, period and quantities by business unit. Map ERP export keys to budget IDs.
  5. Complete Commitments and Forecast, then import actuals. Resolve errors before using the report for decisions.

Company name is a central setting. To replace the logo, run M2-Start.cmd → 2 and select the workbook and PNG/JPG. The tool fits the image proportionally into the report's top-left area and creates a new file without changing formulas. Brand also accepts a report owner and accent colour.

.M2.ps1 -Mode Brand -Workbook .my-budget.xlsx -Company "My company" -Owner "IT Director" -LogoPath .logo.png -AccentColour "#2255AA"

Worksheet protection reduces accidental formula edits. It is neither encryption nor data access control; there is no secret password. Input areas are unlocked. Store financial data under your organisation's access rules. Other applications may display the workbook differently.

3. ERP data without retyping invoices

The local importer requires Windows and desktop Microsoft Excel. Select a full CSV export and workbook. It validates the input, replaces the raw data block and saves a new file. It is not a live SAP or Dynamics API connector and does not fetch data from ERP itself.

Standard fieldMeaning
RowIDStable, unique document-line identifier, e.g. document + line number. Not a sequence renumbered after sorting.
DateDocument date on the agreed basis; defaults: yyyy-MM-dd, dd.MM.yyyy or dd/MM/yyyy.
ERPKeyKey mapped to a budget ID in Settings; it may represent an agreed combination of account, cost centre and project.
CommitmentIDThe specific billing-stage ID, blank if the document does not settle a registered commitment.
Counterparty / DescriptionSource counterparty and line description.
AmountPLNPLN excluding VAT; credit notes are negative. Do not append a currency symbol.
BatchExport name or identifier, preserving data provenance.

mapowanie-ERP.json configures column names, delimiter and number convention. The default is semicolon with pl-PL numbers (decimal comma). Set numberCulture to the export convention where needed. Do not mix conventions in one file. Test a decimal amount and a credit note before the first live import.

Each import replaces the previous batch; it does not append rows. Use a full export covering the reporting year to date and corrections. Importing only the latest month would remove earlier actuals from the new workbook version. Import controls cover the full batch; report actuals include only the selected year and closed months.

The importer rejects duplicate IDs, missing mappings, invalid dates, non-numeric amounts, excess rows and commitment links to a different budget item. It compares formulas before and after the operation. Technical checks do not prove completeness against the ledger: agree export totals and scope with finance.

.M2.ps1 -Mode Import -Workbook .my-budget.xlsx -Csv .ERP-export.csv

If organisational policy blocks unsigned scripts, submit the importer to IT for review. The package does not change execution policy or bypass restrictions. Alternatively, paste the eight standard columns as values into ERP C9:J1008, clearing only the previous raw batch first. Enter import count and total controls in Settings. Dates and amounts must be native Excel values, not text that resembles them. This route does not require the script. The supplied importer does not run in Excel for the web or on Mac; those environments have not been tested here.

Importer test environment: Windows, desktop Microsoft Excel 16 and PowerShell 7.6.5. The launcher selects PowerShell 7 if available, otherwise Windows PowerShell. Execution in the latter was blocked by script policy; runtime compatibility there has not been confirmed. Verify other versions in your own environment.

4. Commitments and forecast without double counting

Each billing stage needs a unique ID. Twelve monthly stages are twelve separate amounts, not twelve copies of the entire contract value. Open commitment is the greater of zero and: stage amount + approved change − recognised actuals linked to that stage.

The example's ERP maintenance stage is PLN 144,000. A PLN 120,000 invoice and PLN −2,000 credit note leave PLN 118,000 recognised and PLN 26,000 open. As the original date has passed, the remaining amount moves into the first open month. This is a date-review signal, not an automatic contractual rescheduling.

Forecast inputs contain only future costs outside open commitments. Do not enter the whole expected item cost again. The model cannot identify this semantic duplication automatically. Enter zeros deliberately; a missing required amount prevents the year outturn from being presented.

Cases adjust only future uncommitted costs. Actuals and open contract stages are unchanged. The example's +8%, +15%, −10% and −20% are illustrative, not benchmarks. Set your own monthly adjustments for Run and Change. Compare results by changing the selector; the report does not display three cases simultaneously.

Do not roll an existing annual workbook forward simply by changing the year. Start a new annual template, enter the approved budget and carry forward only unsettled stage balances with new IDs and dates. Prior-year actuals are not deducted in the new year. After December closes, open stages remain outside that year's forecast; there is no fictitious thirteenth reporting month.

5. Allocation and the TCO boundary

Business-unit amount = item year outturn × unit driver quantity / total driver quantity. Driver choice is a business decision: users for licences, volume for data infrastructure, effort for support services, or direct assignment using 1/0. These examples do not make a driver universally appropriate. State its unit, source and period, and agree with process owners whether it explains service consumption.

One annual driver set is applied. Changing it reallocates the entire year outturn, including its historical component. Retain approved versions or extend the model with periods if fixed monthly drivers are required. Allocation totals reconcile to outturn; displayed rounding does not change stored precision.

This is annual IT budget cost allocation, not full lifecycle TCO. Full TCO also needs an explicit horizon, implementation and migration, operation, internal effort, changes and retirement, with shared costs counted once. Allocating budget to departments does not itself establish profitability or business value.

6. Management cycle and exit from Excel

  1. Finance confirms source scope and recognition basis.
  2. The report owner imports the full batch, reconciles count and total, and resolves mapping errors.
  3. Item owners review contract stages, changes, renewal decision deadlines and uncommitted forecast.
  4. The IT director agrees variances, decisions, owners and deadlines, then saves an approved dated version in the company repository.

M2 assumes one owner editing the reporting file. Contributions from several managers can be collected as agreed exports and consolidated. It does not implement approval workflows, row-level access rights or an immutable audit log. When these become process requirements, assess a planning/finance system or a database with suitable workflow. No rule here says that a particular budget value makes Excel unsuitable.

M2-Start.cmd → 3 exports flat source tables, drivers, assumptions and settings to CSV, plus a manifest documenting version and formulas. Preserve stable IDs. Reimplement the rules in this guide and reconcile budget, actuals, open commitments, outturn and allocation on migration. CSV is an interchange format, not a ready-made integration with every destination system.

7. Example control totals

Base casePLN
Annual budget1,232,000
January–June actuals627,000
Open commitments due within the year262,000
Future uncommitted costs252,200
Year outturn1,141,200
Outturn variance against budget−90,800 (−7.4%)
MES stage outside the year, separate90,000

The variance is not automatically a saving: the MES stage, for example, is dated in the following year. Explain changes in scope and timing first. “Forecast complete” means the model's checks have been met, not that finance has approved the data.

Platform documentation

These sources were checked on 1 November 2026. They document platform behaviour, not the fictional example or the quality of this M2 implementation.