Application Android conçue pour vous aider à gérer votre stock de médicaments et vous notifier à l'avance lorsqu'il est temps de passer à la pharmacie pour renouveler vos traitements.
- Kotlin 100%
| .idea | ||
| app | ||
| gradle | ||
| .gitignore | ||
| build.gradle.kts | ||
| build_output.txt | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| output.txt | ||
| Pixel-7-Android-17_2026-07-15_205107.logcat | ||
| README.md | ||
| settings.gradle.kts | ||
💊 MedicAlert - Gestion de Stock de Médicaments
MedicAlert est une application Android conçue pour vous aider à gérer votre stock de médicaments et vous notifier à l'avance lorsqu'il est temps de passer à la pharmacie pour renouveler vos traitements.
📌 Fonctionnalités
| Fonctionnalité | Description |
|---|---|
| ✅ Gestion des médicaments | Ajoutez, modifiez et supprimez vos médicaments avec leur nom, posologie et couleur |
| ✅ Gestion des boîtes | Ajoutez des boîtes de médicaments avec une quantité initiale. Un médicament peut avoir plusieurs boîtes associées |
| ✅ Sélection intelligente | Lors de l'ajout d'une boîte, choisissez un médicament existant (posologie et couleur pré-remplies) ou créez-en un nouveau |
| ✅ Sélecteur de couleur visuel | Choisissez la couleur parmi une palette de 14 couleurs prédéfinies (pas besoin de code hexadécimal) |
| ✅ Suivi automatique du stock | Le stock diminue automatiquement chaque jour selon la posologie |
| ✅ Calcul des jours restants | L'application calcule combien de jours de traitement il vous reste |
| ✅ Tri intelligent | Les médicaments sont triés par jours restants (le plus urgent en premier), puis par nom |
| ✅ Notifications intelligentes | Recevez une alerte 3 jours (configurable) avant la rupture de stock |
| ✅ Seuil personnalisable | Modifiez le seuil de notification dans les paramètres (1 à 30 jours) |
| ✅ Gestion des dates de péremption | Affichez et gérez les dates de péremption de vos boîtes |
🛠 Stack Technique
| Technologie | Version | Utilisation |
|---|---|---|
| Kotlin | 1.11 | Langage principal |
| Jetpack Compose | 2026.02.01 | UI moderne et réactive |
| Room Database | 2.6.0 | Base de données locale SQLite |
| WorkManager | 2.9.0 | Notifications et décrémentation automatique quotidienne |
| Navigation Compose | 2.7.4 | Navigation entre écrans |
| ViewModel | 2.6.2 | Architecture MVVM |
| Coroutines | 1.7.3 | Asynchrone et thread-safe |
📦 Structure du Projet
MedicAlert/
├── app/
│ ├── src/main/
│ │ ├── java/com/example/medicalert/
│ │ │ ├── model/ # Modèles de données (Medicament, Boite, Alerte)
│ │ │ ├── database/ # Room (AppDatabase, DAOs, Converters)
│ │ │ ├── repository/ # MedicamentRepository (logique métier)
│ │ │ ├── viewmodel/ # MedicamentViewModel
│ │ │ ├── worker/ # RuptureStockWorker (décrémentation + notifications)
│ │ │ ├── ui/
│ │ │ │ ├── screens/ # Écrans Compose
│ │ │ │ │ ├── AddMedicamentScreen.kt # Ajout de boîtes
│ │ │ │ │ ├── MedicamentListScreen.kt # Liste triée par urgence
│ │ │ │ │ ├── MedicamentDetailScreen.kt
│ │ │ │ │ └── SettingsScreen.kt
│ │ │ │ ├── components/ # Composants réutilisables (MedicamentCard, ColorPicker)
│ │ │ │ └── theme/ # Thème Material 3 et palette de couleurs
│ │ │ ├── MedicAlertApplication.kt
│ │ │ └── MainActivity.kt
│ │ └── AndroidManifest.xml
│ └── build.gradle.kts
├── gradle/
│ └── libs.versions.toml # Version Catalog
└── README.md
📥 Prérequis
- Android Studio (version Giraffe 2022.3.1 ou supérieure)
- Java JDK 17 (recommandé)
- Gradle 9.2.0 (inclus avec Android Studio)
- Android SDK 26+ (minSdk = 26)
🚀 Installation
1. Cloner le projet
git clone https://github.com/ton-username/MedicAlert.git
cd MedicAlert
2. Ouvrir dans Android Studio
- Lance Android Studio
- File > Open et sélectionnez le dossier
MedicAlert - Android Studio synchronisera automatiquement les dépendances Gradle
3. Configurer l'émulateur
- Tools > Device Manager > Create Virtual Device
- Sélectionnez Pixel 5 (ou autre)
- Choisissez Android 13 (Tiramisu) ou supérieur
- Cliquez sur Finish
4. Builder et lancer
- Cliquez sur Sync Project with Gradle Files (icône éléphant ⬆️)
- Build > Make Project (Ctrl+F9)
- Run > Run 'app' (Shift+F10)
- Sélectionnez votre émulateur ou appareil connecté
📱 Utilisation
🔹 Première utilisation
- L'application démarre sur l'écran "Mes Médicaments" (vide)
- Cliquez sur + pour ajouter votre première boîte de médicament
🔹 Ajouter une boîte de médicament
- Cliquez sur + (bouton flottant)
- Remplissez le formulaire :
- Nom du médicament : Saisissez le nom ou sélectionnez un médicament existant dans le menu déroulant
- Quantité dans la boîte : Nombre de comprimés/gélules dans cette boîte (ex: 30)
- Posologie : Nombre de comprimés par jour (pré-rempli si médicament existant, ex: 2)
- Couleur : Sélectionnez une couleur dans la palette visuelle (pré-remplie si médicament existant)
- Cliquez sur "Ajouter la boîte"
- Si le médicament existe déjà : une nouvelle boîte est ajoutée à ce médicament
- Si le médicament n'existe pas : un nouveau médicament est créé avec une première boîte
🔹 Modifier un médicament
- Dans la liste, cliquez sur ⋮ (3 points) à côté du médicament
- Sélectionnez "Modifier"
- Modifiez le nom, la posologie ou la couleur
- Cliquez sur "Enregistrer"
🔹 Supprimer un médicament
- Dans la liste, cliquez sur ⋮ (3 points) à côté du médicament
- Sélectionnez "Supprimer"
- Confirmez la suppression
🔹 Configurer les notifications
- Cliquez sur ⚙️ Paramètres (en haut à droite)
- Ajustez le seuil de notification avec le slider (1 à 30 jours)
- Les médicaments avec ≤ X jours de stock auront un fond rouge
🔹 Recevoir les notifications
- L'application vérifie automatiquement toutes les 24 heures et décrémente le stock
- Une notification est envoyée quand un médicament approche de la rupture
- Astuce : Pour tester immédiatement, modifiez le code dans
RuptureStockWorker.kt:PeriodicWorkRequestBuilder<RuptureStockWorker>( 1, // ⬅️ 1 minute au lieu de 24 heures TimeUnit.MINUTES )
🎨 Capture d'écran (à venir)
📊 Base de Données
Modèle de données
// Médicament
@Entity(tableName = "medicaments")
data class Medicament(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val nom: String,
val posologie: Int, // comprimés/jour
val couleur: String, // code hex (ex: #FF5722)
val dateCreation: LocalDate
)
// Boîte
@Entity(tableName = "boites")
data class Boite(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val medicamentId: Long, // Lien vers Medicament (ForeignKey)
val quantiteInitiale: Int,
val quantiteRestante: Int,
val datePeremption: LocalDate?
)
// Alerte (calculée)
data class Alerte(
val medicamentId: Long,
val nomMedicament: String,
val joursRestants: Int,
val dateRupture: LocalDate
)
Schémas de calcul
Stock total = Σ(boîtes.quantiteRestante) pour un médicament
Jours restants = Stock total ÷ Posologie
Si jours restants ≤ seuil :
→ Afficher alerte visuelle (fond rouge)
→ Envoyer notification push
Tri de la liste :
1. Par jours restants (ascendant) - le plus urgent en premier
2. Par nom (alphabétique) en cas d'égalité
🔧 Architecture
┌─────────────────────────────────────────────────┐
│ UI (Compose) │
├─────────────────────────────────────────────────┤
│ MedicamentListScreen MedicamentDetailScreen │
│ AddMedicamentScreen SettingsScreen │
├─────────────────────────────────────────────────┤
│ Composants: MedicamentCard, ColorPicker │
└───────────────────────────┬─────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ ViewModel │
├─────────────────────────────────────────────────┤
│ MedicamentViewModel (StateFlow, Coroutines) │
└───────────────────────────┬─────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ Repository │
├─────────────────────────────────────────────────┤
│ MedicamentRepository (logique métier) │
└───────────────────────────┬─────────────────────────┘
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Room Database │ │ WorkManager │ │ Preferences │
│ (SQLite) │ │ (Notifications) │ │ (Paramètres) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
🤝 Contribution
Les contributions sont les bienvenues !
- Fork le projet
- Créez une branche (
git checkout -b feature/ma-fonctionnalité) - Commitez vos changements (
git commit -m 'Ajout de ma fonctionnalité') - Poussez sur la branche (
git push origin feature/ma-fonctionnalité) - Ouvrez une Pull Request
📜 Licence
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
🙏 Remerciements
- Android Developer Documentation
- Jetpack Compose Team
- Room Database Team
- Stack Overflow Community
📧 Contact
Pour toute question ou suggestion :
- Email : ton-email@example.com
- GitHub : @ton-username
© 2024 MedicAlert - Gestion intelligente de vos médicaments



