Vue d'ensemble
Le portail client dispose déjà de la table portail_client_notification (S63). S68 l'active en lui ajoutant une configuration par type, une fonction d'envoi nodemailer, et des déclencheurs automatiques sur les événements métier.
Email automatique
nodemailer déjà configuré en S63. Utilise
param_smtp existant. Templates HTML personnalisables avec variables.SMS optionnel
Infrastructure Twilio prévue — activable par type de notification via
PNC_CANAL_SMS. Nécessite configuration Twilio.Déclencheurs métier
Automatique lors des événements : devis envoyé, facture créée, séance confirmée. Fire-and-forget pour ne pas bloquer la route.
Configuration admin
Chaque type activable/désactivable depuis
/app/parametres/portail. Templates modifiables. Historique consultable.Types de notifications
| PCN_TYPE | Déclencheur | Variables disponibles |
|---|---|---|
| RAPPEL_SEANCE | J-1 avant séance (cron à configurer) | ANI_NOM · DATE · PRATICIEN · PORTAIL_URL |
| DEVIS_DISPONIBLE | PUT /devis/:id/statut → ENVOYE | DEVIS_NUM · MONTANT · PORTAIL_URL |
| FACTURE_DISPONIBLE | POST /factures ou POST /devis/:id/facturer | FAC_NUM · MONTANT · PORTAIL_URL |
| SEANCE_CONFIRMEE | PUT /seances/:id/statut → CONFIRME | ANI_NOM · DATE · PORTAIL_URL |
| DOCUMENT_PARTAGE | Manuel depuis l'admin | DOC_NOM · PORTAIL_URL |
Structure BDD
La table
portail_client_notification existe depuis S63. S68 ajoute uniquement la table de configuration portail_client_notification_config.Nouvelle table S68SQL
CREATE TABLE portail_client_notification_config (
PNC_ID INT AUTO_INCREMENT PRIMARY KEY,
PNC_TYPE VARCHAR(50) NOT NULL,
PNC_ACTIF TINYINT(1) DEFAULT 1,
PNC_CANAL_EMAIL TINYINT(1) DEFAULT 1,
PNC_CANAL_SMS TINYINT(1) DEFAULT 0,
PNC_DELAI_H INT DEFAULT 0,
PNC_TEMPLATE_OBJET VARCHAR(255),
PNC_TEMPLATE_CORPS TEXT,
UNIQUE KEY uk_type (PNC_TYPE)
);Routes API
| Méthode | Route | Description |
|---|---|---|
| GET | /portail/admin/notifications/config | Lire la configuration par type |
| PUT | /portail/admin/notifications/config/:type | Modifier la config d'un type |
| POST | /portail/admin/notifications/envoyer | Déclencher une notification manuellement |
| GET | /portail/admin/notifications/historique | Historique des 50 dernières notifications |
Déclencheurs automatiques
- 📄Devis → ENVOYE — Dans
PUT /devis/:id/statut, fire-and-forgetenvoyerNotification(tie_id, 'DEVIS_DISPONIBLE', {...}) - 🧾Facture créée — Dans
POST /facturesetPOST /devis/:id/facturer, fire-and-forgetenvoyerNotification(..., 'FACTURE_DISPONIBLE', {...}) - 📅Séance confirmée — Dans
PUT /seances/:id/statutsi statut → CONFIRME, fire-and-forget
Fire-and-forget : Les appels à
envoyerNotification() utilisent .catch(() => {}) pour ne jamais bloquer la route principale. Si l'email échoue, la route répond quand même avec succès.Déploiement S68
- 1️⃣Exécuter SQL :
CREATE TABLE portail_client_notification_config+ seeds 5 types dans HeidiSQL - 2️⃣Patch
custom-routes.ts: ajouter la fonction utilitaireenvoyerNotification()+ 4 routes admin - 3️⃣Patch
custom-routes.ts: ajouter les fire-and-forget dans les routes devis, factures, séances - 4️⃣Rebuild API → test POST /portail/admin/notifications/envoyer → email reçu sur nicolashermilly@gmail.com
- 5️⃣Rebuild frontend si ajout onglet Notifications dans
/app/parametres/portail