Renseignements de session (Session Info)
Vue d'ensemble
La fonctionnalité renseignements de session permet de collecter des informations complémentaires auprès du client pour une séance (mariage, portrait, etc.). Elle est agnostique du type de session : les modèles et champs sont configurables par l’utilisateur et par l’admin.
- L’utilisateur définit des modèles de renseignements (listes de champs : texte, zone de texte, date, nombre, liste déroulante).
- Chaque session peut être rattachée à un modèle ; les réponses du client sont stockées et incluses dans l’export roadmap (PDF/DOCX).
- Le client remplit ou met à jour les renseignements depuis son portail client (lien magique).
- L’invitation à remplir peut être envoyée via un workflow (tâche dédiée) ou manuellement depuis la fiche séance.
Modèles de base (admin)
Les templates de base sont gérés uniquement en admin. Ils ne peuvent pas être supprimés (comportement analogue aux emails système / user).
Backend
- Module :
SessionInfoModule - Contrôleur admin :
DefaultSessionInfoTemplatesController- Base path :
GET/POST/PUT /api/admin/default-session-info-templates - Pas de
DELETEsur les templates ; les champs peuvent être supprimés (DELETE .../:id/fields/:fieldId).
- Base path :
- Tables :
default_session_info_templates,default_session_info_template_fields - Champs template :
name,default_session_type_id(optionnel, type de session associé),display_order - Champs de formulaire :
field_key(snake_case),label,field_type(TEXT, TEXTAREA, DATE, NUMBER, SELECT),options(pour SELECT),is_required,display_order
Frontend admin
- Routes :
/app-settings/default-session-info-templates(liste),/new,/:id/edit - Pages :
AdminDefaultSessionInfoTemplatesListPage,AdminDefaultSessionInfoTemplateFormPage - Navigation : Paramètres app > « Modèles de renseignements (base) »
- Sur la page d’édition : formulaire général (nom, ordre, type de session associé), liste des champs avec ajout / édition / suppression de champs (dialogue).
Modèles utilisateur
Chaque utilisateur possède ses propres modèles (session_info_templates, session_info_template_fields, owner_id = user).
Obtention des modèles
- À la création du compte : bootstrap utilisateur appelle la logique « create-defaults » pour copier les templates de base vers les modèles utilisateur.
- Bouton « Recréer les templates de base » :
POST /api/session-info/templates/create-defaults— recrée ou met à jour les copies à partir des templates de base actuels.
Backend utilisateur
- Base path :
GET/POST/PUT/DELETE /api/session-info/templates - Endpoints remarquables :
GET /api/session-info/templates/base?default_session_type_id=...— liste des templates de base (pour « partir d’un template de base »)POST /api/session-info/templates/create-defaults— recréer les templates utilisateur à partir des templates de basePOST /api/session-info/templates/from-base/:baseTemplateId— créer un modèle utilisateur à partir d’un template de basePOST/PUT/DELETE .../templates/:id/fields— CRUD des champs d’un modèle utilisateur
Frontend utilisateur
- Routes : Réglages > Données > « Modèles de renseignements » (
/settings/data/session-info-templates,/:id/edit) - Page d’édition : formulaire général (nom, ordre) + liste des champs avec ajout / édition / suppression (dialogue).
Rattachement à une session
- Champ session :
sessions.session_info_template_id(référence verssession_info_templates). - Formulaire de création/édition de s éance : sélecteur « Modèle de renseignements » (liste des modèles utilisateur).
- Données client : stockées dans
session_client_info(session_id, template_id,responsesJSONB).- Lecture/écriture :
GET/PUT /api/sessions/:id/client-info(côté utilisateur),GET/PUT /api/client-accounts/me/sessions/:sessionId/client-info(côté portail client).
- Lecture/écriture :
Workflow : invitation à remplir les renseignements
- Type d’action :
SEND_SESSION_INFO_INVITE(énumérationworkflow_task_actions.action_type). - Comportement : envoi d’un email au contact de la session avec un lien vers le portail client (onglet/paramètre « renseignements »). Le lien pointe vers la séance et ouvre directement le formulaire de renseignements.
- Configuration de la tâche :
configpeut conteniremail_template_id(optionnel) ; sinon le template système session-info-invite est utilisé. - Exécution :
WorkflowTasksExecutionService(brancheSEND_SESSION_INFO_INVITE) ; service dédiéSessionInfoInviteEmailService.sendInvite(). - Éditeur de workflow : dans le formulaire de tâche (type « Email automatique »), action « Inviter à remplir les renseignements » enregistrée comme
action_type: "SEND_SESSION_INFO_INVITE".
Workflow : déclencheur « Renseignements soumis »
- Type de déclencheur :
SESSION_INFO_SUBMITTED(tableworkflow_triggers.trigger_event). - Comportement : lorsque le client (ou l'utilisateur) enregistre les renseignements (
PUT .../client-info), les triggers actifs pour cet événement sont évalués ; si les conditions sont remplies, le workflow associé est appliqué à la session. Permet d'enchaîner une action après réception des renseignements (ex. email de confirmation, tâche de suivi). - Branchement :
SessionClientInfoServiceaprèsputClientInfo(back-office) etputClientInfoForClient(portail client).
Référence : WORKFLOW_TRIGGERS.md, WORKFLOWS_ARCHITECTURE.md.
Bouton manuel « Envoyer l’invitation »
- Endpoint :
POST /api/sessions/:id/send-session-info-invite - Conditions : la session appartient à l’utilisateur et possède un
session_info_template_id; le contact (ou un contact de la séance) a une adresse email. - Comportement : même envoi que la tâche workflow
SEND_SESSION_INFO_INVITE(lien portail + template email). - Frontend : bouton « Envoyer l’invitation à remplir les renseignements » sur la vue séance (hero / actions), affiché uniquement si un modèle de renseignements est attaché.
Portail client : formulaire de renseignements
- Page : vue séance du portail client (
ClientPortalSessionViewPage). - Section : carte « Renseignements » affichée si la session a un modèle de renseignements et que des champs sont définis.
- Comportement : formulaire dynamique (champs selon le modèle), sauvegarde via
PUT .../me/sessions/:sessionId/client-infoavec{ responses }.
Si aucune lignesession_client_infon’existe encore, l’API retourne tout de mêmetemplate_id,fieldsetresponses: {}pour afficher le formulaire (création à la première sauvegarde).
Export roadmap (PDF / DOCX)
- Service :
SessionRoadmapService; données client fournies parSessionClientInfoService.getClientInfo(). - Contenu : une section « Renseignements client » (table label / valeur) est ajoutée lorsque la session a un modèle de renseignements et que le client a renseigné au moins une valeur.
- DOCX : service Python
word_service.generate_roadmap()reçoitclient_info: [{ label, value }, ...]. - PDF :
SessionRoadmapPdfService.createRoadmapHtml()reçoitclientInfoet affiche la même section.
Détails export : EXPORT_SYSTEM.md.
Template email système « session-info-invite »
- Identifiant système :
email_session-info-invite(clé métier :session-info-invite). - Métadonnées :
default-templates-metadata.ts(noms FR/EN, sujets avec{{session.title}}). - Fichiers HTML :
backend/src/email-templates/templates/{fr-FR,en-US}/session-info-invite.html. - Variables :
{{contact.first_name}},{{sessionInfoLink}},{{session.title}}. - Base de données : une ligne dans
default_email_templatesest créée par la migration Liquibase0195_add_session_info_invite_default_email_template.
L’invitation (workflow ou bouton manuel) utilise ce template système lorsqu’il est résolu pour l’utilisateur ; sinon un sujet/corps par défaut (FR/EN) est utilisé.
Fichiers principaux
| Domaine | Fichiers |
|---|---|
| Backend session-info | backend/src/session-info/* (controllers, services, DTOs) |
| Backend sessions | session-info-invite-email.service.ts, session-roadmap.service.ts, session-roadmap-pdf.service.ts |
| Workflow | workflow-tasks-execution.service.ts, workflow-tasks-query.service.ts, workflow-task-actions.service.ts |
| Liquibase | 0193_create_session_info_tables, 0194_add_workflow_action_send_session_info_invite, 0195_add_session_info_invite_default_email_template |
| Frontend user | SessionInfoTemplatesPage, SessionInfoTemplateEditPage, useSessionInfoTemplates.ts |
| Frontend admin | AdminDefaultSessionInfoTemplatesPage/*, useDefaultSessionInfoTemplates.ts |
| Frontend client | ClientPortalSessionViewPage (section Renseignements + RenseignementsForm) |
| Python roadmap | python-service/app/services/word_service.py (paramètre client_info, section « Renseignements client ») |
Voir aussi
- EXPORT_SYSTEM.md — export roadmap et contenu renseignements
- WORKFLOW_TRIGGERS.md — déclencheurs et tâches workflow
- WORKFLOWS_ARCHITECTURE.md — architecture des workflows
- SYSTEM_EMAIL_TEMPLATES.md — templates email système