Spécification fonctionnelle — Document vivant

Moteur de questionnaires dynamiques — pré-visite BC, suivi intermédiaire, satisfaction fin de programme. Envoyés par email, remplis en ligne par le propriétaire, résultats intégrés dans le dossier animal.

3
Types de questionnaire
7
Types de question
Email
Envoi automatique
PWA
Réponse mobile
RGPD
Consentement tracé
01Concept & objectifs
🎯
Pourquoi des questionnaires ?
Gagner du tempsAnamnèse BC collectée AVANT la visite — arriver informé
StandardiserMême grille pour tous les clients — données comparables
EngagerLe propriétaire se prépare — meilleure qualité séance
SuivreMesurer l'évolution entre les séances via scores
FidéliserQuestionnaire satisfaction = boucle de retour pro
📋
Principe technique
Modèle dynamiqueQuestions définies en BDD — pas de formulaire codé en dur
Templates3 templates système + questionnaires personnalisés pro
EnvoiEmail avec lien URL signée (7 jours) — pas de compte requis
RéponsesStockées en BDD, liées à l'animal et la séance
PortailAccessible aussi depuis le portail propriétaire
🔄
Cycle de vie
CréationPro crée ou choisit un template
EnvoiManuel ou automatique (J-2 avant séance)
RéponsePropriétaire répond en ligne (mobile ou PC)
NotificationPro notifié dès réception
AnalyseRésultats dans la fiche animal + comparaison
02Types de questionnaires
📝
Pré-BC — Questionnaire de pré-visite
DéclencheurAutomatique J-2 avant une séance de type BC
DestinatairePropriétaire de l'animal
ObjectifCollecter l'anamnèse avant la visite
Durée~10 minutes (20–25 questions)
SectionsIdentité animal · Alimentation · Comportement général · Problématique principale · Antécédents
RésultatPré-remplissage automatique de certains champs bc_fiche
Template systèmeAuto J-2
📊
Suivi intermédiaire
DéclencheurAutomatique J+2 après une séance de suivi RÉALISÉE
DestinatairePropriétaire de l'animal
ObjectifMesurer l'évolution comportementale entre séances
Durée~5 minutes (10–12 questions)
SectionsExercices réalisés · Difficultés rencontrées · Évolution perçue (score 1–10)
RésultatScore d'évolution visible dans l'historique séances
Template systèmeAuto J+2
🏆
Fin de programme — Satisfaction
DéclencheurManuel — pro l'envoie en clôturant un programme de suivi
DestinatairePropriétaire de l'animal
ObjectifNPS + satisfaction + témoignage
Durée~3 minutes (6–8 questions)
SectionsNote globale (NPS 0–10) · Points forts · Points d'amélioration · Autorisation témoignage
RésultatScore NPS dans le dashboard pro + témoignage (si autorisé)
Template systèmeManuel
✏️
Questionnaire personnalisé
CréationPro crée ses propres questions via l'interface
Types de questionsTous les types disponibles (voir section 03)
OrdreDrag & drop pour réorganiser
Questions conditionnellesAfficher une question si réponse X à la question Y
RéutilisableEnvoyable à plusieurs clients différents
LierÀ une séance, un animal, ou envoi libre
Plan Cabinet+Sprint 11
03Types de questions disponibles
TypeCode BDDDescriptionParamètresExemple
📝 Texte libre TEXT Saisie libre — court ou long min_length, max_length, multiline "Décrivez le comportement problématique"
🔵 Choix unique RADIO Sélection d'une option parmi N options[] (JSON), allow_other "Type d'alimentation : Croquettes / Pâtée / Barf / Mixte"
🔴 Choix multiple CHECKBOX Sélection de plusieurs options options[], min_select, max_select "Avec quels animaux vit-il ? (Chiens / Chats / NAC…)"
📊 Échelle SCALE Note sur une échelle numérique min, max, step, label_min, label_max "Intensité de l'agressivité : 0 = Jamais / 10 = Constant"
✅ Oui / Non BOOLEAN Réponse binaire oui/non label_true, label_false "Votre chien a-t-il déjà mordu ?"
📅 Date DATE Saisie d'une date min_date, max_date "Depuis quand observez-vous ce comportement ?"
⭐ Score NPS NPS Note 0–10 style Net Promoter Score label_question "Recommanderiez-vous notre cabinet ?"
04Maquette — Questionnaire pré-BC
Rendu sur mobile — accessible via lien email sans connexion. Barre de progression en haut. Sections paginées (1 section = 1 écran).
Questionnaire de pré-visite
Cabinet Canin Harmonie · Titan (Berger Allemand) · BC du 14/03/2026
Section 2/5 — Alimentation · 8 questions restantes
Question 4
Décrivez en quelques mots le comportement qui vous préoccupe le plus.*
Il tire fort en laisse et réagit aux autres chiens avec des aboiements et des sauts…
Question 5
Ce comportement se produit-il principalement :*
À l'extérieur uniquement
À la maison uniquement
Dans les deux contextes
En voiture
Question 6
Sur une échelle de 0 à 10, quelle est l'intensité de ce comportement ?*
0
1
2
3
4
5
6
7
8
9
10
Jamais / Faible Constant / Très intense
Question 7
Votre chien a-t-il déjà mordu ou tenté de mordre ?*
Oui
Non
← Précédent
Suivant →
Page de confirmation (après envoi)
Message"Merci ! Vos réponses ont été transmises à Cabinet Canin Harmonie."
RésuméDate de la séance + nom de l'animal
CTABouton "Voir le dossier de Titan" → portail propriétaire
Notification proEmail automatique au professionnel
⚠️
Lien expiré ou déjà répondu
Expiré (7 jours)"Ce lien a expiré. Contactez votre comportementaliste pour en recevoir un nouveau."
Déjà répondu"Vous avez déjà répondu à ce questionnaire le [date]. Merci !"
Pas de retry autoLe pro renvoie manuellement depuis la fiche séance
05BDD — Structure complète
questionnaire_templateModèles de questionnaires (système + personnalisés)
QT_ID
INT AUTO_INCREMENT
PK
QT_CODE
VARCHAR(50)
Code unique ex: PRE_BC, SUIVI_INTERMEDIAIRE, SATISFACTION, CUSTOM_xxx
QT_TYPE
ENUM
SYSTEME | CUSTOM — les templates SYSTEME ne sont pas modifiables
QT_TITRE
VARCHAR(200)
Titre affiché au propriétaire
QT_DESCRIPTION
TEXT NULL
Introduction / consignes affichées en début de questionnaire
QT_DECLENCHEUR
ENUM
MANUEL | AUTO_PRE_SEANCE | AUTO_POST_SEANCE — pour les templates système
QT_DECLENCHEUR_DELAI_J
INT NULL
Délai en jours (négatif = avant, positif = après) ex: -2 pour J-2
QT_TYPE_SEANCE_CODE
VARCHAR(30) NULL
Si rempli : déclenché uniquement pour ce type de séance (ex: BC)
QT_ACTIF
TINYINT(1)
1 = actif
USR_ID_CREATEUR
INT NULL
FK utilisateur pour templates CUSTOM — NULL pour SYSTEME
questionnaire_questionQuestions d'un template (ordonnées)
QQ_ID
INT AUTO_INCREMENT
PK
QT_ID
INT
FK → questionnaire_template
QQ_ORDRE
INT
Ordre d'affichage (1..n)
QQ_SECTION
VARCHAR(100) NULL
Groupe/section pour la pagination ex: "Alimentation", "Comportement"
QQ_TYPE
ENUM
TEXT | RADIO | CHECKBOX | SCALE | BOOLEAN | DATE | NPS
QQ_TEXTE
TEXT
Intitulé de la question
QQ_REQUIS
TINYINT(1)
1 = obligatoire
QQ_OPTIONS_JSON
JSON NULL
Options pour RADIO/CHECKBOX, paramètres SCALE (min,max,labels), etc.
QQ_CONDITION_JSON
JSON NULL
Affichage conditionnel ex: {"si": "QQ_ID:12", "vaut": "Oui"}
QQ_CHAMP_BC_CIBLE
VARCHAR(80) NULL
Si rempli : réponse copiée dans ce champ de bc_fiche automatiquement
questionnaire_envoiInstances envoyées — un envoi = un questionnaire pour un client/animal
QE_ID
BIGINT AUTO_INCREMENT
PK
QT_ID
INT
FK → questionnaire_template
TIE_ID
INT
FK → tiers (propriétaire destinataire)
ANI_ID
INT NULL
FK → animal concerné
SEA_ID
BIGINT NULL
FK → seance liée (si déclenché par séance)
QE_TOKEN_HASH
CHAR(64)
SHA-256 du token d'accès (UNIQUE)
QE_DATE_ENVOI
DATETIME
Date d'envoi de l'email
QE_DATE_EXPIRATION
DATETIME
Validité du lien (défaut: 7 jours)
QE_STATUT
ENUM
ENVOYE | OUVERT | PARTIEL | COMPLETE | EXPIRE
QE_DATE_REPONSE
DATETIME NULL
Date de complétion
QE_SCORE_GLOBAL
DECIMAL(5,2) NULL
Score calculé (pour questionnaires avec questions à pondération)
questionnaire_reponseRéponses individuelles par question
QR_ID
BIGINT AUTO_INCREMENT
PK
QE_ID
BIGINT
FK → questionnaire_envoi
QQ_ID
INT
FK → questionnaire_question
QR_VALEUR_TEXT
TEXT NULL
Réponse texte libre ou valeur serialisée (JSON pour CHECKBOX)
QR_VALEUR_NUM
DECIMAL(10,2) NULL
Valeur numérique (SCALE, NPS)
QR_VALEUR_BOOL
TINYINT(1) NULL
Valeur booléenne (BOOLEAN)
QR_VALEUR_DATE
DATE NULL
Valeur date (DATE)
QR_DATE_SAISIE
DATETIME
Horodatage de la saisie
Questions pré-BC — liste complète (template système)
#SectionQuestionTypeReq.Champ BC cible
1IdentitéQuel est le poids actuel de votre animal ?TEXTBC_POIDS
2IdentitéY a-t-il d'autres animaux au domicile ?OUI/NONBC_COHABITATION
3IdentitéSi oui, lesquels ? (Chiens / Chats / NAC / Autre)CHECKBOXBC_COHABITATION_TYPE
4IdentitéY a-t-il des enfants au domicile ?OUI/NONBC_ENFANTS
5AlimentationType d'alimentation principaleRADIOBC_ALIMENTATION
6AlimentationCombien de repas par jour ?RADIOBC_NB_REPAS
7AlimentationComportement autour de la gamelle (garde ressource ?)SCALE 0-5BC_GARDE_RESSOURCE
8ComportementDécrivez le comportement qui vous préoccupe le plusTEXTBC_PROBLEME_PRINCIPAL
9ComportementCe comportement se produit principalementRADIOBC_CONTEXTE_PROBLEME
10ComportementIntensité du comportement problématique (0–10)SCALE 0-10BC_INTENSITE_PROBLEME
11ComportementDepuis combien de temps observez-vous ce comportement ?RADIOBC_DUREE_PROBLEME
12ComportementVotre chien a-t-il déjà mordu ou tenté de mordre ?OUI/NONBC_MORSURE
13ComportementSi oui, décrivez les circonstances (conditionnel Q12=Oui)TEXTBC_MORSURE_DETAIL
14Mode de vieTemps seul par jour en moyenneRADIOBC_TEMPS_SEUL
15Mode de vieDurée quotidienne de promenadesRADIOBC_ACTIVITE_PHYSIQUE
16Mode de vieRéactions en voitureSCALE 0-5BC_VOITURE
17AntécédentsVotre animal a-t-il déjà suivi un programme de rééducation ?OUI/NONBC_ANTECEDENT_PROG
18AntécédentsTraitements médicaux ou médicaments en cours ?OUI/NONBC_MEDOC
19AntécédentsSi oui, lesquels ? (conditionnel Q18=Oui)TEXTBC_MEDOC_DETAIL
20AttentesQu'attendez-vous principalement de cette consultation ?TEXTBC_ATTENTES
21AttentesÊtes-vous disponible pour des exercices quotidiens ?SCALE 0-5BC_MOTIVATION
22AttentesInformations complémentaires (libre)TEXT
06Workflow envoi & réponse
🔄
Envoi automatique (pré-BC)
1
Séance BC créée
Trigger BDD ou cron quotidien détecte séance BC J+2.
Auto
2
Génération token + INSERT questionnaire_envoi
UUID v4 → SHA-256 stocké. Statut ENVOYE. Expiration J+7 depuis envoi.
Auto
3
Email au propriétaire
"Préparez votre visite ! Titan vous attend le 14/03." — lien vers questionnaire.
Auto
4
Propriétaire répond
Accès direct sans compte. Progression sauvegardée à chaque page. Statut PARTIEL → COMPLETE.
Client
5
Notification pro + pré-remplissage BC
Email : "Luc Rousseau a rempli le questionnaire de Titan." Champs bc_fiche pré-remplis depuis QQ_CHAMP_BC_CIBLE.
Auto
Relances automatiques
J-1 avant séanceSi statut ENVOYE (pas COMPLETE) : relance email automatique
1 seule relancePas de harcèlement — 1 envoi initial + 1 relance max
Relance manuellePro peut renvoyer manuellement depuis la fiche séance
ExpirationAprès J+7 le lien expire — statut → EXPIRE
📊
Indicateurs de suivi
Taux de réponse% questionnaires COMPLETE vs ENVOYE (dashboard pro)
Délai moyenTemps entre envoi et réponse
Questions abandonnéesIdentifier les questions trop difficiles (% PARTIEL)
07Intégration dans l'application
Côté professionnel
📋
Pages à créer
/app/questionnairesListe des templates + envois récents
/app/questionnaires/newCréer un template custom (builder drag & drop)
/app/questionnaires/:idDétail template + prévisualisation
/app/questionnaires/envoisTous les envois avec statuts
/app/questionnaires/envois/:idRéponses d'un envoi + export PDF
🔗
Points d'intégration existants
Fiche séanceSection "Questionnaire" : statut + lien réponses + bouton renvoyer
Fiche animalHistorique questionnaires + scores évolution
Formulaire BCBouton "Importer depuis questionnaire" — pré-rempli
DashboardWidget "Questionnaires en attente de réponse"
ParamètresActiver/désactiver envois auto par type de séance
Côté propriétaire (portail + lien direct)
🔗
Accès via lien email
URLportail.{sous-domaine}.Anim'Gest.fr/q/{token}
Sans connexionPas de JWT nécessaire — token suffit
Sauvegarde autoRéponses sauvegardées à chaque page — reprendre si fermé
Mobile firstLayout PWA — fonctionnel sans réseau une fois chargé
📱
Accès via portail propriétaire
SectionOnglet "Questionnaires" sur la page d'accueil portail
En attenteBadge rouge si questionnaire non complété
HistoriqueQuestionnaires complétés avec date et score
08Analyse des réponses
📊
Vue réponses (pro)
Toutes les réponsesTableau question par question avec réponse
ScoresQuestions SCALE et NPS agrégées visuellement
ExportPDF du questionnaire rempli ou CSV brut
ComparaisonÉvolution des scores entre 2 questionnaires de même type
🏆
NPS & satisfaction
Calcul NPSPromoteurs (9–10) − Détracteurs (0–6) = NPS score
DashboardNPS moyen du cabinet + évolution mensuelle
TémoignagesRéponses texte avec autorisation → extractibles pour site vitrine
🔗
Pré-remplissage BC
Automatique22 champs bc_fiche pré-remplis depuis les réponses
ModifiablePro peut toujours modifier les valeurs importées
Gain de temps~15 min d'anamnèse gagnées sur la séance
09API endpoints
MéthodeRouteDescriptionAuth
GET/api/questionnaires/templatesListe des templates (système + custom)JWT
GET/api/questionnaires/templates/:idDétail template + questionsJWT
POST/api/questionnaires/templatesCréer template customJWT
PUT/api/questionnaires/templates/:idModifier template custom (pas SYSTEME)JWT
GET/api/questionnaires/envoisListe des envois avec statutsJWT
POST/api/questionnaires/envoyerEnvoyer un questionnaire (manuel)JWT
POST/api/questionnaires/envois/:id/relancerRenvoyer le lien (nouveau token)JWT
GET/api/questionnaires/envois/:id/reponsesRéponses d'un envoi complétéJWT
GET/api/questionnaires/envois/:id/export-pdfExport PDF questionnaire rempliJWT
GET/api/q/:tokenCharger questionnaire par token (côté client)Public
POST/api/q/:token/repondreSoumettre les réponsesPublic
PUT/api/q/:token/repondreSauvegarder réponses partielles (reprise)Public
GET/api/dashboard/questionnairesKPIs : taux réponse, NPS, en attenteJWT
10Checklist implémentation
🗄
BDD
questionnaire_templateTODO Créer table
questionnaire_questionTODO Créer table
questionnaire_envoiTODO Créer table
questionnaire_reponseTODO Créer table
Seeds templates systèmeTODO 3 templates + 22+12+8 questions
Colonnes bc_fiche ciblesOK S24 60+ champs disponibles
⚙️
API & Frontend
Endpoints /api/questionnaires/*TODO 13 routes via _h56.use
Route publique /api/q/:tokenTODO Sans authentification
Cron envoi auto J-2/J+2TODO Script cron quotidien
Email template questionnaireTODO Template HTML SMTP
UI réponse mobileTODO Page /q/:token PWA
UI pro — vue réponsesTODO /app/questionnaires/envois/:id
Pré-remplissage bc_ficheTODO Import depuis réponses questionnaire
Plan requisTemplates système : tous plans
CustomCabinet+ uniquement
07Formulaire pré-qualification lead CRM
Concept
🔗
Lien public paramétrable
URLAnim'Gest.fr/formulaire/[token]
AccèsSans connexion — public
UsageRéseaux sociaux, site web, email
TokenUnique par tenant, permanent
RésultatCréation automatique lead dans le CRM
📋
Champs du formulaire
CoordonnéesNom, prénom, téléphone, email (obligatoires)
AnimalNom, race, âge/naissance, sexe (optionnels)
QuestionsParamétrables par le comportementaliste
CommentaireChamp libre — expression libre du prospect
ConsentementCheckbox RGPD obligatoire
BDD — 3 tables
🗄️
lead_formulaire
LFO_IDINT PK
LFO_TOKENCHAR(32) — lien public unique
LFO_TITREVARCHAR(150) — nom du formulaire
LFO_ACTIFTINYINT(1)
LFO_CREATEDDATETIME
🗄️
lead_formulaire_question
LFQ_IDINT PK
LFO_IDFK lead_formulaire
LFQ_ORDREINT
LFQ_LIBELLEVARCHAR(255)
LFQ_TYPEENUM texte / choix / echelle
LFQ_OBLIGATOIRETINYINT(1)
LFQ_OPTIONSJSON — options si choix
🗄️
lead_formulaire_reponse
LFR_IDBIGINT PK
LFO_IDFK lead_formulaire
LED_IDFK crm_lead (créé à la soumission)
LFR_NOMVARCHAR(100)
LFR_PRENOMVARCHAR(100)
LFR_TELVARCHAR(20)
LFR_EMAILVARCHAR(150)
LFR_ANIMAL_NOMVARCHAR(100)
LFR_ANIMAL_RACEVARCHAR(150)
LFR_ANIMAL_AGEVARCHAR(50)
LFR_REPONSESJSON — réponses aux questions
LFR_COMMENTAIRETEXT
LFR_IPVARCHAR(45) — traçabilité RGPD
LFR_DATEDATETIME
API — Routes publiques (sans auth)
GET /public/formulaire/:tokenRécupère le formulaire + questions
POST /public/formulaire/:tokenSoumet réponses → crée lead CRM automatiquement
GET /app/parametres/formulaire-leadConfiguration des questions (admin)
POST /app/parametres/formulaire-leadCréer/modifier question
GET /app/crm/leads/:id/reponse-formulaireVoir la réponse originale du prospect