Nordhem Fastigheter
An AI Lead project for the property arm of a Nordic industrial group that builds bathrooms for hotels and homes. Four AI flows that give every number in the board report a source, with a person signing off every step.

The brief
Every month the numbers for the board went through manual exports, hand counts and one person's reading before they reached the table. Nobody cut corners. The process just had no way to show where a number came from. Together with the group's controller, I designed four AI flows that give every number a receipt, and kept a person in charge of every step.

The challenge
A report the board had to take on trust.
- 01
Hands on every number.
Vacancy counted and typed in by hand, charts redrawn, the comment written from scratch. Close to two hours a month by the controller's own estimate.
- 02
Two clocks, one report.
Vacancy moves every month, the books close every quarter. Mix them up and a report looks current when it isn't.
- 03
No receipts.
The board got numbers wrapped in a story, with no way to tell which sentence stood on which figure.
Four flows. Two clocks.
Behind every step
Can a person point at the source of this number before it moves on?
01 Count
Code counts
Vacancy every month from Real, the property system. The economy every quarter from Fortnox. Plain code does the math. The model only labels it.
The controller checks three numbers for vacancy and five for the economy against the source.
02 Find
Checked twice
One model lists what moved, with a file, a column and a period on every row. A second model in its own thread looks up every number. One error stops the run.
03 Write
The comment
Facts, analysis and open questions, built only from approved numbers. Never a recommendation. That call belongs to the board.
The controller reads, edits and signs the report.
04 Send
The email
Drafted only once the report is signed. The flow never sends anything on its own.
A person hits send.
A person signs off
Under the hood.
The same four flows, as they run today. Fortnox and Real feed the engine through their APIs. Code counts, two Claude models find and check, and a person signs at three points.
01 Sources
Fortnox
- Results and balance
- Quarterly, closed period
API, live
Real
- Property system
- Units, rent, vacancy
- Monthly, on the 15th
API, live
02 Count
Calculation engine
- Python
- A1 vacancy, A2 economy
- Account map in JSON
Intermediate layer
- vacancy_2026-08.json
- economy_2026-Q2.json
03 Check
Controller
- 3 vacancy numbers
- 5 economy numbers
- Checked against the source
04 Find
Producer
- Reads the intermediate layer only
- One row per deviation
- Source and period on every row
Reviewer
- A second model, own thread
- Sees output, sources, config
- Never the code or the reasoning
05 Write
Comment
- Approved numbers only
- Facts, analysis, open questions
- No advice
Board report
- Seven slides, built by script
- A source on every figure
06 Sign
Controller
- Reads, edits, signs
Email draft
- Only after signing
A person sends
What stops a run
- An account the map doesn't know. The run stops and writes no file.
- An export without its date. Stop, no file.
- One error from the reviewer. The list goes back to the producer.
- A source that can't be reached. Stop, and write nothing.
- A monthly run never touches an economy number.
- Source system
- Code
- File
- A person
- Claude
Step 3 is next: the run starts itself when the period closes.

The result
A board report where every number can show its papers.
The flows run every month on live data. The files now come straight from the source systems through the API, step two of three. Next, the run starts itself when the period closes. If a source can't be reached, it stops and writes nothing. Better no answer than a wrong one.
- 9 of 9
- claims in the flow's comment trace to a source. 14 of 20 did when written by hand
- 4
- AI flows, each with a person signing off before it moves on
- 2
- clocks kept apart. Vacancy runs monthly, the economy quarterly
- 2 of 3
- rollout steps live. The files now arrive through the API
The fine print.
A language model isn't objective. It just leans a different way than the person who has written the comment for ten years. The six hand written claims that didn't trace were judgments and advice, exactly what the flow isn't allowed to write. That's a different job, not a worse one.


Point at a month
