Skip to content

Import de questionnaires : Qualtrics, SurveyJS, LimeSurvey, XLSForm, REDCap, Beiwe et Network Canvas

Transformez un questionnaire Qualtrics, SurveyJS, LimeSurvey, XLSForm (ODK, KoboToolbox), REDCap, Beiwe ou Network Canvas en pages de questionnaire Potato, avec sa logique.

Nouveau dans la v2.12.0

potato import transforme un questionnaire construit dans un autre outil en pages de questionnaire Potato : les questions, les pages et la logique d'affichage et de masquage, traduite en questions conditionnelles et en règles de page de Potato.

SourceFichier-f
Qualtrics.qsf (Survey → Tools → Import/Export → Export Survey)qualtrics
SurveyJSLe JSON de questionnaire enregistré par SurveyJS Creatorsurveyjs
LimeSurvey.lss (Display/Export → Survey structure)limesurvey
XLSForm (ODK, KoboToolbox, SurveyCTO, Ona).xlsxxlsform
REDCapLe dictionnaire de données .csv (Designer → Download the current Data Dictionary), ou l'export des métadonnées par l'APIredcap
BeiweJSON de questionnaire, ou un export des paramètres de l'étudebeiwe
Network CanvasUn fichier de protocole .netcanvas, ou son protocol.jsonnetwork_canvas

Le format est détecté à partir du fichier, et -f le choisit explicitement. Aucun de ces fichiers ne contient de réponses ; l'import transfère donc l'instrument, et non les données recueillies avec lui.

Importer dans un nouveau projet

bash
potato import -i screener.qsf -o my-study/
python potato/flask_server.py start my-study/config.yaml -p 8000

Les pages de questionnaire sont placées dans my-study/surveys/, un fichier JSON par page. config.yaml les liste dans phases.order avant une phase annotation comportant une question provisoire et trois items provisoires, que vous remplacez par la véritable tâche.

Importer dans un projet existant

bash
potato import -i exit_survey.lss --into my-study/config.yaml --survey-slot poststudy --prefix exit_

Les pages sont placées dans surveys/ à côté de cette configuration, et une copie fusionnée est écrite sous le nom config.with-exit_survey-exit.yaml, avec le rapport dans IMPORT_REPORT.exit_survey-exit.md. La configuration d'origine n'est pas modifiée.

--prefix renomme chaque question et chaque page importées. Utilisez-le quand des noms de questions entreraient en conflit avec ceux du projet, car l'import s'arrête en cas de conflit. L'import s'arrête aussi plutôt que de remplacer des fichiers écrits par un import antérieur ; les modifications apportées à un questionnaire importé ne sont donc pas écrasées.

La copie fusionnée diffère de l'original par plus que les nouvelles pages. Si la configuration ne définit pas export_include_phase_data, la copie le règle sur true pour que les réponses au questionnaire soient exportées, et un commentaire en tête de la copie le signale. Les réponses au questionnaire peuvent contenir des données personnelles ; réglez-le donc sur false pour les exclure des exports. Les commentaires de l'original ne sont pas conservés, et les listes YAML sont réécrites en style bloc.

