npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

syscohada-registry

v2.0.2

Published

Bibliothèque JavaScript/TypeScript pour la gestion des immatriculations d'entreprises selon les normes SYSCOHADA (UEMOA/CEMAC)

Readme

SYSCOHADA Registry

npm version License: MIT TypeScript

Bibliothèque TypeScript/JavaScript pour la gestion des immatriculations d'entreprises selon les normes SYSCOHADA (Système Comptable OHADA) dans les zones UEMOA et CEMAC.

Pays supportés

UEMOA (Franc CFA Ouest-Africain - XOF)

| Code | Pays | |------|------| | BJ | Bénin | | BF | Burkina Faso | | CI | Côte d'Ivoire | | GW | Guinée-Bissau | | ML | Mali | | NE | Niger | | SN | Sénégal | | TG | Togo |

CEMAC (Franc CFA d'Afrique Centrale - XAF)

| Code | Pays | |------|------| | CM | Cameroun | | CF | Centrafrique | | TD | Tchad | | CG | Congo | | GA | Gabon | | GQ | Guinée Équatoriale |

Installation

npm install syscohada-registry

ou avec yarn :

yarn add syscohada-registry

Utilisation rapide

Import ES Modules

import SyscohadaRegistry, {
  // Validation
  validate,
  validateIdentifiers,

  // Pays
  getAllCountries,
  getCountryInfo,

  // Données de référence
  CIVILITES,
  FONCTIONS,
  TYPES_REGLEMENT,
  getAllCivilites,
  getAllFonctions,
  getAllTypesReglement,

  // Types
  type SyscohadaCountry,
  type CiviliteInfo,
  type FonctionInfo,
  type TypeReglementInfo
} from 'syscohada-registry';

Import CommonJS

const {
  default: SyscohadaRegistry,
  validate,
  getAllCountries,
  CIVILITES,
  FONCTIONS,
  TYPES_REGLEMENT
} = require('syscohada-registry');

API Fonctionnelle

Validation des identifiants

import { validate, validateIdentifiers } from 'syscohada-registry';

// Validation rapide
const result = validate({
  identifiantFiscal: '1234567A8',
  registreCommerce: 'SN-DKR-2024-C-123456'
}, 'SN');

console.log(result);
// {
//   country: 'SN',
//   isValid: true,
//   isCompletelyValid: true,
//   errors: [],
//   warnings: [],
//   information: [],
//   completeness: 85
// }

Informations sur les pays

import { getAllCountries, getCountryInfo, getUEMOACountries, getCEMACCountries } from 'syscohada-registry';

// Tous les pays
const countries = getAllCountries();

// Informations sur un pays
const senegal = getCountryInfo('SN');
console.log(senegal);
// {
//   code: 'SN',
//   isoCode: 'SN',
//   name: 'Sénégal',
//   officialName: 'République du Sénégal',
//   monetaryZone: 'UEMOA',
//   currency: 'XOF',
//   economicCapital: 'Dakar',
//   administrativeRegions: [...],
//   fiscalIdFormat: '7 chiffres + 1 lettre + 1 chiffre (NINEA)',
//   rccmPrefix: 'SN-',
//   language: 'fr'
// }

// Pays par zone
const uemoaCountries = getUEMOACountries();
const cemacCountries = getCEMACCountries();

Configuration des champs

import { getFields } from 'syscohada-registry';

// Obtenir les champs pour un pays
const fields = getFields('ML');

console.log(fields);
// [
//   {
//     code: 'identifiantFiscal',
//     label: 'N.I.F. (Numéro d\'Identification Fiscale)',
//     required: true,
//     visible: true,
//     format: '9 chiffres',
//     pattern: /^[0-9]{9}$/,
//     placeholder: 'Format: 9 chiffres',
//     helpText: 'Champ obligatoire pour mali',
//     order: 1
//   },
//   ...
// ]

Score de conformité

import { getComplianceScore, getComplianceReport } from 'syscohada-registry';

// Score simple (0-100)
const score = getComplianceScore({
  identifiantFiscal: '123456789',
  registreCommerce: 'ML-BAM-2024-C-1234'
}, 'ML');

console.log(score); // 75

// Rapport complet
const report = getComplianceReport({
  identifiantFiscal: '123456789',
  registreCommerce: 'ML-BAM-2024-C-1234'
}, 'ML');

console.log(report);
// {
//   country: 'ML',
//   generationDate: Date,
//   validationStatus: 'VALIDE_PARTIEL',
//   completeness: 75,
//   validationResult: {...},
//   recommendations: [...],
//   isCompliant: true,
//   complianceLevel: 'BON'
// }

Génération de code d'immatriculation

import { generateCode, verifyCodeCoherence } from 'syscohada-registry';

// Générer un code
const code = generateCode({
  identifiantFiscal: '1234567A8',
  registreCommerce: 'SN-DKR-2024-C-123456'
}, 'SN');

console.log(code); // 'SN-UEMOA-2024-C-A4F7B2'

// Vérifier la cohérence
const coherence = verifyCodeCoherence(code, {
  identifiantFiscal: '1234567A8',
  country: 'SN'
});

console.log(coherence);
// { isCoherent: true, message: 'Code parfaitement cohérent' }

Données de référence

La bibliothèque inclut des données de référence multilingues (FR/UK/SP) pour les civilités, fonctions et types de règlement.

Civilités

import {
  CIVILITES,
  getAllCivilites,
  getCiviliteByCode,
  getCivilitesByType,
  getCivilitesByGenre,
  getCivilitesActives,
  type CiviliteInfo
} from 'syscohada-registry';

// Toutes les civilités
const civilites = getAllCivilites();

// Par code
const monsieur = getCiviliteByCode('M');
console.log(monsieur);
// {
//   code: 'M',
//   libelle: 'M.',
//   libelleLong: { FR: 'Monsieur', UK: 'Mister', SP: 'Senior' },
//   genre: 'MASCULIN',
//   type: 'COURANT',
//   actif: true
// }

// Par type
const courants = getCivilitesByType('COURANT');  // M, MME, MLLE, BEBE, ENFANT
const titres = getCivilitesByType('TITRE');      // DR, PR, ME, MSG, grades militaires...

// Par genre
const masculins = getCivilitesByGenre('MASCULIN');
const feminins = getCivilitesByGenre('FEMININ');

Civilités disponibles :

| Code | Libellé | Type | Genre | |------|---------|------|-------| | M | M. | COURANT | MASCULIN | | MME | Mme | COURANT | FEMININ | | MLLE | Mlle | COURANT | FEMININ | | BEBE | Bébé | COURANT | NEUTRE | | ENFANT | Enfant | COURANT | NEUTRE | | ME | Me | TITRE | NEUTRE | | MSG | Msg | TITRE | MASCULIN | | DR | Dr | TITRE | NEUTRE | | PR | Pr | TITRE | NEUTRE | | COLONEL | Col. | TITRE | MASCULIN | | CAPITAINE | Cpt. | TITRE | MASCULIN | | COMMANDANT | Cdt. | TITRE | MASCULIN | | LIEUTENANT | Lt. | TITRE | MASCULIN | | SERGENT | Sgt. | TITRE | MASCULIN |

Fonctions

import {
  FONCTIONS,
  getAllFonctions,
  getFonctionByCode,
  getFonctionsActives,
  type FonctionInfo
} from 'syscohada-registry';

// Toutes les fonctions
const fonctions = getAllFonctions();

// Par code
const dg = getFonctionByCode('DG');
console.log(dg);
// {
//   code: 'DG',
//   libelle: { FR: 'Directeur Général', UK: 'General Manager', SP: 'Director General' },
//   libelleFeminin: { FR: 'Directrice Générale', UK: 'General Manager', SP: 'Directora General' },
//   actif: true
// }

// Affichage selon le genre
const fonction = getFonctionByCode('DRH');
const isFemale = true;
const label = isFemale ? fonction.libelleFeminin.FR : fonction.libelle.FR;
console.log(label); // "Directrice des Ressources Humaines"

Fonctions disponibles (45 entrées) :

| Catégorie | Codes | |-----------|-------| | Direction | PDG, DG, DGA, AS | | Finance | DF, AF, DAF, DAC, AC, ASSC, CG | | RH | DRH, ARH, ASSRH, SEC | | Informatique | DSI, AM | | Technique | DTEC, AT, ASST | | Production | DPROD, APROD, ASSPROD | | Entretien | DENTR, AENTR | | Logistique | DLOG, ALOG, DTRAN, ACH, LIV | | Développement | DDEV, ADEV, ASSDEV | | Commercial | DCOM, DCLI, ACMM, ASSCMM, CHCMM | | Marketing | DMAR, AMAR, ASSMAR | | Communication | DCMU, ACMU | | Publicité | DPUB, APUB, ASSPUB | | Sécurité | DSEC, ASEC, AACC | | Santé | MEDC, MED, INFC, INF | | Education | DPROF |

Types de règlement

import {
  TYPES_REGLEMENT,
  getAllTypesReglement,
  getTypeReglementByCode,
  getTypesReglementActifs,
  type TypeReglementInfo
} from 'syscohada-registry';

// Tous les types
const types = getAllTypesReglement();

// Par code
const virement = getTypeReglementByCode('VIR');
console.log(virement);
// {
//   code: 'VIR',
//   libelle: { FR: 'Virement', UK: 'Transfer', SP: 'Transferencia' },
//   actif: true
// }

Types de règlement disponibles :

| Code | FR | UK | |------|----|----| | ESP | Espèces | Cash | | CHQ | Chèque | Cheque | | VIR | Virement | Transfer | | TRAITE | Traites | Drafts | | CB | Carte bancaire | Bank Card | | TRANSFERT | Transfert d'argent | Transfer of money | | EPAIEMENT | e-paiement | e-payment | | CREDOC | Credoc | Documentary Credit | | FACTOR | Factor | Factor | | COMPENSE | Compense | Compense | | TERME | Terme | Term |


Export par défaut

L'export par défaut SyscohadaRegistry regroupe toutes les fonctions :

import SyscohadaRegistry from 'syscohada-registry';

// Validation
SyscohadaRegistry.validate(identifiers, 'SN');
SyscohadaRegistry.validateIdentifiers(identifiers);

// Pays
SyscohadaRegistry.getAllCountries();
SyscohadaRegistry.getCountryInfo('ML');
SyscohadaRegistry.isUEMOA('SN');  // true
SyscohadaRegistry.isCEMAC('CM');  // true

// Conformité
SyscohadaRegistry.getComplianceScore(identifiers, 'SN');
SyscohadaRegistry.getComplianceReport(identifiers, 'SN');

// Code d'immatriculation
SyscohadaRegistry.generateCode(identifiers, 'SN');

// Données de référence
SyscohadaRegistry.getAllCivilites();
SyscohadaRegistry.getAllFonctions();
SyscohadaRegistry.getAllTypesReglement();

Types TypeScript

import type {
  // Pays
  SyscohadaCountry,    // 'BJ' | 'BF' | 'CI' | ...
  UEMOACountry,        // 'BJ' | 'BF' | 'CI' | 'GW' | 'ML' | 'NE' | 'SN' | 'TG'
  CEMACCountry,        // 'CM' | 'CF' | 'CG' | 'GA' | 'GQ' | 'TD'
  MonetaryZone,        // 'UEMOA' | 'CEMAC'
  CountryInfo,

  // Validation
  ValidationResult,
  ComplianceReport,
  EconomicSector,      // 'PRIMAIRE' | 'SECONDAIRE' | 'TERTIAIRE' | 'QUATERNAIRE'
  ValidationStatus,    // 'NON_VALIDE' | 'EN_COURS_VALIDATION' | 'VALIDE_PARTIEL' | ...

  // Données de référence
  CiviliteCode,
  CiviliteInfo,
  Genre,               // 'MASCULIN' | 'FEMININ' | 'NEUTRE'
  TypeCivilite,        // 'COURANT' | 'TITRE'
  FonctionCode,
  FonctionInfo,
  TypeReglementCode,
  TypeReglementInfo
} from 'syscohada-registry';

Exemples d'intégration

React - Formulaire dynamique

import { getFields, validate } from 'syscohada-registry';
import type { SyscohadaCountry } from 'syscohada-registry';

function RegistrationForm({ country }: { country: SyscohadaCountry }) {
  const fields = getFields(country);
  const [values, setValues] = useState({});
  const [errors, setErrors] = useState([]);

  const handleSubmit = () => {
    const result = validate(values, country);
    if (!result.isValid) {
      setErrors(result.errors);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      {fields.filter(f => f.visible).map(field => (
        <div key={field.code}>
          <label>
            {field.label}
            {field.required && <span>*</span>}
          </label>
          <input
            type="text"
            placeholder={field.placeholder}
            pattern={field.pattern?.source}
            onChange={e => setValues({...values, [field.code]: e.target.value})}
          />
          <small>{field.helpText}</small>
        </div>
      ))}
      <button type="submit">Valider</button>
    </form>
  );
}

Angular - Service

import { Injectable } from '@angular/core';
import SyscohadaRegistry, {
  getAllCivilites,
  getAllFonctions,
  getAllTypesReglement
} from 'syscohada-registry';

@Injectable({ providedIn: 'root' })
export class ReferenceDataService {

  getCivilites() {
    return getAllCivilites();
  }

  getFonctions() {
    return getAllFonctions();
  }

  getTypesReglement() {
    return getAllTypesReglement();
  }

  validateCompany(identifiers: any, country: string) {
    return SyscohadaRegistry.validate(identifiers, country);
  }
}

Vue.js - Composable

import { ref, computed } from 'vue';
import { getAllCivilites, getCivilitesByType } from 'syscohada-registry';

export function useCivilites() {
  const civilites = ref(getAllCivilites());

  const courants = computed(() => getCivilitesByType('COURANT'));
  const titres = computed(() => getCivilitesByType('TITRE'));

  return { civilites, courants, titres };
}

Tests

npm test

Licence

MIT


Liens utiles