The open format: the schemas, the test vectors, and the implementations checked against them.

Schemas

The open format of core section 11, in JSON Schema 2020-12. Each schema answers at the address its $id names.

  • The facts export: A claimant register in the open format of VCRS 0.1.0-beta.2, section 11.1: the facts that set each record's grade, without the personal data behind them.
  • One record: One person's entry in a facts export: the facts that set its grade (VCRS 0.1.0-beta.2, section 4), without the personal data behind them.
  • The conformance statement: The one-page statement a representative publishes when it claims a level (VCRS 0.1.0-beta.2, section 11.2). No personal data.

An implementation builds in this order: a record's canonical form under RFC 8785 and its SHA-256 digest (core 11.3), the snapshot root over every record's line, its identifier and its digest, as the Merkle Tree Hash of RFC 9162 (core 5.4), then each record's grade, checked against the test vectors below.

Test vectors

Each vector is one record with the flows, the annex and the dates it is graded under, and the grade it must get (core 11.4). The reasons say why it holds that grade, in the codes of core 11.5. Each description opens the vector's file.

Annex AT: Austria (Verbandsklage auf Abhilfe)

Annex BE: Belgium (action en réparation collective)

RecordGradeReasons
Resident in France, no option yet, before any judgment or agreement set a window: counts as support C declared_only
Resident in France, opted in at the greffe within the four months after the merits judgment (art. XVII.55/1 CDE), no declaration on parallel actions asked C declared_only
Resident in France, no option yet, while the four months after the merits judgment run: counts as support C declared_only
Resident in Belgium, no option at the greffe, in an action that binds residents unless they opt out (opt_in_residents false): counted C declared_only
Resident in Belgium, option lodged at the greffe within the window, where residents opt in (art. XVII.55/1 §1 CDE) C declared_only
Resident in France, no option at the greffe by the close of the four months after the merits judgment (art. XVII.55/1 CDE): not a member D not_opted_in
Resident in France, wrote to the greffe before the merits judgment was published, so before the four months began (art. XVII.55/1 CDE): not a member D not_opted_in
Resident in France, opted in at the greffe after the four months closed (art. XVII.55/1 CDE): not a member D not_opted_in
Resident in France, signed up with the representative within the four months but lodged nothing at the greffe (art. XVII.55/1 CDE): not a member D not_opted_in
No residence held, so the record can't show whether the person must opt in (art. XVII.45 §3, 7° CDE) D residence_unknown
Resident in Belgium, no option at the greffe after the window closed, in an export that leaves unstated whether residents opt in: read as opting in (core 4.6) D not_opted_in
Resident in Belgium, no option at the greffe after the window closed, where residents opt in, as after a merits judgment in an action introduced from 10 June 2024 (art. XVII.55/1 §1 CDE) D not_opted_in
An SME with its principal establishment in Luxembourg, no option at the greffe by the close of the four months after the merits judgment (art. XVII.45 §3, 7° and XVII.55/1 CDE): not a member D not_opted_in

The core

RecordGradeReasons
Checked against an outside source, identity through a notified eIDAS means at substantial A None
As above, at assurance high A None
A legal person: registration number, checked against the business register, identified through eIDAS A None
Checked; identity verified at assurance low only B assurance_too_low
Checked; identity verified through a scheme the core does not name B scheme_not_recognised
Checked against an outside source; identity not verified B identity_not_verified
Evidence the person supplied places them in the class; identity not verified B not_checked, identity_not_verified
Supplied evidence and verified identity, but membership not checked against an outside source B not_checked
Basis checked, but the outside source is not named C no_evidence
Evidence stored, but the facts held don't decide class membership C class_not_established
Named, distinct, contact confirmed, informed; membership on the person's word alone C declared_only
Declared membership stays C even where the declaration places the person in the class C declared_only
A legal person on its own word C declared_only
Basis supplied, but no document is stored C no_evidence
A natural person whose record omits birth_date altogether D not_distinct
Marked the duplicate of another record D duplicate
Excluded by the representative D not_active
A legal person without a registration number D not_distinct
A name but nothing that tells two people with that name apart D not_distinct
Anonymous: no name held D no_name
Opted out D not_active
The facts held place the person outside the class D outside_class
Every rule of 4.1 that applies is reported, in the order of 4.1 D not_active, uninformed_flow, no_name, unconfirmed_contact
Contact channel never confirmed D unconfirmed_contact
Joined through a flow version that doesn't state the claim D uninformed_flow
Names a flow version the register doesn't hold D uninformed_flow
Withdrawn before the reference date D not_active

Annex CZ: Czech Republic (hromadné řízení)

Annex DE: Germany (Verbandsklage under the VDuG)

Annex FI: Finland (ryhmäkanne under the ryhmäkannelaki)

Annex IE: Ireland (representative action under the 2023 Act)

Annex IT: Italy (azione di classe and azione rappresentativa)

Annex NL: the Netherlands (WAMCA)

RecordGradeReasons
A company checked against the Handelsregister, acting through eHerkenning A None
Vehicle checked against the RDW register, identity through iDIN A None
Name and birth date given, contact confirmed, invoice supplied: the SOMI pattern plus evidence B not_checked, identity_not_verified
Resident in Germany, no opt-in yet, before any window opened: counts as support C declared_only
Resident in Belgium, opted in and declared no parallel action (art. 1018f lid 5 and 6 Rv) C declared_only
Resident in Germany, opted in by e-mail to the court, the route the court set: represented C declared_only
Resident in Germany, no opt-in yet, while the window is still open: counts as support C declared_only
Resident in Belgium, opted in, but no declaration on parallel actions, after the opt-in window closed D no_parallel_declaration
Resident in Germany, never opted in: not represented in a Dutch action, after the opt-in window closed D not_opted_in, no_parallel_declaration
Resident in Germany, consent given at sign-up before the window opened: not represented D not_opted_in
Resident in Germany, opted in after the window closed: not represented D not_opted_in
Resident in Germany, opted in by telling the foundation, not the registry: not represented D not_opted_in
Resident in Germany, never opted in, contact never confirmed: rules 7 and 8 reported in the order of 4.1 D unconfirmed_contact, not_opted_in, no_parallel_declaration
No residence held, so the record can't show the person is represented D residence_unknown
A box the person ticked, no name held: the Stellantis and TPC pattern D no_name, not_distinct, unconfirmed_contact

Annex PL: Poland (postępowanie grupowe)

Implementations

An implementation conforms when it grades every vector as the vector states: the grade, and the reason codes of core 11.5 in their order.

ImplementationLanguageLicenceNotes
steddle/vcrs Markdown, JSON Schema CC BY 4.0 The text, the schemas and the test vectors, published read-only. Comments arrive as issues there.
The reference validator PHP Not published Grades every record of a facts export, measures coverage at each grade, computes the snapshot root with the inclusion proof of each record, and drafts the conformance statement. It grades every vector as stated. Not published.

To be listed, open an issue on steddle/vcrs with the implementation's address, its language, its licence and the version of the standard it implements.