OptionSignification
-o DIRÉcrit un nouveau projet
--into CONFIGAjoute les pages à un projet existant et écrit une copie fusionnée
--survey-slotprestudy (par défaut, avant l'annotation) ou poststudy
--prefixPréfixe pour chaque nom de question et de page importées
--survey-languageLangue à prendre dans un questionnaire multilingue LimeSurvey, XLSForm ou Network Canvas

Ce qui est repris de chaque format

  • la formulation des questions (le HTML est réduit à du texte), les choix et les questions obligatoires ;
  • les pages, dans l'ordre ;
  • la logique d'affichage et de masquage sur les questions et les pages, traduite en display_logic et en show_when de page, y compris les ET, OU et NON imbriqués ;
  • la randomisation de l'ordre des choix (randomize_order) et de l'ordre des questions (randomize_questions) quand la source les comporte.

Les réponses aux questions à choix sont stockées sous forme du texte de l'option ; la logique traduite compare donc avec le texte des options, et non avec les codes de la source.

Tout ce que l'importateur n'a pas pu traduire est listé dans IMPORT_REPORT.md, avec l'emplacement et la raison, et les dix premiers éléments sont affichés. Une règle logique qui contient quoi que ce soit d'intraduisible est signalée en entier, et la question reste toujours visible au lieu de recevoir une partie de sa règle.

Qualtrics

Chaque bloc est une page, et chaque saut de page à l'intérieur d'un bloc en commence une autre. Les blocs de la corbeille sont ignorés.

  • Questions : choix multiple (unique, multiple, liste déroulante, NPS), Matrix Likert (en multirate), saisie de texte (une ligne, plusieurs lignes, validation numérique en number, formulaires en une question de texte par champ), curseurs, classement (ranking), somme constante (constant_sum) et texte descriptif (pure_display). Les choix « Other » avec une zone de texte reçoivent un champ de texte libre.
  • Logique : logique d'affichage avec la priorité de Qualtrics (ET avant OU au sein d'un ensemble de conditions, et entre les ensembles If, AndIf et ElseIf), sur les choix sélectionnés, les valeurs de saisie de texte, les valeurs de curseur et le nombre de sélections.
  • Survey flow : les branchements deviennent des règles de page, les branchements imbriqués étant combinés par ET. Un randomiseur qui affiche tous ses blocs devient un groupe de contrebalancement. Un randomiseur qui affiche l'une de plusieurs affectations de données intégrées à un même champ devient un facteur inter-sujets sous conditions, et la logique portant sur ce champ teste condition.<field>. Un End of Survey à l'intérieur d'un branchement, et la logique de saut vers la fin du questionnaire, deviennent exit_when.
  • Signalé, non importé : Loop & Merge (le bloc est importé une seule fois), le texte inséré dynamiquement (piped text), la logique sur les cellules de matrice, les conditions « is displayed », la logique d'affichage au niveau des choix, les quotas, les services web, les authentificateurs, la notation, la validation personnalisée, la demande de réponse (soft required), le JavaScript, et les types de questions sans équivalent dans Potato (cartes de chaleur, zones cliquables, téléversement de fichiers, signature, side-by-side, timing, meta info).

Venir de Qualtrics fait correspondre le reste d'une étude Qualtrics à Potato.

SurveyJS

  • Éléments : text (les saisies numériques en number), comment, radiogroup, checkbox, dropdown, tagbox, boolean, rating, ranking, matrix, multipletext (une question de texte par item), html et slider. Les panneaux sont aplatis dans la page, et le visibleIf d'un panneau s'applique à chacune de ses questions.
  • Logique : visibleIf sur les questions, les panneaux et les pages, y compris anyof, allof, contains, empty, les nombres de sélections {q.length}, ainsi que and, or et !. Un déclencheur complete devient un exit_when sur la page qui pose la dernière question qu'il teste.
  • Signalé, non importé : enableIf, requiredIf, choicesVisibleIf, les validateurs, les valeurs par défaut, les valeurs calculées et les questions d'expression, les déclencheurs setvalue, skip et runexpression, les matrices et panneaux dynamiques, les questions de fichier et de signature, et la logique qui appelle des fonctions.

LimeSurvey

Les deux structures de fichier s'importent : les exports anciens avec une colonne de langue sur chaque ligne, et les exports à partir de DBVersion 400, avec le texte dans des tables *_l10ns. La langue de base du questionnaire est utilisée, sauf indication contraire de --survey-language. Les groupes de questions deviennent des pages, dans l'ordre, et la pertinence d'un groupe devient le show_when de la page.

  • Questions : liste (radio, liste déroulante, avec commentaire), 5 points, oui/non, genre, choix multiple, les types tableau (en multirate), texte court et long, numérique, numérique multiple et texte court multiple (une question par sous-question), classement et affichage de texte.
  • Logique : pertinence en ExpressionScript sur les codes de questions, les codes de sous-questions et les noms SGQA, avec is_empty(), count() sur une question à choix multiple, ainsi que and, or et !, plus l'ancienne table conditions.
  • Signalé, non importé : les questions de date, d'équation, de téléversement de fichier et à double échelle ; les questions masquées ; la validation (preg, em_validation) ; les nombres minimal et maximal de réponses ; les filtres de tableau ; les groupes de randomisation ; les quotas ; les évaluations ; le texte inséré dynamiquement ; et if(), regexMatch() et .shown dans la logique.

XLSForm : ODK, KoboToolbox, SurveyCTO et Ona

ODK affiche une question par écran, sauf si un groupe en demande davantage, alors que Potato regroupe les questions d'une page ; l'import utilise donc le regroupement propre au formulaire. Chaque begin_group avec appearance: field-list ou table-list est une page, et les questions situées entre de tels groupes partagent une page. Le relevant d'un autre groupe est appliqué à chaque question qu'il contient, et son libellé devient un titre. Pour un formulaire comportant plusieurs colonnes de libellés, comme label::English et label::French, --survey-language French en choisit une ; sinon, la default_language du formulaire est utilisée.

