Découvrir
Qu'est-ce que Dalibi ?
Dalibi est un logiciel libre et open-source(GPL v3) de gestion d'établissement scolaire, pensé pour le Togo et l'Afrique (primaire, collège, lycée). Il couvre toute la vie de l'école : élèves, notes, examens, présences, finances, personnel et documents.
Techniquement, c'est une application Laravel 12 (PHP 8.3+) avec une interface React 19 + TypeScript reliée par Inertia.js (SPA sans API séparée), sur PostgreSQL. En auto-hébergement, vos données restent chez vous.
Version stable : v1.0.0
Scolarité
Élèves & inscriptions, notes & bulletins, examens officiels, présences, emploi du temps.
Gestion
Comptabilité & écolage, personnel & paie, caisses, dépenses, statistiques de pilotage.
Cadre
Rôles & permissions fins, documents PDF, archives, sauvegardes et portail parents/élèves.
Étape 1
Prérequis
Sur votre machine (ou serveur), installez :
- PHP 8.3+ avec les extensions usuelles (pdo_pgsql, mbstring, zip, gd, intl).
- Composer (gestionnaire de dépendances PHP).
- PostgreSQL 12+ (recommandé). SQLite convient pour un test rapide.
- Node.js 20+ et npm (build de l'interface).
- Git.
Optionnel mais recommandé
pg_dump / pg_restore (client PostgreSQL) pour les sauvegardes SQL natives, et Docker pour un déploiement de production reproductible.Étape 2
Installation locale
Cloner le dépôt et installer les dépendances
$ git clone https://github.com/wearedalibi/dalibi.git$ cd dalibi$ composer install$ npm install
Préparer l'environnement
$ cp .env.example .env$ php artisan key:generate
Ouvrez ensuite .env et renseignez la base de données (voir Configuration).
Créer le schéma et les données de base
# Développement : schéma + données de référence + comptes de démo$ php artisan migrate --seed# Lien symbolique pour les fichiers publics$ php artisan storage:link
--seed exécute le DatabaseSeeder (données de démonstration, dont des comptes prêts à l'emploi). Pour la production, on seede uniquement les données de référence — voir Seeding & premier démarrage.
Compiler l'interface et lancer le serveur
# Développement (rechargement à chaud)$ npm run dev$ php artisan serve# …ou build de production$ npm run build$ php artisan serve
L'application est disponible sur http://localhost:8000.
Traitements en arrière-plan (files d'attente & planificateur)
Les e-mails et les sauvegardes manuellespassent par une file d'attente ; les sauvegardes planifiées par le planificateur. En local :
$ php artisan queue:work # worker (e-mails, sauvegardes manuelles)$ php artisan schedule:work # planificateur (tâches automatiques)
Sans worker actif
queue:work en service.Alternative
Installation Docker (production)
Pour un déploiement reproductible, une image et une configuration Docker sont fournies dans le dépôt (services app, worker, scheduler, PostgreSQL). Le schéma type :
$ cp .env.example .env # renseigner APP_KEY, DB_*, MAIL_*$ docker compose up -d --build$ docker compose exec app php artisan migrate --seed$ docker compose exec app php artisan storage:link
Étape 3
Configuration (.env)
Les variables essentielles à renseigner dans .env :
APP_NAME=DalibiAPP_URL=http://localhost:8000# Base de données (PostgreSQL)DB_CONNECTION=pgsqlDB_HOST=127.0.0.1DB_PORT=5432DB_DATABASE=dalibiDB_USERNAME=postgresDB_PASSWORD=secret# Files d'attente (recommandé : database)QUEUE_CONNECTION=database# E-mails (pour notifications, ex. échec de sauvegarde)MAIL_MAILER=smtpMAIL_HOST=...MAIL_USERNAME=...MAIL_PASSWORD=...# Génération des matriculesMATRICULE_COUNTRY_CODE=TG
Le stockage des fichiers(local ou S3/R2) se configure ensuite depuis l'interface (Paramètres → Fichiers & Stockage), pas seulement via .env. Voir aussi la référence complète du .env.
Étape 3b
Configurer les e-mails (SMTP)
Dalibi envoie des e-mails (notifications, alerte d'échec de sauvegarde, accès portail…). La messagerie se configure via les variables MAIL_* de Laravel. En développement, la valeur par défaut MAIL_MAILER=log écrit les mails dans les logs (aucun envoi réel).
MAIL_MAILER=smtpMAIL_HOST=smtp.votre-fournisseur.comMAIL_PORT=587MAIL_USERNAME=...MAIL_PASSWORD=...MAIL_FROM_ADDRESS=no-reply@votre-domaine.tg # sur un domaine que vous contrôlezMAIL_FROM_NAME="${APP_NAME}"
Délivrabilité : éviter les spams
MAIL_FROM_ADDRESS doit être sur un domaine authentifié : configurez SPF, DKIM et DMARC dans votre DNS, via un fournisseur transactionnel (Brevo, Mailgun, Postmark, Resend…). Un domaine non authentifié part en spam. Testez avec mail-tester.com.Rappel : les e-mails et les sauvegardes manuelles passent par la file d'attente — un worker doit tourner (voir Installation et Mise en production).
Étape 4
Seeding & premier démarrage
Le seeding pré-remplit la base. C'est aussi par là que naît le premier utilisateur: l'inscription publique est désactivée, aucun compte ne peut s'auto-créer. Quatre points d'entrée existent, du plus minimal au plus complet :
| Seeder | Contenu | Usage |
|---|---|---|
RolesAndPermissionsSeeder | ~145 permissions + les rôles de base. | Minimum vital. |
ReferenceDataSeeder | Rôles/permissions + catalogues: pays, types de classes, classes PS→Tle, matières, catégories de frais, types d'évaluation, bourses, tags. Idempotent, sans données de démo. | Production. |
DefaultUsersSeeder | École « École Centrale » + 1 compte par rôle (mot de passe password). | Démo / dev. |
DatabaseSeeder (défaut de db:seed) | ReferenceData + DefaultUsers + modèles de documents + élèves fictifs (inscrits à l'année active). | Dev / démo — bloqué en prod. |
DemoSeeder | Une année scolaire complètesur toutes les classes (≥ 20 élèves) : notes, moyennes, bulletins, factures & paiements, présences, emploi du temps, calendrier, paie — noms et villes réels (Togo). | Démo riche — bloqué en prod. |
Le choix du seeder est manuel
ReferenceDataSeeder en prod). Laravel ajoute toutefois un garde-fou — en production, db:seed et migrate --seeddemandent une confirmation et refusent de s'exécuter sans --force (utile en déploiement non-interactif).Développement / démo — connexion immédiate
php artisan migrate --seed exécute le DatabaseSeeder : vous obtenez une école et cinq comptes prêts à l'emploi, tous avec le mot de passe password.
admin@dalibi.tg → Administrateurdirecteur@dalibi.tg → Directeurenseignant@dalibi.tg → Enseignantcomptable@dalibi.tg → Comptablesecretaire@dalibi.tg → Secrétaire# Mot de passe commun : password
Changement de mot de passe imposé
Protection automatique en production
DefaultUsersSeeder, StudentTestSeeder) sont automatiquement ignorés lorsque APP_ENV=production — même avec db:seed --force. Un db:seeden production n'installe donc que les données de référence.Données de démonstration complètes
Pour présenter l'application avec une école qui « vit », le DemoSeeder génère une année scolaire entièresur toutes les classes actives (au moins 20 élèves par classe) : dossiers d'élèves, programme et affectations des enseignants, évaluations notées et moyennes par matière, bulletins figés, facturation et paiements, présences, emploi du temps, calendrier, cycles de paie et dossiers courants (justificatifs, réclamations, primes, documents). Les noms, prénoms et villes sont réels (divisions administratives du Togo).
Il se lance aprèsun seed de base (qui pose l'école, l'année, les classes et les matières) — il ne fait pas partie de DatabaseSeeder, trop lourd pour chaque installation :
# 1. socle : école, année, classes, matières, comptes de démo$ php artisan migrate --seed# 2. jeu de démonstration complet (une année scolaire vivante)$ php artisan db:seed --class=DemoSeeder
Idempotent et déterministe
Production — seeding prod-safe + premier admin
En production, on migre puis on ne seede que les données de référence (aucun compte de démo, aucun élève fictif) :
$ php artisan migrate --force$ php artisan db:seed --class=ReferenceDataSeeder --force
Il ne reste plus qu'à créer votre premier administrateur. Via Tinker :
$u = App\Models\User::create(['firstname' => 'Admin','lastname' => 'École','email' => 'admin@monecole.tg','gender' => 'male','password' => 'un-mot-de-passe-fort', // haché automatiquement]);$u->assignRole(App\Constants\Roles::ADMINISTRATOR); // le matricule est généré automatiquement
Alternative rapide : lancer db:seed --class=DefaultUsersSeeder puis changer immédiatement le mot de passe du compte admin@dalibi.tg et supprimer les comptes de démo superflus.
Configurer l'établissement
Connectez-vous, puis suivez l'ordre logique (les catalogues classes/matières/frais sont déjà pré-remplis par ReferenceDataSeeder — il reste à les adapter à votre école) :
Provisionnement automatique
Paramétrer l'établissement
Définir la scolarité financière
Créer les comptes du personnel
Inscrire les élèves
Faire vivre l'année
Étape 5
Mise en production
Passer d'un lancement local à une instance de production demande quelques réglages de robustesse et de sécurité.
Régler l'environnement
APP_ENV=productionAPP_DEBUG=falseAPP_URL=https://ecole.votre-domaine.tg# APP_KEY doit être défini (php artisan key:generate) et gardé secret
Installer et compiler pour la prod
$ composer install --no-dev --optimize-autoloader$ npm ci && npm run build$ php artisan optimize # config:cache + route:cache + view:cache$ php artisan storage:link
Servir derrière HTTPS
Un reverse proxy(Nginx ou Caddy) devant PHP-FPM, avec un certificat TLS (Let's Encrypt). Assurez-vous qu'il transmet l'en-tête X-Forwarded-Proto pour que Laravel génère des URLs en https.
Worker de file d'attente en service
Indispensable (sinon e-mails et sauvegardes manuelles ne partent jamais). À superviser avec systemd ou Supervisor pour redémarrage automatique :
$ php artisan queue:work --tries=3
Planificateur (tâches automatiques)
Une seule entrée cron qui déclenche le planificateur Laravel :
* * * * * cd /chemin/app && php artisan schedule:run >> /dev/null 2>&1
Droits & prérequis
storage/ et bootstrap/cache/ accessibles en écriture par le serveur web ; pg_dump / pg_restore installés pour les sauvegardes SQL natives.
Un seul planificateur
Une image et une configuration Docker (services app / worker / scheduler / PostgreSQL) sont fournies — voir le guide de déploiement.
Comprendre
Comment l'application est construite
Dalibi est un monolithe modulaire : une seule application Laravel qui rend directement des pages React via Inertia.js. Il n'y a donc pas d'API REST séparée pour l'interface — le contrôleur renvoie une page et ses données en une fois. Une API REST distincte existe uniquement pour le portail parents/élèves (voir la section API). La logique métier est regroupée dans des services, et l'accès est filtré par permission à chaque route.
Modules
Un contrôleur et un jeu de pages par module ; la navigation (menu.ts) est la source unique des entrées, filtrée par permission.
Services métier
La logique complexe (paie, moyennes, compta, PDF…) vit dans des services testables, réutilisés par les contrôleurs et les commandes.
Front
React 19 + TypeScript dans resources/js/pages, design-system maison, listes normalisées (filtres + bouton « Rechercher » + pagination).
Données
PostgreSQL, migrations Laravel, identifiants UUID, journal d'audit des actions, dictionnaire des tables documenté.
Le cycle d'une requête
Un clic sur un lien Inertia déclenche une requête serveur classique ; Laravel répond avec la page et ses données, React met à jour l'écran sans rechargement complet.
Navigateur (Link Inertia)│▼Route routes/web.php ──► middleware can:view_students│▼Contrôleur StudentController@index│▼Service métier ──► Modèles Eloquent ──► PostgreSQL│▼Inertia::render('Eleves/Index', props)│▼Page React resources/js/pages/Eleves/Index.tsx
Données partagées à chaque page
Inertia partage automatiquement, sur toutes les pages : l'utilisateur connecté, ses rôles et la liste de ses permissions, ainsi que la monnaiede l'établissement. C'est ce qui permet au front de n'afficher que les menus, cartes et actions autorisés — sans requête supplémentaire.
Structure du code
app/├── Http/Controllers/ ← 1 contrôleur par écran / ressource├── Models/ ← entités Eloquent (UUID)├── Services/ ← logique métier réutilisable et testable├── Jobs/ ← tâches en file d'attente (sauvegardes, e-mails)├── Notifications/ ← e-mails (ex. échec de sauvegarde)└── Constants/ ← Roles, Permissionsresources/js/├── pages/ ← pages React (Inertia)├── components/ ← design-system + composants partagés└── types/menu.ts ← navigation (source des modules)routes/web.php ← routes + gardes can:*database/├── migrations/ ← schéma└── seeders/ ← données de référence & démo
Les services métier
Le « cerveau » de l'application. Chaque service isole une logique précise, ce qui la rend testable et réutilisable (contrôleurs, commandes CLI, jobs) :
GradingService— calcul des moyennes et règles de notation (par type de classe, trimestre/semestre)ReportCardBuilder / BulletinRenderer— construction des données puis rendu PDF fidèle des bulletinsPayrollService— paie : ancienneté, CNSS/ITS, génération des bulletins de salaireAccountingService— écritures comptables : écolage, dépenses, mouvements de caisseInvoiceService— reçus et facturesStatisticsService— indicateurs de pilotage et exportsDocumentRenderer— documents PDF (certificats) avec en-tête et filigraneMatriculeService— génération des matricules et numéros d'enregistrementBackupService— sauvegardes, archives d'année et restauration
Conventions transverses
- Identifiants UUID sur toutes les tables (pas d'entiers auto-incrémentés exposés).
- Contrôle d'accès par permission à chaque route (can:*), et permissions partagées au front.
- Journal d'audit : les actions sensibles sont tracées (qui, quoi, quand).
- Listes normalisées : filtres + bouton « Rechercher » explicite + pagination, partout.
- Files d'attente (e-mails, sauvegardes manuelles) + planificateur (tâches automatiques).
- Stockage séparé : disque media (public) et disque secure (privé), local ou S3/R2.
- Observabilité optionnelle : logs JSON (Loki/Grafana) + capture d'exceptions (Sentry/GlitchTip).
Comprendre
Les modules en détail
Dalibi s'organise en modules accessibles depuis le menu latéral. Chacun regroupe des fonctions cohérentes, filtrées par vos permissions. Voici ce que couvre chaque module.
Tableau de bord
Synthèse d'activité, composée par permission — chaque profil ne voit que ses sections.
- Finances : facturé / encaissé / reste, évolution mensuelle, caisses, répartition par moyen de paiement
- Inscriptions & effectifs : totaux, parité, inscriptions récentes, répartition par classe
- Vie scolaire : présences du jour, permissions en attente, prochains examens
- Vue enseignant : emploi du temps du jour, notes à saisir, accès rapide « Faire l'appel »
Élèves & inscriptions
Le cœur de la scolarité : dossiers des élèves et leur parcours d'une année à l'autre.
- Dossiers élèves complets (état civil, parents, contacts, photo)
- Inscriptions à l'année académique active et affectation aux classes
- Effectifs & listes de classe, passage de classe (promotion) en fin d'année
- Bourses d'étudiants et statistiques élèves (parité, répartition)
- Emploi du temps hebdomadaire par classe
Présences
Suivi de l'assiduité au quotidien.
- Saisie de l'appel par classe et par séance
- Statistiques d'assiduité (taux de présence, absences répétées)
- Demandes et justificatifs de permission d'absence
Examens
Organisation des évaluations, des devoirs de classe aux examens officiels.
- Modèles d'évaluation réutilisables
- Évaluations par classe et planning des examens
- Examens officiels (CEPD, BEPC, BAC) et suivi des résultats
Notes & bulletins
De la saisie des notes au bulletin PDF fidèle.
- Saisie des notes par matière et par évaluation
- Calcul des moyennes paramétrable (par type de classe, trimestre ou semestre)
- Génération des bulletins PDF avec en-tête et modèle configurables
- Réclamations et révisions de notes
Comptabilité & écolage
Toute la gestion financière de l'établissement.
- Structures et catégories de frais, écolage par classe
- Encaissements, reçus vérifiables, situation financière par classe
- Dépenses et journal des transactions
- Caisses multiples (dont Mobile Money) et soldes
Personnel & Paie
Ressources humaines et paie du personnel, connectées à la comptabilité.
- Fiches employés, grilles salariales et rubriques de paie
- Cycles de paie mensuels : bulletins PDF, validation et décaissement en caisse
- Ancienneté, CNSS et ITS calculés automatiquement (paramétrables)
Archives & documents
Production et conservation des documents administratifs.
- Modèles de documents (certificats, attestations) avec en-tête et filigrane par école
- Archivage des documents générés, corbeille et restauration
- Classement par tags
Statistiques & pilotage
Indicateurs de direction alignés sur la carte scolaire (MEPSTA).
- Filtres par année, classe et sexe
- Indicateurs d'effectifs, de réussite et de vie scolaire
- Export PDF et Excel sur chaque section
Calendrier
Les événements de l'année scolaire.
- Événements, échéances et jalons de l'année académique active
Portail parents & élèves
Consultation à distance via une API dédiée (voir la section API).
- Notes, bulletins PDF, présences et scolarité par enfant
- Calendrier et informations de l'établissement
- Authentifié par token (Laravel Sanctum)
Administration
Gestion des accès et traçabilité.
- Utilisateurs, rôles et permissions (contrôle d'accès fin)
- Affectations enseignant / matière / classe
- Journal d'audit des actions et gestion des accès portail
Paramètres
La configuration de référence de l'établissement.
- École, classes, types de classes, matières, pays
- Années et périodes académiques, types d'évaluation
- Catégories et structures de frais, bourses, calcul des moyennes
- Fichiers & stockage (local / S3), modèles de documents, sauvegardes
Comprendre
Rôles & permissions
L'accès est piloté par les permissions ({capacité}_{module}, ex. view_students, create_marks, delete_backups) — environ 145au total. Un rôle est simplement un ensemble de permissions ; il n'existe pas de super-rôle magique.
- Administrateur — accès complet, configuration, gestion des comptes.
- Directeur — école, années, classes, suivi, rapports.
- Enseignant — ses classes, notes, présences.
- Comptable — finances, rapports, exports.
- Secrétaire — élèves & inscriptions, utilisateurs.
- Parent / Élève — portail de consultation.
Vous pouvez créer un rôle personnalisé depuis Administration → Rôles & permissions : il fonctionne aussitôt (menus, routes, cartes). Détails : guide rôles & permissions.
Ce que le contrôle d'accès garantit
- Une permission par verbe : un droit de lecture (view_*) ne permet jamais de créer, modifier ou supprimer.
- Cloisonnement enseignant : un professeur ne saisit notes et appels que dans les classes où il est affecté.
- Contrôle d'appartenance : on ne note ni ne pointe qu'un élève réellement inscrit dans la classe visée.
- Comptes à privilèges : seul un administrateur peut modifier ou supprimer un compte administrateur.
- Un mot de passe défini par un tiers doit être changé à la première connexion.
Comprendre
Stockage & fichiers
Deux disques applicatifs séparent les usages :
media— fichiers publics (logos, filigranes, exports) servis via/storage.secure— fichiers sensibles(photos d'élèves, pièces des dossiers), stockés hors du dossier public et servis uniquement via des routes authentifiées.
Les deux suivent la même configuration centralisée : local par défaut, ou S3 / Cloudflare R2 activé depuis Paramètres → Fichiers & Stockage.
Exploiter
Sauvegardes & restauration
Depuis Paramètres → Sauvegardes, aux formats JSON et SQL. Conçu pour tenir sur plusieurs années : écriture en flux, compression gzip, et pg_dump natif sur PostgreSQL (repli portable sinon).
- Médias au choix : archive
.zipregroupant la base + les fichiers uploadés. - Archives par année scolaire : instantané verrouillé, exclu de la rétention (manuel ou à la clôture d'année).
- Intégrité : empreinte SHA-256 vérifiable + alerte e-mail en cas d'échec.
- Restauration :
.json,.sql,.gz,.dump,.zip— avec sauvegarde de sécurité automatique préalable, et restauration sélective par table. - Planification : quotidienne/hebdomadaire + rétention (les archives verrouillées ne sont jamais purgées).
$ php artisan backup:run --formats=json,sql
Intégrer
API du portail parents & élèves
Le portail expose une API REST (/api/v1) authentifiée par token Laravel Sanctum : notes, bulletins PDF, présences, scolarité et calendrier. La spécification OpenAPI 3.1 est fournie dans le dépôt.
Le portail se configure dans les réglages — désactivé par défaut
Côté parent/élève: une fois son accès activé (Administration → Accès portail), la personne reçoit ses identifiants, se connecte au portail et consulte — pour chacun de ses enfants — ses notes, bulletins, présences, la scolarité et le calendrier. Aucune saisie : c'est une vue en lecture seule alimentée par l'API.
Spécification OpenAPIExploiter
Sécurité & bonnes pratiques
- Les comptes de démonstration sont bloqués en production et imposent un changement de mot de passe à la première connexion — ne contournez pas ce garde-fou.
- APP_DEBUG=false en production, et ne commitez jamais l'APP_KEY ni le .env.
- Servez toujours en HTTPS ; forcez la redirection HTTP → HTTPS.
- Activez la double authentification (2FA) sur les comptes à privilèges (administrateur, direction).
- Appliquez le moindre privilège : donnez à chaque rôle uniquement les permissions nécessaires.
- Écritures financières protégées : encaissements et cycles de paie sont validés sous verrou — un double-clic ne peut pas encaisser ni décaisser deux fois.
- La preuve d'un encaissement est indestructible : une inscription portant des paiements ne peut pas être supprimée.
- Sauvegardez régulièrement et hors-site (règle 3-2-1) ; testez la restauration et l'intégrité (SHA-256).
- Les pièces sensibles (photos, justificatifs) sont déjà sur un disque privé (secure), hors du dossier public.
- Le journal d'audit trace les actions : consultez-le en cas d'incident.
Exploiter
Mettre à jour l'application
Sauvegardez d'abord
# 1. Récupérer la nouvelle version$ git pull# 2. Dépendances$ composer install --no-dev --optimize-autoloader$ npm ci && npm run build# 3. Base de données$ php artisan migrate --force# 4. Rafraîchir les caches$ php artisan optimize:clear$ php artisan optimize# 5. Redémarrer le worker (recharge le code)$ php artisan queue:restart
Aide
Dépannage (problèmes fréquents)
Les sauvegardes ou e-mails restent « en attente »
Le worker de file d'attente ne tourne pas. Lancez php artisan queue:work (et supervisez-le en service).
Logos / images en 404
Le lien symbolique manque : php artisan storage:link.
Erreur 500 / « Permission denied » à l'écriture
Droits insuffisants sur storage/ et bootstrap/cache/ pour l'utilisateur du serveur web.
La sauvegarde SQL échoue en production
pg_dump / pg_restore ne sont pas installés. Installez le client PostgreSQL (l'app bascule sinon sur l'export portable).
Erreur 419 « Page expirée » à la connexion
Problème de session/CSRF : vérifiez APP_URL, le domaine des cookies et que le proxy transmet bien le HTTPS (X-Forwarded-Proto).
Styles/JS non chargés ou « contenu mixte »
APP_URL doit être en https et le reverse proxy doit transmettre X-Forwarded-Proto.
Les tâches planifiées ne s'exécutent pas
Le cron du planificateur est absent : ajoutez * * * * * php artisan schedule:run.
Anciennes pages après un déploiement
Videz les caches : php artisan optimize:clear puis php artisan optimize.
Référence
Glossaire métier
Dalibi gère un ou plusieurs établissements (table schools) ; certains paramètres (modèles de bulletin et de documents, en-tête, calcul des moyennes, examens officiels, emploi du temps) sont définis par école.
- Année académique
- Le cycle scolaire (ex. 2024-2025). Une seule est active à la fois.
- Période
- Découpage de l'année : trimestre ou semestre, selon le type de classe.
- Type de classe
- Catégorie (maternelle, primaire, collège…) qui pilote les règles de moyennes.
- Structure / catégorie de frais
- Le barème d'écolage et sa ventilation, par classe.
- Écolage
- Les frais de scolarité facturés et encaissés.
- Bulletin
- Le relevé de notes périodique, généré en PDF depuis un modèle.
- Matricule
- L'identifiant unique d'un utilisateur ou d'un élève (préfixe par rôle).
- Rôle / Permission
- Un rôle est un ensemble de permissions ; l'accès est piloté par permissions.
- Caisse
- Un compte de trésorerie (espèces, Mobile Money…) pour encaissements et dépenses.
- Rubrique de paie
- Un élément de bulletin de salaire (gain ou retenue).
- Portail
- L'espace de consultation des parents/élèves, alimenté par l'API.
Aller plus loin
Contribuer & ressources
Dalibi est ouvert aux contributions. Le workflow : branches de fonctionnalité vers develop, PR, puis main. Les tests se lancent avec php artisan test.
Licence GPL v3