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.
| Source | Fichier | -f |
|---|---|---|
| Qualtrics | .qsf (Survey → Tools → Import/Export → Export Survey) | qualtrics |
| SurveyJS | Le JSON de questionnaire enregistré par SurveyJS Creator | surveyjs |
| LimeSurvey | .lss (Display/Export → Survey structure) | limesurvey |
| XLSForm (ODK, KoboToolbox, SurveyCTO, Ona) | .xlsx | xlsform |
| REDCap | Le dictionnaire de données .csv (Designer → Download the current Data Dictionary), ou l'export des métadonnées par l'API | redcap |
| Beiwe | JSON de questionnaire, ou un export des paramètres de l'étude | beiwe |
| Network Canvas | Un fichier de protocole .netcanvas, ou son protocol.json | network_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
potato import -i screener.qsf -o my-study/
python potato/flask_server.py start my-study/config.yaml -p 8000Les 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
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.
| Option | Signification |
|---|---|
-o DIR | Écrit un nouveau projet |
--into CONFIG | Ajoute les pages à un projet existant et écrit une copie fusionnée |
--survey-slot | prestudy (par défaut, avant l'annotation) ou poststudy |
--prefix | Préfixe pour chaque nom de question et de page importées |
--survey-language | Langue à 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_logicet enshow_whende 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 ennumber, 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,AndIfetElseIf), 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 testecondition.<field>. Un End of Survey à l'intérieur d'un branchement, et la logique de saut vers la fin du questionnaire, deviennentexit_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 levisibleIfd'un panneau s'applique à chacune de ses questions. - Logique :
visibleIfsur les questions, les panneaux et les pages, y comprisanyof,allof,contains,empty, les nombres de sélections{q.length}, ainsi queand,oret!. Un déclencheurcompletedevient unexit_whensur 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éclencheurssetvalue,skipetrunexpression, 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 queand,oret!, plus l'ancienne tableconditions. - 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 ; etif(),regexMatch()et.showndans 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.
| XLSForm | Potato |
|---|---|
select_one | radio (appearance: minimal en liste déroulante) |
select_multiple | multiselect |
rank | ranking |
integer, decimal | number |
range | slider (parameters: start= end= step=) |
text | text (appearance: multiline en zone de texte) |
note | pure_display |
or_other | Une option « Other » avec un champ de texte |
required | label_requirement: {required: true} |
relevant | display_logic, avec selected(), not(), count-selected(), string-length(), regex() et les comparaisons |
parameters: randomize=true | randomize_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.
| REDCap | Potato |
|---|---|
text avec validation entière ou numérique | number avec le minimum et le maximum de la validation |
text avec une autre validation, notes | text, une zone de texte pour les notes |
radio, dropdown, checkbox | radio, select, multiselect |
yesno, truefalse | radio avec Yes/No ou True/False |
slider | slider |
descriptive | pure_display |
| Groupe de matrice | multirate, ou des questions séparées quand la logique teste une ligne |
| Champ obligatoire | label_requirement: {required: true} |
| Logique de branchement | display_logic, avec les codes de choix associés au texte des options et and prioritaire sur or |
@PLACEHOLDER | Le texte indicatif de la zone de texte |
@HIDDEN, @HIDDEN-SURVEY | Laissé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
- Venir de Qualtrics - Les fonctions d'une étude Qualtrics mises en correspondance avec Potato
- Flux de travail multi-phases - Pages de questionnaire, questions conditionnelles et ordre des phases
- Déroulement de l'expérience - Conditions, règles de page, exclusions et contrebalancement
- Importer des projets - Formats d'annotation, projets complets et autres imports
- Instruments de questionnaire - Questionnaires publiés appelés par leur nom
Pour les détails d'implémentation, consultez la documentation source.