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
| Type | Code BDD | Description | Paramètres | Exemple |
|---|---|---|---|---|
| 📝 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
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)
| # | Section | Question | Type | Req. | Champ BC cible |
|---|---|---|---|---|---|
| 1 | Identité | Quel est le poids actuel de votre animal ? | TEXT | ✓ | BC_POIDS |
| 2 | Identité | Y a-t-il d'autres animaux au domicile ? | OUI/NON | ✓ | BC_COHABITATION |
| 3 | Identité | Si oui, lesquels ? (Chiens / Chats / NAC / Autre) | CHECKBOX | BC_COHABITATION_TYPE | |
| 4 | Identité | Y a-t-il des enfants au domicile ? | OUI/NON | ✓ | BC_ENFANTS |
| 5 | Alimentation | Type d'alimentation principale | RADIO | ✓ | BC_ALIMENTATION |
| 6 | Alimentation | Combien de repas par jour ? | RADIO | ✓ | BC_NB_REPAS |
| 7 | Alimentation | Comportement autour de la gamelle (garde ressource ?) | SCALE 0-5 | BC_GARDE_RESSOURCE | |
| 8 | Comportement | Décrivez le comportement qui vous préoccupe le plus | TEXT | ✓ | BC_PROBLEME_PRINCIPAL |
| 9 | Comportement | Ce comportement se produit principalement | RADIO | ✓ | BC_CONTEXTE_PROBLEME |
| 10 | Comportement | Intensité du comportement problématique (0–10) | SCALE 0-10 | ✓ | BC_INTENSITE_PROBLEME |
| 11 | Comportement | Depuis combien de temps observez-vous ce comportement ? | RADIO | ✓ | BC_DUREE_PROBLEME |
| 12 | Comportement | Votre chien a-t-il déjà mordu ou tenté de mordre ? | OUI/NON | ✓ | BC_MORSURE |
| 13 | Comportement | Si oui, décrivez les circonstances (conditionnel Q12=Oui) | TEXT | BC_MORSURE_DETAIL | |
| 14 | Mode de vie | Temps seul par jour en moyenne | RADIO | ✓ | BC_TEMPS_SEUL |
| 15 | Mode de vie | Durée quotidienne de promenades | RADIO | ✓ | BC_ACTIVITE_PHYSIQUE |
| 16 | Mode de vie | Réactions en voiture | SCALE 0-5 | BC_VOITURE | |
| 17 | Antécédents | Votre animal a-t-il déjà suivi un programme de rééducation ? | OUI/NON | ✓ | BC_ANTECEDENT_PROG |
| 18 | Antécédents | Traitements médicaux ou médicaments en cours ? | OUI/NON | ✓ | BC_MEDOC |
| 19 | Antécédents | Si oui, lesquels ? (conditionnel Q18=Oui) | TEXT | BC_MEDOC_DETAIL | |
| 20 | Attentes | Qu'attendez-vous principalement de cette consultation ? | TEXT | ✓ | BC_ATTENTES |
| 21 | Attentes | Êtes-vous disponible pour des exercices quotidiens ? | SCALE 0-5 | ✓ | BC_MOTIVATION |
| 22 | Attentes | Informations 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.
Auto2
Génération token + INSERT questionnaire_envoi
UUID v4 → SHA-256 stocké. Statut ENVOYE. Expiration J+7 depuis envoi.
Auto3
Email au propriétaire
"Préparez votre visite ! Titan vous attend le 14/03." — lien vers questionnaire.
Auto4
Propriétaire répond
Accès direct sans compte. Progression sauvegardée à chaque page. Statut PARTIEL → COMPLETE.
Client5
Notification pro + pré-remplissage BC
Email : "Luc Rousseau a rempli le questionnaire de Titan." Champs bc_fiche pré-remplis depuis QQ_CHAMP_BC_CIBLE.
AutoRelances 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éthode | Route | Description | Auth |
|---|---|---|---|
| GET | /api/questionnaires/templates | Liste des templates (système + custom) | JWT |
| GET | /api/questionnaires/templates/:id | Détail template + questions | JWT |
| POST | /api/questionnaires/templates | Créer template custom | JWT |
| PUT | /api/questionnaires/templates/:id | Modifier template custom (pas SYSTEME) | JWT |
| GET | /api/questionnaires/envois | Liste des envois avec statuts | JWT |
| POST | /api/questionnaires/envoyer | Envoyer un questionnaire (manuel) | JWT |
| POST | /api/questionnaires/envois/:id/relancer | Renvoyer le lien (nouveau token) | JWT |
| GET | /api/questionnaires/envois/:id/reponses | Réponses d'un envoi complété | JWT |
| GET | /api/questionnaires/envois/:id/export-pdf | Export PDF questionnaire rempli | JWT |
| GET | /api/q/:token | Charger questionnaire par token (côté client) | Public |
| POST | /api/q/:token/repondre | Soumettre les réponses | Public |
| PUT | /api/q/:token/repondre | Sauvegarder réponses partielles (reprise) | Public |
| GET | /api/dashboard/questionnaires | KPIs : taux réponse, NPS, en attente | JWT |
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