跳到正文
DEV Community· Arhan Canli·· 3 小時前AI 評分54

歐洲 ESEF 年報與同公司 SEC 申報交叉核對,12 項數據的數值和單位均吻合

Europe's tagged annual reports against the same companies' SEC filings: 12 of 12

AI 導讀

Arhan Canli 將 european_filings 加入 canli-mcp,並以 SEC companyfacts API 的 20-F 資料核對 TotalEnergies、Novo Nordisk 和 Shell 的 ESEF 年報,三家公司 2024、2025 年的收入及年度利潤共 12 項數據均與單位吻合。

正文

Companies listed on EU and EEA regulated markets file their annual reports in ESEF, the European Single Electronic Format, and UK-listed companies follow the UK's version of the same rule: an XHTML report with the figures tagged in XBRL. XBRL International collects the filings at filings.xbrl.org and serves each one as xBRL-JSON. That makes about 7,400 European filers' tagged figures free to read, with no API key.

I added a tool for them to canli-mcp (european_filings) and wanted an independent check that it reads the right facts. Some European companies also file an annual report with the SEC on Form 20-F, tagged in the same IFRS taxonomy. That is a second filing, to a different regulator, of the same figures, so the two should agree.

The check

Three companies, two years, two measures each. The ESEF side comes from european_filings; the SEC side comes straight from SEC's companyfacts API (the ifrs-full facts on 20-F filings), which the tool never reads.

Company Year Revenue (ESEF = 20-F) Profit for the year (ESEF = 20-F)
TotalEnergies 2024 USD 214,550,000,000 USD 16,031,000,000
TotalEnergies 2025 USD 201,196,000,000 USD 13,357,000,000
Novo Nordisk 2024 DKK 290,403,000,000 DKK 100,988,000,000
Novo Nordisk 2025 DKK 309,064,000,000 DKK 102,434,000,000
Shell 2024 USD 284,312,000,000 USD 16,521,000,000
Shell 2025 USD 266,886,000,000 USD 18,119,000,000

All 12 matched to the unit. "Profit for the year" is IFRS ProfitLoss, which includes non-controlling interests, so it is not the same line as "income attributable to shareholders".

Three traps on the way

1. Periods end at midnight of the next day. In xBRL-JSON a duration is written like 2025-01-01T00:00:00/2026-01-01T00:00:00. That is calendar 2025, not a period that reaches into 2026. A balance-sheet instant written 2026-01-01T00:00:00 is the position at the end of 31 December 2025. Read the dates naively and every year-end balance lands in the wrong year.

2. "Revenue" has more than one tag. Novo Nordisk and Shell tag revenue as ifrs-full:Revenue. TotalEnergies uses ifrs-full:RevenueFromContractsWithCustomers, and so does ASML. A tool that reads one concept quietly reports "no revenue" for half the companies. It needs a list per measure, and it should say which concept each figure came from.

3. Names match more than one filer. "Novo Nordisk" also matches Novo Nordisk Fonden, the foundation that controls the company and files its own report. Legal forms ("A/S", "N.V.", "SE", "plc") have to be ignored, and the company has to rank above near-namesakes, or the first answer is the wrong entity. The tool lists the other matches, so a mismatch is visible.

What this does and doesn't show

It shows that the tool reads the totals the companies tagged, on the right periods and in their own currencies. It does not show that ESEF data is clean in general: these are three large, careful filers, and only two measures in two years. Smaller filers are another matter, and segment figures aren't read from these reports at all.

Try it

canli-mcp is a free MCP server (MIT, no API key):

npx -y canli-mcp

Then ask for a European company's annual report, or call run_tool with:

{ "name": "european_filings", "arguments": { "company": "Novo Nordisk", "year": 2025 } }

It returns the report's period, links to the report and its viewer, and the tagged totals with their concept, period, value, unit and precision. words finds any other tagged figure, such as "words": "net system sales" for ASML.

The cross-check script is mcp-markets/bench/global/crosscheck.mjs, with its results in results-2026-10-15.json next to it:

If this was useful to you, a star on the canlicapital repo helps a small project get found.

Have you used ESEF data? I'd like to hear where it disagreed with the PDF report.

Written with AI assistance. The figures are from the check's saved results of 15 October 2026.

來源:DEV Community · dev.to