XLSFormPotato
select_oneradio (appearance: minimal en liste déroulante)
select_multiplemultiselect
rankranking
integer, decimalnumber
rangeslider (parameters: start= end= step=)
texttext (appearance: multiline en zone de texte)
notepure_display
or_otherUne option « Other » avec un champ de texte
requiredlabel_requirement: {required: true}
relevantdisplay_logic, avec selected(), not(), count-selected(), string-length(), regex() et les comparaisons
parameters: randomize=truerandomize_order

Signalé, non importé : les points géographiques et autres types de localisation, la date et l'heure, les photos, l'audio, la vidéo, les codes-barres et les fichiers ; les champs calculate et hidden et la logique qui les utilise ; les répétitions (leurs questions sont importées une seule fois) ; constraint, choice_filter, default, read_only et le required conditionnel ; et les listes de choix externes. Un fichier .xls nécessite le paquet xlrd, ou bien enregistrez-le en .xlsx.

REDCap

Chaque instrument (formulaire) devient une page, dans l'ordre où le dictionnaire les liste, et les en-têtes de section deviennent des titres sur la page.

REDCapPotato
text avec validation entière ou numériquenumber avec le minimum et le maximum de la validation
text avec une autre validation, notestext, une zone de texte pour les notes
radio, dropdown, checkboxradio, select, multiselect
yesno, truefalseradio avec Yes/No ou True/False
sliderslider
descriptivepure_display
Groupe de matricemultirate, ou des questions séparées quand la logique teste une ligne
Champ obligatoirelabel_requirement: {required: true}
Logique de branchementdisplay_logic, avec les codes de choix associés au texte des options et and prioritaire sur or
@PLACEHOLDERLe texte indicatif de la zone de texte
@HIDDEN, @HIDDEN-SURVEYLaissés de côté, puisque les participants ne les voient jamais

Signalé, non importé : les champs calculés et la logique qui les utilise, les champs de fichier et SQL, les types de validation que Potato ne vérifie pas (dates, adresses e-mail et numéros de téléphone deviennent du texte simple avec une indication de format), les autres action tags, les valeurs insérées dynamiquement, et la logique qui utilise des fonctions (datediff, sum), des événements ([event][field]) ou le statut d'un formulaire. Les événements longitudinaux et les instruments répétés de REDCap n'ont pas d'équivalent dans Potato.

Potato n'est pas un système de saisie de données cliniques et ne dispose d'aucune piste d'audit du type de celle que REDCap fournit pour les études réglementées. Conservez les données de santé identifiantes dans REDCap, et utilisez Potato pour l'annotation et les questions qui l'entourent, par exemple des cliniciens qui étiquettent des notes ou des images.

Beiwe

Chaque questionnaire de l'export devient une page. Les questions de texte informatif, de curseur, de boutons radio, de cases à cocher et de réponse libre (numérique, une ligne, plusieurs lignes) s'importent, et la logique display_if est traduite, les réponses radio étant testées par position et les réponses à cases à cocher par appartenance. Les questions de date et d'heure, les questionnaires audio, les calendriers et les horaires sont signalés, car Potato ne programme pas de questionnaires, de même que la randomisation partielle.

Network Canvas

Un formulaire ego ou une étape d'information devient une page de questionnaire, et les étapes de réseau d'un même type de nœud deviennent une seule question ego_network sur une seule page, avec ses générateurs de noms, ses interprètes de noms, ses recensements de dyades et de force des liens, et son sociogramme. Les ressources de liste CSV ou JSON deviennent la liste du générateur de noms. La logique de saut sur l'ego devient show_when, et un saut vers la fin de l'entretien devient un exit_when sur la page précédente, avec le texte de l'écran de fin comme message.

Les étapes de réseau d'un même type de nœud partagent une page ; elles ne peuvent donc pas être sautées une à une, et une étape de réseau qui venait après d'autres pages passe devant elles. L'import signale chaque déplacement. Les règles de filtrage des nœuds et des arêtes, les formulaires d'arêtes entre alters, les étapes narratives et géospatiales, les variables de date et d'heure, et les éléments multimédias sont signalés et non importés. La page Réseaux égocentrés donne la correspondance étape par étape.

Pour aller plus loin

Pour les détails d'implémentation, consultez la documentation source.