Proposition · Projet de discussion v0.1 · 2026-05-21

Open Law Standards

Six standards ouverts pour l'identification, la structuration, la publication et la vérification des décisions judiciaires suisses. Là où des standards internationaux existent — ne pas réinventer. Là où ils manquent — formuler une proposition simple et documentée, et la livrer de manière visible dans l'implémentation de référence.

§01 Motivation

Pourquoi des standards ouverts

Les décisions judiciaires suisses sont des œuvres officielles (art. 5 al. 1 LDA) et donc dans le domaine public. Pourtant, leur accès machine sans friction n'a aujourd'hui rien d'évident :

  • Chaque source attribue des identifiants selon sa propre convention. Le même arrêt ATF possède cinq URL différentes dans cinq bases de données.
  • La plupart des portails cantonaux fournissent des PDF ou du HTML sans structure lisible par machine — état de fait, considérants et dispositif doivent être reconstruits à la main par chacun.
  • Les citations entre décisions sont des chaînes de texte brut (BGE 140 III 86) — chaque application consommatrice doit les résoudre elle-même, avec une précision variable.
  • Il n'existe aucune preuve cryptographiquement vérifiable qu'un texte de décision cité est bien celui publié officiellement. À l'ère des outils d'IA qui hallucinent, c'est la question de confiance centrale.

Quatre des six standards proposés profilent des spécifications internationales existantes pour le contexte suisse (Schema.org/LegalCase, Akoma Ntoso, Markdown, ELI). Deux sont des propositions proprement suisses : le cli:ch Caselaw Identifier (avec ECLI comme projection européenne déterministe), parce que les schémas d'identifiants existants aplatissent les spécificités suisses — trilinguisme, souveraineté cantonale, adressage pinpoint ; et une couche de provenance (racine de Merkle sur chaque publication, ancrée sur Bitcoin) que le monde des données juridiques n'a pas encore.

Ce n'est pas un manifeste ni une exigence adressée aux tribunaux fédéraux ou aux cantons, mais une base de discussion ouverte. La proposition est volontairement petite et compatible : chaque disposition peut être adoptée séparément, sans en bloquer d'autres.

§02 Résumé

Les six standards

01

Identification

cli:ch — Identifiant suisse de jurisprudence (primaire) · ECLI comme projection européenne

Chaque décision porte deux identifiants liés de manière déterministe : cli:ch comme forme suisse canonique et ECLI comme projection avec perte pour l'interopérabilité européenne.

cli:ch rend de premier ordre cinq propriétés de la jurisprudence suisse qu'ECLI aplatit :

  • Trilinguisme — les versions DE/FR/IT d'un ATF sont des textes authentiques juridiquement équivalents (art. 14 LPubl). cli:ch traite la langue comme premier axe via ?lang=.
  • Souveraineté cantonale — 26 systèmes judiciaires autonomes restent visibles (cli:ch:zh:…, cli:ch:ti:…), non réduits à un code de tribunal opaque.
  • Adressage pinpoint — niveau du considérant de premier ordre via #e-4.1 (convention de citation suisse).
  • Granularité des chambres — Cour suprême, tribunal administratif, tribunal des assurances sociales etc. restent explicitement nommés au lieu de disparaître dans un code à 3 lettres.
  • Versionnement — @YYYY-MM-DD adresse une version d'anonymisation spécifique ; rare, mais juridiquement pertinent si nécessaire.
