Cleo ERP — La gestion d'entreprise, simplement
9.5K
La gestion d'entreprise, simplement.
Plateforme ERP complete developpee par EC Intelligence pour les PME francophones.
SalaryComponent.category + rate_parameter_code + base_rule), cumuls annuels (year-to-date), classification employe (categorie, coefficient, echelon, convention collective), solde de conges sur le bulletin, formatage nombres avec separateurs de milliers. Cotisations detaillees par pays (5+ salariales, 5-8 patronales), integration comptable automatique (journal SAL), architecture multi-pays via PayrollParameterResolver avec versioning des taux (reference_date). 3 methodes de calcul fiscal extensibles : bareme progressif + deductions (MA, CI, ML, TG, BJ, NE, GN, FR), quotient familial (SN), abattement sur le brut + reduction familiale (BF). 10 pays supportes avec fixtures completes. Administration configurable via interface (CRUD composants, parametres, tranches IR, types de contrat). Labels adaptatifs par pays (hook usePayrollLabels, zero hardcodage). Formulaire donnees de paie adaptatif par pays (champs visibles/masques resolus dynamiquement via pack-config). Actions rapides operateur (situation familiale, prime exceptionnelle, conges periode). Templates PDF par pays : CI style GOS (part salariale/patronale cote a cote, Parts IGR, display_order), MA style Attijari (Code/Libelle/Base/Taux, N° C.I.M.R, N° Assurance Maladie), generique pour les autres. Logo entreprise dans le PDF, export XLSX recapitulatif. Fiche de paie creee automatiquement a la creation d'un employe (signal enrichi, migration backfill). Formulaire donnees de paie restructure en 6 sections avec bloc infos RH en lecture seule.Ctrl+K (13 modeles, 8 modules, resultats groupes avec navigation directe)/api/docs/) et ReDoc (/api/redoc/) auto-generes via drf-spectacular (OpenAPI 3.0)Cleo ERP integre un systeme de permissions granulaires avec 6 niveaux d'acces hierarchiques appliques sur 10 modules :
| Niveau | Description |
|---|---|
| Aucun | Pas d'acces au module |
| Lecture | Consultation uniquement |
| Creation | Lecture + ajout de donnees |
| Modification | Creation + mise a jour |
| Suppression | Modification + suppression |
| Admin | Acces complet au module |
7 roles par defaut sont crees automatiquement au demarrage : Administrateur, Directeur, Ventes, Ressources Humaines, Finance, Logistique, Employe. La matrice complete est consultable depuis l'interface d'administration (/users/roles).
Cleo ERP supporte 10 pays regroupes sous 3 packs comptables, selectionnables au premier lancement via un Setup Wizard :
| Pays | Code | Pack comptable | Paie | Devise | Methode fiscale |
|---|---|---|---|---|---|
| Cote d'Ivoire | CI | SYSCOHADA revise (242 comptes) | CNPS / ITS | XOF | Progressif (0) |
| Senegal | SN | SYSCOHADA revise (242 comptes) | IPRES / IR | XOF | Quotient familial (1) |
| Mali | ML | SYSCOHADA revise (242 comptes) | INPS / ITS | XOF | Progressif (0) |
| Burkina Faso | BF | SYSCOHADA revise (242 comptes) | CNSS / IUTS | XOF | Abattement 25% (2) |
| Togo | TG | SYSCOHADA revise (242 comptes) | CNSS / IRPP | XOF | Progressif (0) |
| Benin | BJ | SYSCOHADA revise (242 comptes) | CNSS / ITS | XOF | Progressif (0) |
| Niger | NE | SYSCOHADA revise (242 comptes) | CNSS / IUTS | XOF | Progressif (0) |
| Guinee | GN | SYSCOHADA revise (242 comptes) | CNSS / ITS | GNF | Progressif (0) |
| Maroc | MA | PCGE Maroc (145 comptes) | CNSS / AMO / IR | MAD | Progressif (0) |
| France | FR | PCG ANC 2025 (253 comptes) | URSSAF / CSG / PAS | EUR | Progressif (0) |
Chaque pays dispose de : devises, plan comptable complet, taxes, journaux, exercice fiscal, parametres de paie (16+ parametres configurables via PayrollParameterResolver), parametres de conges (10 parametres LEAVE_*), tranches d'imposition, jours feries initiaux, categories de frais, labels PDF dynamiques (cotisations, impots, numeros sociaux) et donnees de demonstration optionnelles.
L'architecture distingue accounting_pack (OHADA/MA/FR — plan comptable et TVA) et country_code (CI/SN/ML/.../FR — paie, jours feries, conges, devise). L'ajout d'un nouveau pays ne necessite que la creation d'un fichier fixture dans payroll/fixtures/locales/ et d'une entree dans COUNTRY_PACKS — zero modification du code applicatif.
Depuis v3.13.0, chaque pack charge egalement 13 roles comptables (AccountMapping) qui permettent au systeme de resoudre dynamiquement les comptes utilises dans les ecritures automatiques (ventes, achats, paie, notes de frais), sans aucun code hardcode.
Depuis v3.29.0, chaque pays peut disposer de son propre template de bulletin de paie (CI style GOS, MA style Attijari, generique pour les autres), selectionne automatiquement via CompanySetup.country_code.
Le choix du pays est irreversible apres la premiere ecriture comptable (verrouillage automatique).
La documentation interactive de l'API REST est disponible apres deploiement :
| URL | Format | Description |
|---|---|---|
/api/docs/ | Swagger UI | Interface interactive (test des endpoints) |
/api/redoc/ | ReDoc | Documentation lisible (lecture seule) |
/api/schema/ | OpenAPI 3.0 | Schema JSON/YAML brut |
Tous les endpoints sont groupes par module (CRM, Catalog, Sales, Purchasing, Inventory, HR, Payroll, Accounting, Recruitment, Users, Notifications, Dashboard, Core).
# Obtenir un token
curl -X POST http://localhost:8000/api/token/ \
-H "Content-Type: application/json" \
-d '{"username":"[email protected]","password":"admin"}'
# Utiliser le token
curl -H "Authorization: Bearer <access_token>" http://localhost:8000/api/sales/invoices/
# Rafraichir le token
curl -X POST http://localhost:8000/api/token/refresh/ \
-H "Content-Type: application/json" \
-d '{"refresh":"<refresh_token>"}'
# 1. Creer le repertoire
mkdir -p /opt/cleo && cd /opt/cleo
# 2. Creer le fichier .env
cat > .env << 'EOF'
# Cleo ERP — Configuration
SECRET_KEY=changez-moi-avec-une-vraie-cle-secrete
DEBUG=False
ALLOWED_HOSTS=localhost,votre-ip,votre-domaine.com
# Base de donnees
DB_NAME=cleo_db
DB_USER=cleo_user
DB_PASSWORD=votre-mot-de-passe-securise
# Email (optionnel — configurable aussi depuis /settings)
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
[email protected]
EMAIL_HOST_PASSWORD=votre-mot-de-passe
[email protected]
# API taux de change (optionnel)
OPENEXCHANGE_API_KEY=votre-cle
# Securite
CORS_ORIGIN_WHITELIST=http://localhost:8000
CSRF_TRUSTED_ORIGINS=http://localhost:8000
SESSION_COOKIE_SECURE=False
CSRF_COOKIE_SECURE=False
# Superuser (cree automatiquement au premier lancement)
[email protected]
DJANGO_SUPERUSER_PASSWORD=admin
# URL du site (utilisee dans les emails et PDFs)
SITE_URL=http://localhost:8000
# Celery (requis pour backups, notifications, conges et paie)
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/0
EOF
# 3. Creer docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
db:
image: postgres:14-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${DB_NAME:-cleo_db}
POSTGRES_USER: ${DB_USER:-cleo_user}
POSTGRES_PASSWORD: "${DB_PASSWORD:?DB_PASSWORD requis dans .env}"
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-cleo_user} -d ${DB_NAME:-cleo_db}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
redis:
image: redis:7-alpine
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
backend:
image: ecintelligence/cleo-erp:3.34.1
restart: unless-stopped
env_file: .env
environment:
DB_HOST: db
DB_PORT: "5432"
DJANGO_ENV: production
REDIS_URL: redis://redis:6379/0
volumes:
- static_data:/data/static
- media_data:/data/media
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/api/check-auth/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
celery-worker:
image: ecintelligence/cleo-erp:3.34.1
restart: unless-stopped
env_file: .env
environment:
DB_HOST: db
DB_PORT: "5432"
DJANGO_ENV: production
REDIS_URL: redis://redis:6379/0
command: celery -A cleo_platform worker -l info
volumes:
- media_data:/data/media
depends_on:
backend:
condition: service_healthy
celery-beat:
image: ecintelligence/cleo-erp:3.34.1
restart: unless-stopped
env_file: .env
environment:
DB_HOST: db
DB_PORT: "5432"
DJANGO_ENV: production
REDIS_URL: redis://redis:6379/0
command: celery -A cleo_platform beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
volumes:
- media_data:/data/media
depends_on:
backend:
condition: service_healthy
nginx:
image: nginx:alpine
restart: unless-stopped
ports:
- "${CLEO_PORT:-8000}:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- static_data:/data/static:ro
- media_data:/data/media:ro
depends_on:
backend:
condition: service_healthy
volumes:
pg_data:
name: cleo_pg_data
static_data:
name: cleo_static_data
media_data:
name: cleo_media_data
EOF
# 4. Creer nginx.conf
cat > nginx.conf << 'EOF'
upstream django {
server backend:8000;
}
server {
listen 80;
server_name _;
client_max_body_size 50M;
location /static/ {
alias /data/static/;
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
location /media/ {
alias /data/media/;
expires 7d;
add_header Cache-Control "public";
}
location / {
proxy_pass http://django;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_read_timeout 120s;
proxy_connect_timeout 10s;
}
}
EOF
# 5. Lancer
docker compose up -d
# 6. Acceder a http://localhost:8000
# Le Setup Wizard apparait au premier acces pour choisir le pack
# Credentials : [email protected] / admin
| Variable | Description | Requis |
|---|---|---|
SECRET_KEY | Cle secrete Django | Oui |
DB_NAME / DB_USER / DB_PASSWORD | Connexion PostgreSQL | Oui |
ALLOWED_HOSTS | Hotes autorises (separes par virgule) | Oui |
DJANGO_SUPERUSER_EMAIL | Email du compte admin | Oui |
DJANGO_SUPERUSER_PASSWORD | Mot de passe admin | Oui |
CELERY_BROKER_URL | URL du broker Celery (defaut : redis://redis:6379/0) | Oui |
CELERY_RESULT_BACKEND | URL du backend Celery (defaut : redis://redis:6379/0) | Oui |
REDIS_URL | URL Redis pour le backend Django (defaut : redis://redis:6379/0) | Non |
SITE_URL | URL publique (pour emails/PDFs) | Non |
SESSION_COOKIE_SECURE | True si HTTPS, False si HTTP | Non |
CSRF_COOKIE_SECURE | True si HTTPS, False si HTTP | Non |
CLEO_PORT | Port d'exposition (defaut : 8000) | Non |
EMAIL_HOST / EMAIL_PORT / etc. | Configuration SMTP (configurable aussi depuis /settings) | Non |
OPENEXCHANGE_API_KEY | Cle API OpenExchange (taux de change) | Non |
latest — Derniere version stable (3.34.1)3.34.1 — Amelioration templates PDF CI + MA — 0 migration DB3.34.0 — Formulaire EmployeePayroll adaptatif par pays — 1 migration DB (payroll/0009)3.33.0 — Lancement global + Labels adaptatifs + Actions rapides operateur — 0 migration DBL'historique complet des tags est disponible sur Docker Hub.
3.34.1 — Amelioration templates PDF CI (Parts IGR en-tete, numerotation display_order, en-tete fixe 3 lignes) + MA (N° C.I.M.R, N° Assurance Maladie, 6 colonnes fixes colgroup, accents)3.34.0 — Formulaire EmployeePayroll adaptatif par pays (endpoint pack-config, 3 champs optionnels, payroll_form_fields dans COUNTRY_PACKS)3.33.0 — Lancement global auto-generation bulletins + labels adaptatifs par pays (usePayrollLabels) + actions rapides operateur (situation familiale, prime, conges) + fix signals/deduplicationL'historique complet des versions est disponible dans le depot Git.
/api/docs/ (Swagger UI) ou /api/redoc/ (ReDoc)Content type
Image
Digest
sha256:383c99ddf…
Size
223.9 MB
Last updated
29 days ago
docker pull ecintelligence/cleo-erp