← Back to projects

Models · the calculation behind the HULC app

The HULC models

In use · liquidity model 14.3 and budget model 3.5

The app shows a handful of figures. Behind them are two workbooks that model the company month by month for three years, in three scenarios, and check themselves before anything reaches the managing director. Here are the sheets, with the figures of the demo company Odalsvarme AS, and a walkthrough of how it all fits together.

Odalsvarme AS is fictitious. The company, its accounts and its figures were made for the demo. The workbooks and the app are in Norwegian.

Formulas
70,946
Sheets
34
Checks
133
Scenarios
3
Months ahead
36

From accounts to app

  1. 01

    The accounts

    Six exports from the accounting and payroll systems, company data from the Brønnøysund registers and the latest filed annual accounts.

  2. 02

    The conversation

    Fifteen minutes with the managing director about what the accounts cannot know: plans, targets and what unexpected events would mean for this particular company.

  3. 03

    The models

    Liquidity and budget, 36 months ahead in Base, Downside and Stress, with one calculation engine per model.

  4. 04

    The checks

    Every check must pass in all three scenarios before a file can be delivered.

  5. 05

    The app

    A values-only copy in which one flat sheet is all the app reads. The app calculates nothing itself.

The workbooks

Excerpts of the real sheets, with the figures of Odalsvarme AS after eight booked months of 2026. Click a cell to see the formula and the note behind the figure, and switch sheets with the tabs at the bottom. Sheet names and labels are in Norwegian, as in the models.

Model 01

Liquidity model 14.3

Will the money last, and what can the company withstand if something unexpected happens?

15 sheets · 25,072 formulas · 76 checks · 925 figures to the app

Model 02

Budget and operations model 3.5

What does it take for the year to turn a profit, and what drives the result?

19 sheets · 45,874 formulas · 57 checks · 1,570 figures to the app

The excerpts show a selection of rows and columns from each sheet. The greyed-out tabs are sheets that are not included, such as RÅDATA with the exports and NØKLER with the map of every input. Formulas are shown as Excel stores them.

Why two workbooks

The managing director of a small company asks two questions before most decisions. Will the money last over the coming months? And what does it take for the year to turn a profit? The accounts answer neither, because they only show what has already happened.

The questions sound alike, but they need different models. Whether the money lasts depends on when cash comes in and goes out: credit terms, VAT periods, withholding tax, holiday pay and loan repayments. Whether the year turns a profit depends on what drives the result: volume, price, margins, staffing and costs. A model that tries to do both equally well ends up too coarse for one or too heavy for the other.

HULC therefore has two workbooks. The liquidity model follows every krone into and out of the operating account. The budget and operations model builds the result from the bottom up, from revenue streams, positions and cost lines, and derives the balance sheet and cash flow from there. Both read the same accounts, the same answers from the managing director and the same scenarios, and both run 36 months ahead.

From accounts to model

The work starts with six exports from the accounting and payroll systems at the balance sheet date:

The exports are pasted into the RÅDATA sheet in their original form, never converted by hand. No formula reads a fixed row there, so an export with more or fewer accounts works the same way. The New client button also fetches company data from the open services of the Norwegian Register of Business Enterprises. The municipality number gives the zone for employer’s national insurance contributions, and the industry code gives the sector.

In INNGANGSDATA the accounts are summed into the model’s lines using account ranges based on the Norwegian standard chart of accounts. Two mechanisms keep an account from ending up in the wrong place. Account coverage checks that each account falls in exactly one range. The chart-of-accounts check compares each account name with the line it lands on, using more than a hundred keywords. An account called «Husleie» (rent) inside the cost-of-goods range is flagged before it can affect the figures. Finally, the opening balance is reconciled against the latest filed annual accounts.

The drivers are then read from the accounts:

Every driver follows the same pattern. The figure is calculated from the accounts in a white cell, and a blue cell beside it can override it. The formula uses the override when there is one, and the figure from the accounts otherwise. It is always visible what was derived and what was decided.

The conversation with the managing director

The accounts do not know that a fitter leaves in October, that a service van will be bought next spring, or how hard unexpected events could hit the company. We ask about that in a fifteen-minute conversation.

