📬 Portail Client · Planifié S68

Notifications Portail
Client

Envoi automatique d'emails (et SMS optionnel) aux clients lors des événements métier — devis disponible, facture émise, séance confirmée, rappel de rendez-vous.

Planifié S68
nodemailer existant
5 types de notifications
📬

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_TYPEDéclencheurVariables disponibles
RAPPEL_SEANCEJ-1 avant séance (cron à configurer)ANI_NOM · DATE · PRATICIEN · PORTAIL_URL
DEVIS_DISPONIBLEPUT /devis/:id/statut → ENVOYEDEVIS_NUM · MONTANT · PORTAIL_URL
FACTURE_DISPONIBLEPOST /factures ou POST /devis/:id/facturerFAC_NUM · MONTANT · PORTAIL_URL
SEANCE_CONFIRMEEPUT /seances/:id/statut → CONFIRMEANI_NOM · DATE · PORTAIL_URL
DOCUMENT_PARTAGEManuel depuis l'adminDOC_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éthodeRouteDescription
GET/portail/admin/notifications/configLire la configuration par type
PUT/portail/admin/notifications/config/:typeModifier la config d'un type
POST/portail/admin/notifications/envoyerDéclencher une notification manuellement
GET/portail/admin/notifications/historiqueHistorique des 50 dernières notifications

Déclencheurs automatiques

  • 📄
    Devis → ENVOYE — Dans PUT /devis/:id/statut, fire-and-forget envoyerNotification(tie_id, 'DEVIS_DISPONIBLE', {...})
  • 🧾
    Facture créée — Dans POST /factures et POST /devis/:id/facturer, fire-and-forget envoyerNotification(..., 'FACTURE_DISPONIBLE', {...})
  • 📅
    Séance confirmée — Dans PUT /seances/:id/statut si 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 utilitaire envoyerNotification() + 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