cli:ch:bge:140-III-86
cli:ch:bge:140-III-86?lang=fr             (französische Fassung desselben BGE)
cli:ch:bge:140-III-86#e-4.1               (Pinpoint auf Erwägung 4.1)
cli:ch:bger:6B_1234/2025
cli:ch:bvger:A-1234/2024
cli:ch:zh:obergericht:LB230012            (Kanton Zürich, Obergericht)
cli:ch:ti:tribunale-appello:34.2025.27    (Kanton Tessin, Tribunale d'appello)
cli:ch:finma:2024-12345                   (FINMA-Verfügung)

Forme : cli:ch:<court>[:<chamber>]:<docket>[@<version>][?lang=<l>][#<pinpoint>]. Tribunaux fédéraux sans préfixe cantonal, tribunaux cantonaux avec code cantonal ISO-3166-2 plus désignation propre du tribunal. Le modèle d'identifiant met en parallèle les couches FRBR d'Akoma Ntoso (Work / Expression / Manifestation) — nous n'inventons pas, nous appliquons un modèle établi avec un étiquetage suisse.

ECLI comme projection pour les résolveurs européens : à partir de chaque cli:ch, un ECLI est dérivé de manière déterministe (fonction pure cli_ch_to_ecli). La projection est many-to-one — langue, pinpoint, version et détail de chambre sont perdus.

cli:ch:bge:140-III-86             →  ECLI:CH:BGE:2014:140.III.86
cli:ch:bger:6B_1234/2025          →  ECLI:CH:BGER:2025:6B_1234.2025
cli:ch:zh:obergericht:LB230012    →  ECLI:CH:ZHO:2023:LB230012

Pourquoi une forme suisse propre en priorité ? Parce que la jurisprudence suisse possède des propriétés — trilinguisme comme textes authentiques équivalents, 26 systèmes judiciaires cantonaux souverains, citation pinpoint au niveau du considérant — qui, dans un schéma européen général, retombent nécessairement sur un axe plat. cli:ch les rend de premier ordre ; ECLI assure la connectivité européenne. Les deux ensemble valent mieux que le choix de l'un.

Les identifiants internes existants (numéros de procédure, numéros de dossier) restent inchangés — cli:ch et ECLI sont des couches supplémentaires et standardisées.

Implémentation de référence : cli_ch.py frappe les URI cli:ch de manière déterministe ; cli_ch_to_ecli() projette sur ECLI. cli_ch.py sur GitHub · ecli.py sur GitHub.

02

Métadonnées

Schema.org / LegalCase (JSON-LD)

Chaque page web de décision porte dans le <head> un bloc Schema.org/LegalCase en JSON-LD avec les deux identifiants (cli:ch + ECLI), le tribunal, la date, la langue, le regeste, les citations sortantes de jurisprudence et de législation.

{
  "@context": "https://schema.org",
  "@type": "LegalCase",
  "identifier": [
    {
      "@type": "PropertyValue",
      "propertyID": "cli:ch",
      "value": "cli:ch:bge:140-III-86"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "ECLI",
      "value": "ECLI:CH:BGE:2014:140.III.86"
    }
  ],
  "name": "BGE 140 III 86",
  "datePublished": "2014-04-15",
  "inLanguage": "de",
  "court": {"@type": "GovernmentOrganization", "name": "Bundesgericht"},
  "citation": [...],          // ausgehende Fall-Zitationen
  "legislationCited": [...]   // ausgehende Gesetzeszitate
}

Double effet : les moteurs de recherche indexent la décision avec prise en charge des rich results, et les agents d'IA reçoivent un enregistrement lisible par machine sans web scraping.

Référence : chaque page de décision sous opencaselaw.ch/entscheid/<id> livre ce bloc. Implémentation dans seo_pages.py.

03

Structure

Akoma Ntoso 3.0 (XML)

Lorsqu'une représentation XML de la décision est requise, alors selon Akoma Ntoso 3.0 (standard ONU/OASIS pour les documents législatifs et judiciaires). État de fait, considérants, dispositif et regeste dans les éléments prévus — ne pas inventer son propre langage XML.

Akoma Ntoso est nettement la voie la moins pénible : déjà en usage en Italie, au Brésil, dans l'Union européenne et à l'ONU. Les spécificités suisses (citation suisse, numéros de procédure cantonaux, multilinguisme) peuvent s'intégrer comme attributs de métadonnées optionnels sans tordre le schéma central.

Statut : partiellement en production dans OpenCaseLaw (les Materialien v0.2 utilisent Akoma Ntoso pour les messages). La sortie XML complète pour les décisions judiciaires est un point de feuille de route Q3 2026.

04

Texte intégral

Markdown avec ancres de considérants (citation suisse)

Pour la représentation en texte intégral lisible par machine : Markdown avec des ancres HTML sur chaque considérant, nommées selon la citation suisse (E. 4.1 → #e-4-1).

# BGE 140 III 86

## Sachverhalt {#sachverhalt}
...

## Erwägungen
### E. 2 {#e-2}
...
### E. 4.1 {#e-4-1}
Die zentrale Aussage steht hier...

## Dispositiv {#dispositiv}
1. Die Beschwerde wird abgewiesen.

On peut ainsi lier de manière pinpoint à chaque considérant — le nerf vital de la pratique de citation juridique. Les outils peuvent citer et vérifier les considérants individuellement, sans reparser la décision entière.

Référence : opencaselaw.ch/entscheid/bge_BGE_140_III_86#e-4-1 saute directement au considérant 4.1.

05

Citations

Résolues, lisibles par machine, bidirectionnelles

Chaque citation d'une autre décision ou d'un article de loi est résolue : non seulement comme chaîne de texte brut, mais liée à un cli:ch concret (jurisprudence, primaire — ECLI disponible comme projection) ou à un URI ELI (loi). Bidirectionnel — aussi bien sortant (ce que cite cette décision) qu'entrant (qui cite cette décision).

Le graphe de citations suisse devient ainsi le substrat commun pour le suivi doctrinal, l'identification des arrêts de principe, le suivi des voies de recours. Exactement le matériau dont les outils d'IA ont besoin pour vérifier ce qui est cité — au lieu d'halluciner.

Référence : OpenCaseLaw résout actuellement 6,46 mio de liens de citation de jurisprudence et 11,3 mio de citations de législation, revérifiés quotidiennement. Disponible via les outils MCP find_citations, find_appeal_chain, find_leading_cases.

06

Provenance

Ancre de Merkle RFC-6962 · OpenTimestamps-Bitcoin · En production dès le 2026-05-21

À chaque publication du corpus, un arbre de Merkle RFC-6962 est calculé sur toutes les décisions. Chaque feuille s'engage sur (decision_id, cli:ch, ECLI, content_hash, decision_date). La racine est

  • committée dans le dépôt Git public (docs/integrity/<YYYY-MM-DD>.{root,json}) — quotidiennement, ~700 octets par publication,
  • ancrée sur la blockchain Bitcoin via OpenTimestamps (fichier .root.ots, ~945 octets par publication, gratuit, consolidé en ~1 bloc Bitcoin).
  • disponible comme chemin de preuve d'inclusion par décision via l'API (feuille de route).

Ainsi, chaque énoncé de décision cité peut être vérifié bit à bit contre la racine de publication — sans faire confiance à opencaselaw.ch. Les hallucinations ne sont pas empêchées par des promesses, mais démontrées par les mathématiques.

Statut : en production dès le 2026-05-21. La convention de hachage (RFC 6962, identique à Certificate Transparency) et le schéma de feuille sont documentés sur opencaselaw.ch/integrity/. C'est le seul des six standards qui ne profile pas un schéma existant — la convention sera consolidée publiquement sur openlawstandards.ch.

§03 OpenCaseLaw.ch

Implémentation de référence

Les six standards ne sont pas hypothétiques. Les six sont déjà en production dans OpenCaseLaw.ch (Akoma Ntoso déjà en production pour les Materialien, sur la feuille de route pour les décisions judiciaires) :

  • 01 Identification : cli:ch (forme suisse, primaire) plus ECLI (projection européenne) pour toutes les 972'000+ décisions ; les deux frappés de manière déterministe à l'appel, visibles dans chaque réponse d'API et chaque page /entscheid/<id>. Résolveur HTTP sous /cli/ch/….
  • 02 Métadonnées : JSON-LD Schema.org/LegalCase sur chaque page de décision, avec cli:ch + ECLI dans le tableau identifier, graphe de citations et de législation.
  • 03 Structure : Akoma Ntoso pour les Materialien (messages) déjà en production. Pour les décisions judiciaires : feuille de route Q3 2026.
  • 04 Texte intégral : Markdown avec ancres de considérants, conforme à la citation suisse. Les liens pinpoint comme /entscheid/bge_BGE_140_III_86#e-4-1 fonctionnent.
  • 05 Citations : 6,46 mio de liens de jurisprudence résolus + 11,3 mio de citations de législation, régénérés quotidiennement, disponibles bidirectionnellement.
  • 06 Provenance : en production dès le 2026-05-21 — racine de Merkle RFC-6962 quotidienne sur toutes les décisions sous docs/integrity/<datum>.root, documentée sur opencaselaw.ch/integrity/. Ancre OpenTimestamps et endpoint d'API pour les chemins de preuve d'inclusion comme prochaines étapes.

Tout est ouvert, tout en CC0 pour les données et MIT pour le code. D'autres fournisseurs peuvent adopter des dispositions individuelles ou reprendre toute la convention — la spécification n'appartient à aucun fournisseur unique.