syscohada-registry
v2.0.2
Published
Bibliothèque JavaScript/TypeScript pour la gestion des immatriculations d'entreprises selon les normes SYSCOHADA (UEMOA/CEMAC)
Maintainers
Readme
SYSCOHADA Registry
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-registryou avec yarn :
yarn add syscohada-registryUtilisation 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 testLicence
MIT
