Aller au contenu principal

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 DELETE sur les templates ; les champs peuvent être supprimés (DELETE .../:id/fields/:fieldId).
  • 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 base
    • POST /api/session-info/templates/from-base/:baseTemplateId — créer un modèle utilisateur à partir d’un template de base
    • POST/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 vers session_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, responses JSONB).
    • 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).

Workflow : invitation à remplir les renseignements​

  • Type d’action : SEND_SESSION_INFO_INVITE (énumération workflow_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 : config peut contenir email_template_id (optionnel) ; sinon le template système session-info-invite est utilisé.
  • Exécution : WorkflowTasksExecutionService (branche SEND_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 (table workflow_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 : SessionClientInfoService après putClientInfo (back-office) et putClientInfoForClient (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-info avec { responses }.
    Si aucune ligne session_client_info n’existe encore, l’API retourne tout de même template_id, fields et responses: {} pour afficher le formulaire (création à la première sauvegarde).

Export roadmap (PDF / DOCX)​

  • Service : SessionRoadmapService ; données client fournies par SessionClientInfoService.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çoit client_info: [{ label, value }, ...].
  • PDF : SessionRoadmapPdfService.createRoadmapHtml() reçoit clientInfo et 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_templates est créée par la migration Liquibase 0195_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​

DomaineFichiers
Backend session-infobackend/src/session-info/* (controllers, services, DTOs)
Backend sessionssession-info-invite-email.service.ts, session-roadmap.service.ts, session-roadmap-pdf.service.ts
Workflowworkflow-tasks-execution.service.ts, workflow-tasks-query.service.ts, workflow-task-actions.service.ts
Liquibase0193_create_session_info_tables, 0194_add_workflow_action_send_session_info_invite, 0195_add_session_info_invite_default_email_template
Frontend userSessionInfoTemplatesPage, SessionInfoTemplateEditPage, useSessionInfoTemplates.ts
Frontend adminAdminDefaultSessionInfoTemplatesPage/*, useDefaultSessionInfoTemplates.ts
Frontend clientClientPortalSessionViewPage (section Renseignements + RenseignementsForm)
Python roadmappython-service/app/services/word_service.py (paramètre client_info, section « Renseignements client »)

Voir aussi​