# Système de Messages SMS pour les Rappels IVT

Ce système permet d'envoyer automatiquement des messages SMS aux patients selon leur statut d'injection IVT.

## Structure des fichiers

### 1. `messages.config.ts`
Fichier de configuration contenant les messages SMS pour chaque catégorie de patients.

**Catégories disponibles :**
- `inTwoDays` : Patients avec injection prévue dans 2 jours
- `passedOneDay` : Patients avec injection passée d'1 jour
- `passedBetweenTwoAndSixDays` : Patients avec injection passée entre 2 et 6 jours
- `passedSevenDays` : Patients avec injection passée de 7 jours exactement
- `passedMoreThanSevenDays` : Patients avec injection passée de plus de 7 jours

**Personnalisation des messages :**
Vous pouvez utiliser des variables dans vos messages :
- `{{patientName}}` : Nom du patient (depuis date_ivt.first_name)
- `{{injectionDate}}` : Date d'injection formatée
- `{{phoneNumber}}` : Numéro de téléphone
- `{{medication}}` : Nom du traitement (depuis questionnaire_form_data.medication)
- `{{formLink}}` : Lien vers le formulaire de confirmation

### 2. `message.service.ts`
Service responsable de l'envoi des messages SMS selon les catégories.

**Méthodes principales :**
- `sendMessagesForAllGroups()` : Envoie des SMS pour tous les groupes
- `sendMessagesForGroup()` : Envoie des SMS pour un groupe spécifique
- `sendTestMessage()` : Envoie un SMS de test pour un patient

### 3. `cron.service.ts` (modifié)
Service cron mis à jour pour intégrer l'envoi automatique de SMS.

**Nouvelles fonctionnalités :**
- Envoi automatique de SMS lors du traitement quotidien
- Méthode `testMessageSending()` pour tester l'envoi

## Configuration

### Variables d'environnement requises
```bash
BREVO_API_KEY=your_brevo_api_key_here
ENABLE_REAL_SMS=false  # true pour envoyer vraiment, false pour mode test
```

### Modification des messages
Pour modifier les messages, éditez le fichier `messages.config.ts` :

```typescript
export const MESSAGE_CONFIG: MessageConfig = {
  inTwoDays: {
    message: "Votre message personnalisé ici avec {{patientName}}",
    sender: "AD+"
  },
  // ... autres catégories
};
```

## Endpoints de test

### 1. Tester le groupement des patients
```http
GET /cron/test-grouping
```
Retourne les groupes de patients sans envoyer de SMS.

### 2. Déclencher manuellement le traitement
```http
GET /cron/trigger-manual
```
Exécute le traitement complet (groupement + envoi de SMS).

### 3. Tester uniquement l'envoi de messages
```http
GET /cron/test-messages
```
Teste l'envoi de SMS sans déclencher le cron automatique.

## Fonctionnement automatique

Le système s'exécute automatiquement tous les jours à 12h00 (heure de Paris) via le cron job :
```typescript
@Cron('0 12 * * *', {
  name: 'processDateIvtRecords',
  timeZone: 'Europe/Paris',
})
```

## Mode Test vs Production

### Mode Test (`ENABLE_REAL_SMS=false`)
- Aucun SMS n'est envoyé réellement
- Les messages sont loggés dans la console
- Parfait pour tester sans dépenser de crédits
- Logs détaillés avec `[TEST MODE]`

### Mode Production (`ENABLE_REAL_SMS=true`)
- Les SMS sont envoyés réellement via Brevo
- Utilise vos crédits SMS
- Logs de succès/échec

## Logs

Le système génère des logs détaillés pour :
- Le nombre de patients dans chaque catégorie
- L'envoi des SMS (succès/échec) ou le contenu des messages en mode test
- Les erreurs éventuelles

## Exemple de message personnalisé

```typescript
inTwoDays: {
  message: "Bonjour {{patientName}}, votre injection IVT est prévue le {{injectionDate}}. N'oubliez pas d'aller chercher votre traitement {{medication}} à la pharmacie. AD+",
  sender: "AD+"
}
```

## Récupération des données

Le système récupère automatiquement :
- **Nom du patient** : depuis `date_ivt.first_name`
- **Numéro de téléphone** : depuis `date_ivt.phone_number`
- **Date d'injection** : depuis `date_ivt.next_injection_date`
- **Traitement** : depuis `questionnaire_form_data.medication` (via `date_ivt.questionnaire_id`)
- **Lien du formulaire** : actuellement un lien dummy (`https://example.com/form`)

Si le traitement n'est pas trouvé, le système utilise "votre traitement" par défaut.

**Note** : Le lien du formulaire doit être mis à jour dans le code avec le vrai lien quand il sera disponible.

## Sécurité

- Les messages sont envoyés via l'API Brevo (service professionnel)
- Les numéros de téléphone sont validés avant l'envoi
- Gestion des erreurs et retry automatique
- Logs détaillés pour le suivi