The conversation form is generated by a button in the model and pre-filled with suggestions from the accounts. The managing director therefore does not answer a long list. They confirm or correct what is already there, and add what only they can know. In the form, the adviser’s estimates are yellow and the managing director’s answers are blue. The questions cover:

The Import conversation button writes the answers to the right places. The notes from the conversation carry through to the app, under «Forutsetninger» (assumptions).

The liquidity model

The liquidity model calculates the operating account with the direct method. Every receipt and every payment is calculated separately, month by month. The calculation runs in a fixed order, where each step only reads from the steps above it.

  1. The result for the month: revenue, cost of goods, salaries, holiday pay, employer’s contributions, pensions, other costs, bad debts, depreciation, interest and tax.
  2. VAT: output and input VAT per month, collected into VAT periods and paid when due. A negative period gives a refund two months after the period ends.
  3. Inventory and purchases: inventory is steered towards the inventory-days target with half of the seasonal pattern, and purchases are whatever it takes to reach the target.
  4. Receipts from customers run through a payment profile. Credit days are turned into the share of sales paid in the month of sale and in each of the next four months, less expected bad debts. Customer items open at the balance sheet date are paid on their due dates.
  5. Payments: suppliers through a similar profile, net salaries, withholding tax to the tax deduction account, employer’s contributions per period, holiday pay in June, pensions each quarter, advance tax in February and April and residual tax, investments, repayments and interest on each loan, and dividends.
  6. The operating account: opening balance plus receipts minus payments. A negative balance is a draw on the overdraft, with interest and commitment fee.

Alongside, the balance sheet and the cash flow are calculated with the indirect method, from the result and the changes in the balance sheet. The two methods must give the same change in the operating account in every forecast month. The balance sheet must balance. Equity must roll forward with profit and dividends, and loans with repayments and new borrowing. Each of these is a separate check.

Out of this come the figures that answer the question:

The budget and operations model

The budget model builds the result from the bottom up. It has four table sheets the managing director will recognise.

INNTEKTER holds up to six revenue streams. Each stream has one of four model types:

Each stream has its own variable cost share, so the contribution margin can be read per stream. The suggestions come from the accounts the stream is linked to.

BEMANNING has one row per position, with full-time equivalents, start and end dates, annual salary and wage adjustment. Holiday pay, employer’s contributions by zone and pensions follow automatically. KOSTNADER holds the cost lines with fixed, variable or step behaviour, indexed once a year. INVESTERINGER holds amount, month, depreciation method, useful life and financing.

From this, the income statement, balance sheet and cash flow are calculated for every month. Three parts take more than a simple formula:

OUTPUT shows the key figures per scenario, with break-even revenue and margin of safety. The five drivers that move the result most, and what must happen to reach the profit target, are shown there too.

The scenarios

Both models calculate three scenarios. Base is the drivers from the accounts with the answers from the conversation. Downside and Stress build on what the managing director says about unexpected events, in a mild and a severe version, not on fixed percentages from the template. At Odalsvarme, Downside is a 15% fall in volume and a margin 2 percentage points weaker. In Stress, the largest customer, with 32% of revenue, disappears from the first forecast month, the rest falls 10%, and the margin is squeezed by 4 points.

The model calculates one scenario at a time. Data tables in OUTPUT run all three through the same calculation and collect the key figures, so three scenarios do not mean three copies of the model that can drift apart. Booked months are identical in all scenarios, and a scenario only takes effect from the month after.

Sensitivity uses the same axes in both models: revenue down 20% and 10% and up 10%, gross margin up 2 and 4 points, and customer credit 10 and 20 days longer. The changes apply only to the forecast months. When Stress means losing the largest customer, the liquidity model also calculates the smallest fixed monthly cut that keeps the operating account within the facility.

The checks

A model that gives wrong figures without saying so is worse than no model. The liquidity model has 76 checks and the budget model 57, and they are evaluated in all three scenarios. They come in five kinds:

The master check is OK only when every check passes. A warning does not stop delivery, but it must be read and assessed. At the bottom of the check sheet is also the list of inputs where the model uses its own estimate because the managing director gave none. That list is shown in the app, so it is never hidden what was estimated.

Every input has a fixed key in the NØKLER sheet, with sheet, address and label. A separate check compares the label at each address with the map, so the map cannot drift without the master check saying so. Every change to the templates is saved as a new version. It is tested against fixed worked examples with known answers, and with the new feature switched off it must produce zero differing cells against the previous version.

