Dados B3 › Transparency PT

Transparency

Transparency — how you check the numbers yourself

The guarantee: every number you see here passed the invariant suite before being published. A failing test doesn't ship a warning — it blocks the update entirely (the new data only replaces the old one after the whole suite passes). So a release that fails our published checks never ships; at worst, the data is a bit older. That is not the same as promising every number is right — no suite can prove that. It is the strongest claim we can actually demonstrate.

Data version 2026-09-01-supressao-declarada · page generated 2026-09-07 21:19 UTC. If these do not match /saude, you are reading a cached copy.

What is checked, before every publication — 285 automated tests, collected live

166 are DATA invariants (does the number tie out?) and 119 are product tests — access gate, navigation, language, AI connector. Calling all 285 'invariants' would be inflating it: the split is checkable in the list itself. Not a hand-picked highlight reel: every test below was found by introspecting the actual test files just now, the same way pytest --collect-only would. Grouped by what it protects against, not by which file it lives in.

Level 1 — Integrity: does the data tie out? (132)

Level 2 — Semantics: does the account mean what the calculation assumes? (20)

Level 3 — Economic: is the result possible in the real world? (14)

Other product tests (119)

Access gate, navigation and the MCP connector — they test whether the product works, not whether a number is right, so they don't fit the 3 levels above by design. Still counted, still listed:

Reconstruct it yourself — net margin across 5 companies, 4 sectors

We don't ask you to trust the numbers. Here's the net margin of five companies in four different sectors, each rebuilt straight from its annual report (DFP) at the CVM — net income ÷ revenue, matching the published figure exactly. For ANY indicator, of any company, the whole chain down to the line in CVM's file is at /linhagem:

Company · sectorNet income (CVM acct)Revenue (CVM acct)Margin =÷
WEGE3 · industrialR$ 6.78 bn DRE:3.11R$ 40.80 bn DRE:3.0116.6%
VALE3 · miningR$ 11.81 bn DRE:3.11R$ 213.59 bn DRE:3.015.5%
PETR4 · oil & gasR$ 110.61 bn DRE:3.11R$ 497.55 bn DRE:3.0122.2%
ITUB4 · bankR$ 45.85 bn DRE:3.09R$ 387.12 bn DRE:3.0111.8%
BBAS3 · bankR$ 16.78 bn DRE:3.11R$ 319.46 bn DRE:3.015.3%

Download any of these DFPs from the CVM, take the income and revenue accounts, divide — you get the same number. Banks use interest income as revenue (what makes sense for a bank), so the reconciliation is sector-aware; the others use sales revenue. Figures are the latest fiscal year.

Why we may differ from another site (and it's not an error)

A difference between two sites usually isn't one being wrong — it's a method choice. We disclose ours:

Do the tests bite? Yes — real cases the suite has caught

A test that never fails could mean perfect data — or a weak test. These were born from real errors that slipped through, and now fail — only shown for tests that actually exist in the collected suite above:

How far back each block of data goes

No asterisks here: this is coverage year by year, counted right now. Indicators (ROE, ROIC, margins, growth) come from the filings alone and cover the whole series. Multiples (P/E, P/BV, EV/EBITDA) need a price and a share count — and the share count comes from CVM's reference form, which the further back you go the fewer companies filed in a usable format. The gap between the two columns is a source limit, not an ingestion hole. If you look for an old P/E and do not find it, it is because nobody has it — not because we hid it. The same numbers as JSON: /cobertura.

YearCompanies with indicatorsCompanies with multiples
2025438291
2024444296
2023442297
2022429294
2021423297
2020410275
2019371165
2018326167
2017317163
2016311151
2015303142
2014301140
2013292128
2012291110
201128495
201027734

Live coverage

455 companies · 870,622 price points · 9,467 recorded restatements · last refresh 2026-09-06 19:11:21. Full live counts at /saude.

See the full methodology