Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UNSPSC bilingue EN / FR

Le codeset UNSPSC v26.0801 complet (149 849 produits) avec traductions françaises sourcées et traçées, prêt à l'emploi en CSV, SQLite, JSON et Parquet.

The complete UNSPSC v26.0801 codeset with traceable French translations, ready to use as CSV, SQLite, JSON and Parquet. English summary below.

Pourquoi

UNSPSC (United Nations Standard Products and Services Code) est la nomenclature de référence des marchés publics et de l'e-procurement. Il n'existait aucune distribution bilingue EN/FR librement accessible et prête à intégrer : le codeset officiel est un Excel, et les traductions françaises publiques (Canada) sont éparpillées. Ce dépôt les réunit dans des formats directement exploitables par les développeurs.

📖 Documentation complète dans docs/ : ce qu'est UNSPSC et comment lire un code (classification.md), organisation du dépôt et choix de conception (architecture.md), référence CLI (cli.md) et référence API Python (python-api.md).

Contenu

Fichier Description
data/segments.csv 58 segments (code, titre EN, définition EN)
data/families.csv 559 familles
data/classes.csv 7 998 classes
data/commodities.csv 149 849 produits (avec synonymes, acronymes, version, clé)
data/translations.csv 180 170 lignes au format long (code, level, lang, title, source)
data/schema.sql DDL PostgreSQL + import \copy + exemple de requête avec repli EN
scripts/build.py Génère les exports dist/ depuis les CSV (stdlib ; Parquet si pyarrow)

Les exports générés (dist/, publiés dans les releases) :

  • unspsc-bilingue.sqlite — base SQLite complète, indexée, requêtable telle quelle
  • <table>.json.gz — un JSON plat par table
  • unspsc-tree.json.gz — arbre hiérarchique segment → famille → classe → produit, titres EN + FR
  • <table>.parquet — pour pandas / DuckDB / Spark

Package Python

pip install unspsc-fr
from unspsc_fr import UNSPSC

u = UNSPSC()                       # télécharge la base au premier usage (~88 Mo, mise en cache)
u.get(10101501).title              # 'Chats' (repli EN automatique si non traduit)
u.search("ciment", lang="fr")      # plein texte FTS5, insensible aux accents
u.children(10101500)               # navigation hiérarchique
u.ancestors(10101501)              # segment > famille > classe

Et en ligne de commande : unspsc-fr get 10101501, unspsc-fr search "ciment" --lang fr. Voir python/README.md.

Démarrage rapide

SQLite (aucune dépendance) :

-- Libellé d'un produit, repli anglais si la traduction française manque
SELECT c.commodity_code,
       COALESCE(fr.title, en.title) AS title,
       fr.title IS NOT NULL         AS is_translated
FROM commodities c
JOIN translations en ON en.code = c.commodity_code AND en.level = 'commodity' AND en.lang = 'en'
LEFT JOIN translations fr ON fr.code = c.commodity_code AND fr.level = 'commodity' AND fr.lang = 'fr'
WHERE c.commodity_code = 10101501;   -- → « Chats »

PostgreSQL :

cd data && psql -d votre_base -f schema.sql

Python / DuckDB :

import duckdb
duckdb.sql("SELECT * FROM 'dist/commodities.parquet' LIMIT 5")

Regénérer les exports :

python3 scripts/build.py          # SQLite + JSON
pip install pyarrow               # optionnel, active le Parquet

Couverture française

Niveau Traduits Total %
Segments 57 58 98,3 %
Familles 502 559 89,8 %
Classes 2 508 7 998 31,4 %
Produits 18 639 149 849 12,4 %

Chaque traduction est traçée dans la colonne source :

  • CA-v21-2021 (7 743 codes) : mappage NIBS-UNSPSC du gouvernement du Canada (UNSPSC v21, sous-ensemble des marchés publics fédéraux). Prioritaire en cas de doublon.
  • CA-v10-2007 (13 963 codes) : version 10 bilingue complète (2007, archivée). Les codes UNSPSC sont globalement stables mais certains libellés ont pu évoluer depuis.

Seul segment sans traduction : 57000000 (Humanitarian Relief Items, Kits, or Accessories), ajouté après 2007 et absent du sous-ensemble canadien.

Contributions bienvenues pour compléter la couverture : la table translations est au format long — ajouter une langue ou une traduction, c'est simplement insérer des lignes avec le bon code ISO 639-1 et une source identifiable, sans toucher au schéma.

Notes sur les données

  • Un même code peut exister à deux niveaux (ex. 26132000 est à la fois une classe et un produit dans le codeset UNDP) : la clé primaire de translations est donc (code, level, lang).
  • scripts/build.py normalise les codes en entiers (le CSV source contient des flottants du type 10101501.0).

Licences et attribution

  • Codeset anglais : © UNDP, marque déposée UNSPSC®. Distribution gratuite pour usage de base via https://www.undp.org/unspsc. Vérifiez les conditions UNSPSC avant toute redistribution commerciale.
  • Traductions françaises : contient des renseignements visés par la Licence du gouvernement ouvert – Canada. Reprenez cette attribution dans toute plateforme qui réutilise ces données.

Voir NOTICE pour le détail.


English summary

This repository packages the full UNSPSC v26.0801 codeset (149,849 commodities) with traceable French translations from Government of Canada open data, distributed as CSV, SQLite, JSON and Parquet. The translations table uses a long format (code, level, lang, title, source) so additional languages can be added by simply inserting rows. French coverage: 98% of segments, 90% of families, 31% of classes, 12% of commodities — contributions welcome. See NOTICE for licensing (UNDP codeset + Open Government Licence – Canada).

About

UNSPSC v26.0801 bilingue EN/FR — codeset complet + traductions françaises sourcées, en CSV, SQLite, JSON et Parquet

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages