The level table
How BINA decides what a document is worth, why only the document type matters, and what happens to types it does not know.
Every document in a bulletin has a level from 0 to 3. The level decides how much space it gets: a full report, a short note, one table row, or just a count. The table that assigns levels is in server/radar/levels.mjs.
#One input: the document type
The level depends only on the document type. Not the fine, not the parties, not the sector.
This is deliberate. If the fine size moved a case up, a lawyer could not tell whether a case was on page one because it matters for damages claims or because the number was large. With one input, the rule is predictable and can be checked by anyone: look up the type, read off the level.
levelFor("prohibition_decision");
// → { level: 1, status: "classified", label: "Infringement decision with a fine (prohibition)", ... }
levelFor("something_new");
// → { level: null, status: "unclassified", output: "review_queue", ... }levelFor is pure and total: it always returns, it never guesses.
#The four levels
| Level | Meaning | Bulletin output |
|---|---|---|
| 1 | Infringement finding with a sanction | Card + full report |
| 2 | No finding, but possible victims identified or a sanction announced | Card + short report |
| 3 | Notable for a lawyer, weak or no link with damages claims | One table row |
| 0 | Routine | Counted only |
#The table
| Document type | Level | Authorities |
|---|---|---|
prohibition_decision | 1 | EC, ADLC |
settlement_decision | 1 | EC, ADLC |
cooperation_decision | 1 | ADLC |
dma_non_compliance | 1 | EC |
commitments_decision | 2 | EC, ADLC |
proposed_commitments | 2 | EC, ADLC |
interim_measures | 2 | EC, ADLC |
statement_of_objections | 2 | EC, ADLC |
opening_of_proceedings | 2 | EC, ADLC |
court_judgment_appeal | 2 | EC, ADLC |
dma_specification | 2 | EC |
merger_conditional_clearance | 3 | EC, ADLC |
merger_phase2_opening | 3 | EC, ADLC |
merger_referral_full | 3 | EC — kept because the deal will be reviewed by the ADLC |
state_aid_formal_investigation | 3 | EC |
adlc_opinion | 3 | ADLC |
procedural_fine | 3 | EC, ADLC |
merger_simple_clearance | 0 | EC, ADLC |
merger_notification | 0 | EC, ADLC |
merger_referral | 0 | EC |
merger_withdrawal | 0 | EC, ADLC |
merger_purchaser_approval | 0 | EC |
state_aid_no_objection | 0 | EC |
fsr_deadline_expiry | 0 | EC |
adlc_procedural | 0 | ADLC |
The live table is always available from GET /v1/radar/levels; treat that response as authoritative over this page.
#Versioned, hashed, reviewed
The table carries a version (bina-levels-2026.11-v2), an effectiveFrom date, the names of its reviewers, and a SHA-256 hash of its full content. Every bulletin and every placement repeats the version and hash, so a bulletin can always be traced to the exact table that sorted it. assertValidLevelTable refuses a table without a reviewer or effective date.
#Unknown types go to review
A document type with no row is unclassified. It is listed in the bulletin's needsReview section, never given a level. When the upstream label is simply wrong, counsel corrects it with POST /v1/radar/documents/:id/doctype, and the correction is recorded in the event log.