@mostajs/nomenclature
v0.2.0
Published
Référentiel de nomenclatures hiérarchiques (codes officiels) : charger, rechercher, valider et résoudre des codes liés par parentCode. Multi-schéma. Seeds livrés : 'naa-dz' (activités, CNRC/ONS), 'cim-10' (diagnostics, OMS/ICD-10), 'ccam' (actes médicaux)
Maintainers
Readme
@mostajs/nomenclature
Référentiel de nomenclatures hiérarchiques — charger, rechercher, valider et résoudre des codes d'activité officiels.
Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later
Module mince à responsabilité unique. Aucune logique métier : il modélise un arbre de codes (section → division → groupe → classe → activité) consultable et validable. Transverse — il sert la pépinière (O4 Hadhinat : « choisir le code exact de l'activité parmi la liste officielle ») comme le CRM, la facturation, le reporting ou les déclarations légales.
Schéma livré : naa-dz — Nomenclature Algérienne des Activités (alignée CITI Rev.4 / NACE ; réf. CNRC & ONS NAA-NAP). Extensible (naf-fr, nace-eu…) par simple dataset injecté.
Installation
npm install @mostajs/nomenclatureUsage
import { createNomenclature, createMemoryRepositories } from '@mostajs/nomenclature';
const nom = createNomenclature({ repositories: createMemoryRepositories() }); // seed 'naa-dz' livré
await nom.codes.search('informatique'); // → propositions (préfixe code OU plein texte FR/AR)
await nom.codes.validate('62011'); // → { ok:true, normalized:'62011', label:'…', level:5 }
await nom.codes.path('62011'); // → [J › 62 › 620 › 6201 › 62011] (fil d'Ariane)
await nom.codes.children('J'); // → divisions de la section J
await nom.codes.label('62011', { lang:'ar' }); // → 'تطوير البرمجيات حسب الطلب'
await nom.schemes.tree(); // → sections (racines)En production, injecter de vrais repositories @mostajs/orm et un dataset complet :
import { createNomenclature } from '@mostajs/nomenclature';
const nom = createNomenclature({ repositories: ormRepos, dataset: jeuOfficielComplet, i18n });API
| Méthode | Retour |
|---|---|
| codes.search(q, { scheme?, limit?, level?, activeOnly? }) | [{ scheme, code, label, level, parentCode }] — préfixe de code ou plein texte (insensible casse+accents, FR/AR) |
| codes.get(code, { scheme? }) | { scheme, code, label, labelAr, parent, level, active } | null |
| codes.children(code, { scheme? }) | sous-codes directs |
| codes.validate(code, { scheme? }) | { ok, normalized, label, level } | { ok:false, reason } |
| codes.path(code, { scheme? }) | [{code,label,level}…] racine → feuille |
| codes.label(code, { scheme?, lang }) | libellé résolu (fr|ar) |
| schemes.list() / schemes.tree({ scheme? }) | schémas présents / racines (niveau 1) |
Composition (injection)
repositories (obligatoire) · dataset (défaut = seed naa-dz) · i18n (libellés FR/AR) · data-plug (import). Les codes sont normalisés (majuscules, sans espaces ni points : 62.01 → 6201).
Niveaux :
1section (lettre A…U) ·2division (2 ch.) ·3groupe (3) ·4classe (4) ·5activité nationale (5).
Tests & exemple
npm test # 7 tests unitaires
npm run example # sélecteur de code d'activité (O4)Voir docs/00-PROPOSITION-PLAN-NOMENCLATURE-19062026.md (cas C, étape E1).