When the months are booked

A budget is worth most when it is compared with what actually happens. Each month, the Monthly routine button reads the month-end trial balance into the FAKTISK sheet. The booked months replace the calculation, and the forecast for the months after starts from the actual balances of receivables, payables and the operating account.

AVVIK shows the forecast against what happened, line by line. The budget model splits the revenue variance into a volume variance and a price variance for the two largest streams, and shows a rolling forecast: actual year to date plus the budget for the rest of the year. The liquidity model has a six-month backtest with fixed tolerances. After three booked months, supplier credit days are taken from the booked months instead of the budget.

From workbook to app

The managing director never receives the Excel file. When the master check is OK, the Delivery copy button creates a copy with values only and no macros. The data tables are read before the copy is made, so Downside and Stress keep their own figures.

The app reads only one sheet in the copy, APP. It is flat, with one row per figure and seven columns: key, scenario, period, value, unit, description and source. The liquidity model gives 925 rows and the budget model 1,570. The app always reads by key, never by row number. A new version of a model can add keys, but it cannot change the meaning of a key without renaming it.

Before showing the figures, the app runs its own checks. The master check must be OK, and the booked months must lie before the delivery. The monthly series must agree with the key figures, and the booked months must be identical in every scenario. The overdraft must never exceed the facility, and in a profitable year net profit must never exceed pre-tax profit. The app calculates no new figures. If it finds an error, it shows a red banner instead of the figures.

Odalsvarme AS, a worked example

Odalsvarme AS is fictitious: a heat pump company in Skarnes with 16 employees and revenue of NOK 27.5 million in 2025. The accounts were generated to test the models and demonstrate the app, and they are the same accounts in both.

At the turn of the year the operating account held NOK 3.3 million, and the NOK 2 million overdraft was unused. A dividend of 1.6 million had been provided for, and pre-tax profit for 2025 was 2.5 million. The 2026 budget builds on what the managing director said in the conversation: prices up 3% in January, heat pump sales up about 6%, and a 4% wage settlement in April. A fitter leaves in October, a new one starts in January, and a service van is bought in April 2027. The target is 3 million before tax. The budget falls short, at 2.28 million.

From January to August 2026, things happened that were not in the budget. Service agreements went from NOK 179 to 199 in March, operating supplies worth 185,000 were bought the same month, and the wage settlement came in at 4.5%. In August an advance order of heat pumps was paid in cash, and 1.25 million was drawn on the overdraft. After August the figures look like this:

After August 2026 Base Downside Stress
Pre-tax profit 2026 2,882,752 1,660,757 −127,814
Lowest operating account balance −1,196,730 −1,194,367 −8,353,116
When Sep 2026 Sep 2026 Nov 2028
NOK 2 million facility breached no no July 2027

In Downside and Stress the service van is postponed, as the managing director said in the conversation. The year is tracking 117,000 below target. In Base the operating account is lowest in September, right after the advance order, but well within the facility, and the account turns. Even so, runway is only 3.1 weeks, against 19.9 at the turn of the year. If Odalsvarme loses its largest customer, the facility holds until July 2027. A fixed cut of about 235,000 a month from September 2026 would keep the operating account within the facility.

The budget model also has a cash side. There the overdraft is repaid after August, and cash is lowest in September 2026, at 322,000. The difference from the liquidity model is that the liquidity model follows payment dates and due dates more closely. When both models have been delivered, the app uses the liquidity model for the question of whether the money will last.

What the models do not do

The models do not replace the accounts or the accountant. They calculate what has not happened yet, and the figures are never more certain than the assumptions. That is why the assumptions are written out, the estimates are listed, and the scenarios are the managing director’s own. Downside and Stress are not probabilities, but what the company must be able to withstand for the plan to hold.

Some limits are known and documented in the models. Credit terms beyond four months are paid in the fourth month. Deferred tax is not included in the budget model. Sensitivity becomes almost flat when the low point falls in the first forecast month, because a change in revenue barely reaches the account in the same month. Such limits are listed in the PROSESS sheet, next to the checks that catch them.

See the result

What the managing director sees is the app: how the year is tracking, whether the money will last, and what the company can withstand if something unexpected happens. We are taking on three pilot companies that can try it free of charge with their own figures.