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.

Floating MacBook showing the first slide of a Nordhem board report, six key figures each with its source
Client
Nordhem Fastigheter
Industry
Real Estate
Year
2026
Discipline
AI Lead, AI workflows
Stack
Claude, Python, Fortnox, Real
Note
Name and figures changed

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.

A raw export from the property register, rows of units, rents and empty flats

The challenge

A report the board had to take on trust.

  1. 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.

  2. 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.

  3. 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?

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  1. 01 Sources

    Fortnox

    • Results and balance
    • Quarterly, closed period

    API, live

    Real

    • Property system
    • Units, rent, vacancy
    • Monthly, on the 15th

    API, live

  2. 02 Count

    Calculation engine

    • Python
    • A1 vacancy, A2 economy
    • Account map in JSON

    Intermediate layer

    • vacancy_2026-08.json
    • economy_2026-Q2.json
  3. 03 Check

    Controller

    • 3 vacancy numbers
    • 5 economy numbers
    • Checked against the source
  4. 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
  5. 05 Write

    Comment

    • Approved numbers only
    • Facts, analysis, open questions
    • No advice

    Board report

    • Seven slides, built by script
    • A source on every figure
  6. 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.

Close up of a MacBook showing the deviation list, 19 rows approved by a second model, 2 not verifiable

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.

MacBook showing the comment to the board, a source after every figure and a checklist before it goes out
Line drawing of a tray of twelve monthly report cards, every third one taller for the quarter close, August pulled up

Point at a month

The reviewer's verdict: 19 approved, 0 errors, 2 not verifiable