Aller au contenu
M. SALL
Travaux

ESP/UCAD — chef de groupe (3 étudiants, IA & Big Data / SSI / Télécoms) · mai 2025

BoviBot

Gestion d'élevage bovin où la logique métier vit dans la base : procédures stockées, triggers et événements planifiés en PL/SQL.

Problème
Un élevage a des règles temporelles — rappels de vaccination, contrôles vétérinaires — qu'une application web ne déclenche que si quelqu'un ouvre la page.
Résultat
Quinze objets PL/SQL en base — procédures, fonctions, triggers d'alerte et événements planifiés — avec leur suite de tests unitaires, un chat IA d'assistance et la documentation complète (MCD, MLD, dictionnaire de données, audit d'intégrité).
Rôle
Chef de groupe — backend & base de données
FlaskMySQLPL/SQLDockerREST API

Quel problème BoviBot résout-il ?

Un veau doit être vacciné à une date précise. Si le rappel dépend de l'ouverture d'une page web par l'éleveur, le rappel n'existe pas.

Quelle décision technique a été prise ?

Descendre la logique temporelle dans la base. Contre-intuitif à l'ère du « métier dans l'application », mais correct ici : la base est le seul composant qui tourne en permanence et qui détient la vérité.

  • Événements planifiés : evt_alerte_velages pour les vêlages à venir, evt_rapport_croissance pour le rapport périodique. Ils tournent que l'application soit ouverte ou non.
  • Triggers d'alerte : trg_alerte_vaccination, trg_alerte_poids_faible, trg_alerte_pesee_manquante. Le troisième est le plus utile — il détecte une absence, ce qu'aucune écriture ne déclenche naturellement. Et trg_historique_statut conserve la trace de chaque changement d'état.
  • Procédures stockées : sp_enregistrer_pesee, sp_declarer_vente, sp_rapport_nutritionnel — des opérations métier composées, exécutées en une transaction.
  • Fonctions métier : fn_age_en_mois, fn_gmq pour le gain moyen quotidien, fn_cout_total_elevage. Le calcul vit là où vivent les données, pas recopié dans chaque appelant.

Quinze objets, et leurs tests. tests/unit_tests_plsql.sql vérifie le comportement de la couche base. Une logique métier en base sans tests est une logique métier qu'on n'ose plus modifier.

L'API Flask devient une façade mince : elle expose et met en forme, elle n'arbitre pas.

Un chat IA d'assistance complète le dispositif côté éleveur : il répond sur la base des données du cheptel, pas à la place d'elles. Les prompts sont documentés et versionnés — un comportement de modèle non écrit est un comportement qu'on ne peut pas reproduire.

Quel a été mon rôle sur BoviBot ?

Chef d'un groupe de trois étudiants issus de trois filières (IA & Big Data, Sécurité des SI, Télécoms). Livrables complets : modèle conceptuel et logique de données, dictionnaire de données, audit d'intégrité SQL, guide de déploiement et plateforme conteneurisée.

Qu'est-ce que BoviBot m'a appris ?

« Toute la logique dans l'application » est un bon défaut, pas une loi. Quand la règle métier est temporelle et continue, la placer ailleurs que dans le composant qui tourne en continu, c'est la rendre optionnelle.

Un projet du même calibre ?

Basé à Thiès, disponible à dakar & télétravail. Je réponds sous 48 h.

En discuter