Aller au contenu principal

Configuration JSON

Référence complète du fichier de configuration JSON : structure racine, types de questions, validations, conditionnelles et profils de signature.


Localisation et valeurs par défaut​

La plateforme suppose la Colombie par défaut pour plusieurs types. Certains acceptent une surcharge via l'attribut country ; d'autres sont fixes.

TypePar défautSurcharge
currencyCOPNon pris en charge — toujours formaté en pesos colombiens
nitColombieNon pris en charge — format NIT colombien fixe (XXXXXX-X)
identificationCOcountry: "MX" | "CL" | "SV" | ... (voir la section Identification ci-dessous)
phoneDétection automatiquecountry: "co" | "mx" | ... (ISO2 en minuscules)
departmentCOcountry: "CO" | "MX" | ...
dateEspagnol, calendrier grégorienNon localisable — s'affiche comme "15 de enero de 2024"
Marchés non colombiens

Si votre cas d'usage nécessite le dollar américain ou un autre format de devise, currency n'est pas le bon type : utilisez number et formatez manuellement le préfixe dans le HTML. De même, nit ne s'applique qu'à la Colombie ; pour les identifiants fiscaux d'autres pays, utilisez text avec un regex approprié.


Propriétés principales de l'objet racine​

{
"name": "Ma première automatisation",
"description": "Contrat de service avec un seul signataire, pour l'équipe commerciale",
"preBuild": false,
"config": [],
"signatureProfile": [],
"sign": []
}
PropriétéTypeObligatoireDescription
namestringObligatoireNom de l'automatisation
descriptionstringFacultatifTexte décrivant le modèle, jusqu'à 500 caractères. À titre informatif uniquement : GET /template le retourne et il n'affecte pas le flux de remplissage
configarrayObligatoireTableau des questions posées à l'utilisateur
signatureProfilearrayObligatoireDéfinition des signataires et des approbateurs
signarrayObligatoireNoms des questions obligatoires
preBuildbooleanFacultatifSi true, inclut un pré-remplissage automatique
filesarrayFacultatifPièces jointes demandées aux participants avec package: true. Voir Pièces jointes
buildnumberGéré par le serveurVersion du cache du SDK. Ne l'envoyez pas : l'API rejette la requête si vous l'incluez. Le serveur l'incrémente automatiquement lorsque vous mettez à jour le modèle, afin d'invalider le cache du SDK chez les clients.

Propriété preBuild - Pré-remplissage automatique​

Lorsque preBuild vaut true, vous devez inclure preBuildData. Ce champ permet le pré-remplissage automatique du modèle : certains champs sont complétés à l'avance afin que l'utilisateur n'ait plus qu'à terminer de remplir le document.

Dans preBuildData, vous déclarez les questions qui seront pré-remplies dans cette première étape. Le dernier élément du tableau doit être l'e-mail de l'utilisateur final, qui recevra la demande de remplissage par e-mail.

{
"preBuild": true,
"preBuildData": ["buyer_name", "buyer_email", "end_user_email"]
}

Pièces jointes (files)​

Liste les documents demandés au participant ayant package: true dans signatureProfile : une copie de sa pièce d'identité, un certificat, un justificatif.

"files": [
{ "name": "Copie de la pièce d'identité", "approve": "pending" },
{ "name": "Attestation bancaire", "approve": "pending", "optional": true },
{ "name": "Pièce d'identité du cosignataire", "approve": "pending", "preReq": "has_cosigner" }
]
NomTypeDescription
nameString obligatoireNom du document, tel que le participant le voit.
approveString obligatoireToujours "pending".
optionalBoolean facultatiftrue permet au participant de continuer sans le téléverser. Sans optional, la pièce jointe est obligatoire.
preReqString facultatifNom d'une question clausula oui/non (options s et n). La pièce jointe n'est demandée que si la réponse est s.

config et ses types de questions​

Dans cette section, on ajoute toutes les questions que l'utilisateur doit remplir pour générer le document à signer.

info
  • Chaque question de config est un objet doté de propriétés spécifiques. Elle exige toujours name, description et type.
  • Les questions peuvent aussi avoir une valeur par défaut en ajoutant l'attribut value (pertinent uniquement pour clausula, select et searchlist).
{
"name": "unique_identifier",
"description": "Texte que l'utilisateur voit",
"type": "question_type"
}

Récapitulatif des types de questions​

TypeInterface de saisieValeur stockéeRendu dans le span
texttexte libre"str"tel quel
nametexte"str"MAJUSCULES
emaile-mail"lower@x.com"tel quel
phonesaisie de téléphone international"+573001234567"tel quel
numbersaisie numérique"50000""50,000" (ou avec le texte en toutes lettres si addText)
currencysaisie numérique"50000""$50,000 (CINQUANTE MILLE PESOS)"
datesélecteur de date"2024-01-15""15 de enero de 2024"
nitsaisie numérique"9001234567""900123456-7" (formaté automatiquement)
identificationpays + type de document + numéro"CC 1084340519" (deux parties)chaîne complète
departmentliste déroulante territoriale"Antioquia"tel quel
selectliste déroulante simple"option_value"options[i].label correspondant
searchlistliste déroulante avec recherche"option_value"options[i].label correspondant
clausulaliste déroulante avec spans conditionnels"option_value"affiche <span name="question_value">
checkcases à cocher multiplestableau select: ["a","b"]"a, b" (séparés par des virgules)
imagetéléversement de fichierdata URI en base64<img src="..." class="object-contain"/>
signaturesignature dessinée / saisiebase64 ou chaîne<img> ou <span class="text-sign">
requestsaisie de texte + validation externe"str"tel quel (plus les champs pré-remplis par le service)

request nécessite une intégration back-end supplémentaire et est traité dans sa propre page : voir Type Request.


Texte libre (text)​

Accepte n'importe quel texte sans restriction.

{
"name": "product_description",
"description": "Décrivez brièvement le produit",
"type": "text"
}

Prend en charge les validations maxlength et regex (voir Propriétés de validation).


Nom (name)​

Identique à text, mais convertit automatiquement en majuscules dans le HTML.

{
"name": "buyer_name",
"description": "Saisissez votre nom complet",
"type": "name"
}
info

Exemple de résultat :

  • L'utilisateur saisit : john doe
  • Affiché dans le HTML : JOHN DOE

Nombre (number)​

N'accepte que des valeurs numériques. Rendu avec des séparateurs de milliers.

{
"name": "items_quantity",
"description": "Combien d'articles souhaitez-vous ?",
"type": "number"
}

Avec le texte en toutes lettres (addText) :

{
"name": "items_quantity",
"description": "Combien d'articles souhaitez-vous ?",
"type": "number",
"addText": true
}

Prend en charge les bornes numériques min et max.

addTextL'utilisateur saisit 5000Rendu
(omis)50005,000
true50005,000 (CINQ MILLE)

Devise (currency)​

Formate automatiquement en devise (pesos colombiens par défaut) avec le montant en toutes lettres.

{
"name": "total_amount",
"description": "Saisissez la valeur en pesos",
"type": "currency"
}

Sans texte en toutes lettres (removeText) :

{
"name": "total_amount",
"description": "Saisissez la valeur en pesos",
"type": "currency",
"removeText": true
}
removeTextL'utilisateur saisit 50000Rendu
(omis)50000$50,000 (CINQUANTE MILLE PESOS)
true50000$50,000

E-mail (email)​

Vérifie qu'il s'agit d'un e-mail valide.

{
"name": "buyer_email",
"description": "Saisissez votre adresse e-mail",
"type": "email"
}

Téléphone (phone)​

Valide le numéro de téléphone selon l'indicatif de pays sélectionné.

{
"name": "buyer_phone",
"description": "Saisissez votre numéro de téléphone",
"type": "phone"
}

Spécifique à un pays :

{
"name": "buyer_phone",
"description": "Saisissez votre téléphone colombien",
"type": "phone",
"country": "co"
}

Lorsque country est défini, la saisie est verrouillée sur l'indicatif de ce pays.


Date (date)​

Affiche un calendrier pour sélectionner une date.

{
"name": "delivery_date",
"description": "Sélectionnez la date de livraison",
"type": "date"
}

À partir d'aujourd'hui (min: "now") :

{
"name": "delivery_date",
"description": "Sélectionnez la date de livraison",
"type": "date",
"min": "now"
}

Avec min: "now", le calendrier s'ouvre avec la date du jour déjà sélectionnée et n'autorise pas les dates passées.

Prend en charge min, max, subYears, subDays et afterSubYears pour les contraintes de plage. Voir Propriétés de validation.


NIT (nit)​

Saisie de l'identifiant fiscal colombien. Se formate automatiquement en XXXXXX-X dans le document rendu.

{
"name": "company_tax_id",
"description": "Saisissez le NIT de l'entreprise",
"type": "nit"
}
L'utilisateur saisitRendu
9001234567900123456-7
8301234830123-4

Identification (identification)​

Saisie structurée de l'identification du signataire. L'utilisateur choisit un pays, un type de document et saisit le numéro. La valeur stockée comporte deux parties séparées par un espace : "{ID_TYPE} {NUMBER}".

{
"name": "buyer_id",
"description": "Saisissez l'identification de l'acheteur",
"type": "identification",
"country": "CO"
}
Action de l'utilisateurValeur stockéeRendu dans le span
Choisit CC, saisit 1084340519"CC 1084340519"CC 1084340519
Choisit CE, saisit A0123456"CE A0123456"CE A0123456
Quand l'utiliser

Utilisez identification pour les documents des signataires plutôt que text ou number. Le moteur d'exécution scinde la valeur en identificationType et identification lors de la composition du profil du signataire, ce qui est indispensable pour les flux de vérification d'identité.

Pays pris en charge : Colombie (CC, CE, PPT, DL, PASSPORT), Mexique (CURP, PASSPORT), Chili (RUT, RUN, PASSPORT), Salvador (DUI, PASSPORT), Costa Rica (CCCR, PASSPORT), Pérou (DNI, PASSPORT), Uruguay (CI, PASSPORT), Venezuela (CI, PASSPORT), Honduras (DNI, PASSPORT), Panama (CI, PASSPORT), Espagne (DNI, PASSPORT), Équateur (CI, PASSPORT), Aruba (CI, PASSPORT).


Département (department)​

Liste déroulante des divisions territoriales (départements / États) du pays configuré. La Colombie par défaut.

{
"name": "buyer_department",
"description": "Sélectionnez le département de l'acheteur",
"type": "department",
"country": "CO"
}

La valeur stockée est le nom complet du département (par ex. "Antioquia").


Liste simple (select)​

Liste déroulante simple. Ne déclenche pas la visibilité conditionnelle d'autres questions.

{
"name": "document_type",
"description": "Sélectionnez le type de document",
"type": "select",
"value": "id_card",
"options": [
{ "name": "Carte d'identité nationale", "label": "Carte d'identité nationale", "value": "id_card" },
{ "name": "Carte d'étranger", "label": "Carte d'étranger", "value": "foreign_id" }
]
}

HTML correspondant :

<span name="document_type">_______________</span>

Le SDK place automatiquement le label de l'option dans le span.


Liste avec recherche (searchlist)​

Liste déroulante avec champ de recherche. Identique à select en JSON — seule l'expérience utilisateur diffère. À utiliser lorsque la liste compte plus d'environ 10 options.

{
"name": "country_of_birth",
"description": "Sélectionnez votre pays de naissance",
"type": "searchlist",
"options": [
{ "name": "Argentine", "label": "Argentine", "value": "AR" },
{ "name": "Brésil", "label": "Brésil", "value": "BR" }
]
}

Le HTML est un unique <span name="country_of_birth">, comme pour select.


Liste de clauses (clausula)​

Liste déroulante avec options prédéfinies. Permet de limiter d'autres questions via prereq.

{
"name": "document_type",
"description": "Sélectionnez le type de document",
"type": "clausula",
"value": "id_card",
"options": [
{ "name": "Carte d'identité nationale", "value": "id_card" },
{ "name": "Carte d'étranger", "value": "foreign_id" },
{ "name": "Passeport", "value": "passport" }
]
}

HTML correspondant :

<span name="document_type_id_card">Carte d'identité</span>
<span name="document_type_foreign_id" hidden>Carte d'étranger</span>
<span name="document_type_passport" hidden>Passeport</span>

Règles :

  • Un <span> est créé par option, avec name = {question_name}_{option_value}.
  • L'élément correspondant à la value par défaut ne doit pas avoir hidden.
  • Toutes les autres options doivent avoir hidden.
  • Le SDK bascule la visibilité lorsque l'utilisateur choisit d'autres options.

Cases à cocher multiples (check)​

Champ à choix multiples rendu sous forme de liste séparée par des virgules.

{
"name": "included_services",
"description": "Sélectionnez les services inclus",
"type": "check",
"values": ["cleaning", "maintenance", "insurance"]
}
values est un tableau de chaînes — PAS options avec des objets

Le type check est le seul à utiliser un tableau plat values: ["a", "b"] au lieu d'une structure options: [{...}]. Utiliser options ici n'affichera rien.

Résultat rendu : <span name="included_services">cleaning, maintenance</span> (si l'utilisateur coche ces deux options).


Image (image)​

Champ de téléversement de fichier (PNG ou JPEG, 8 Mo maximum). La valeur stockée est une data URI en base64, et le span est remplacé par un élément <img>.

{
"name": "id_photo",
"description": "Téléversez une photo de votre pièce d'identité",
"type": "image"
}

HTML correspondant :

<span name="id_photo">___________</span>

Une fois rempli, le span devient :

<span name="id_photo"><img src="data:image/png;base64,..." class="object-contain"/></span>

Signature (signature)​

Capture une signature dessinée sur canvas ou saisie avec une police de type signature. Toujours obligatoire (ne peut pas être laissée vide).

{
"name": "buyer_signature",
"description": "Dessinez votre signature",
"type": "signature",
"allow": ["draw", "font"]
}

Le tableau allow restreint les modes de saisie disponibles pour l'utilisateur :

  • ["draw"] — uniquement dessinée à la main sur canvas
  • ["font"] — uniquement saisie avec une police de type signature
  • ["draw", "font"] — les deux sont autorisés
Type signature vs signature du signataire

Ceci est différent de l'emplacement de signature utilisé par signatureProfile. Utilisez les questions signature lorsque vous avez besoin d'une seconde signature en ligne dans le corps du document (par ex. des initiales sur chaque clause). Pour la signature principale du signataire, utilisez <div name="buyer" class="sign-margin"> avec signatureProfile — voir Configuration HTML.

L'exception est la signature sur place : si vous référencez la question depuis signatureProfile[].signature, cette signature devient celle du signataire, capturée dans le formulaire. Voir Profils de signature.


Request (request)​

Champ de texte qui valide sa valeur auprès d'un endpoint HTTP externe et utilise la réponse pour pré-remplir d'autres champs du document.

Traité dans une page dédiée car il nécessite une intégration back-end : Type Request →.


Propriétés de validation​

Tous les types de questions prennent en charge un ensemble de propriétés de validation facultatives pour contraindre la saisie de l'utilisateur.

PropriétéTypeS'applique àDescription
maxlengthNumber (entier ≥ 1)text, name, email, nit, request, phoneNombre maximal de caractères.
regexStringtoute saisie de texteRegex JavaScript à laquelle la valeur doit correspondre. Exemple : "^[A-Z]{3}\\d{3}$"
minString ou Numbernumber, currency, datePour number et currency, valeur minimale. Pour date, date minimale ("2024-01-15") ou "now" : présélectionne la date du jour et bloque les dates passées.
maxString ou Numbernumber, currency, datePour number et currency, valeur maximale. Pour date, date maximale ("2024-12-31").
subYearsNumber (entier ≥ 0)dateÂge minimal en années (par ex. 18 signifie que la date doit remonter à au moins 18 ans).
subDaysNumber (entier ≥ 0)dateLa date doit être antérieure d'au moins ce nombre de jours à aujourd'hui.
afterSubYearsNumber (entier ≥ 0)dateLa date ne peut pas être antérieure à ce nombre d'années (par ex. 5 bloque les dates de plus de 5 ans).
addTextBooleannumberAjoute la valeur écrite en toutes lettres : 5.000 (CINCO MIL). Voir Nombre.
countryStringphone, identification, departmentCode pays ISO2 (par ex. "CO", "MX").
allowArray<String>signatureModes de saisie autorisés : "draw", "font", ou les deux. Au moins un. Voir Signature.
groupQuestionObjectnumberValide que la somme d'un groupe de champs ne dépasse pas un maximum : id et max obligatoires, errorMessage facultatif. Voir ci-dessous.
Un attribut inconnu fait rejeter tout le modèle

L'API valide chaque question par rapport à une liste fermée d'attributs : ceux de ce tableau, plus name, description, type, value, help, options, select, values, endpoint, removeText, prereq et prereqOptionals. Si une question comporte un autre attribut —un nom mal orthographié, comme maxLength—, POST et PUT /template répondent 400 et n'enregistrent rien. Il en va de même pour une valeur hors plage, comme un maxlength de 0 ou un allow vide.

Exemple : date de naissance réservée aux adultes​

{
"name": "birth_date",
"description": "Saisissez votre date de naissance",
"type": "date",
"subYears": 18
}

Exemple : code alphanumérique strict​

{
"name": "reference_code",
"description": "Saisissez le code de référence (format ABC-1234)",
"type": "text",
"regex": "^[A-Z]{3}-\\d{4}$",
"maxlength": 8
}

Exemple : groupQuestion (la somme des champs doit être ≤ 100)​

[
{
"name": "owner_percentage",
"description": "Pourcentage du propriétaire",
"type": "number",
"groupQuestion": {
"id": "ownership",
"max": 100,
"errorMessage": "Les pourcentages ne doivent pas dépasser 100 %"
}
},
{
"name": "partner_percentage",
"description": "Pourcentage de l'associé",
"type": "number",
"groupQuestion": {
"id": "ownership",
"max": 100,
"errorMessage": "Les pourcentages ne doivent pas dépasser 100 %"
}
}
]

Toutes les questions partageant le même groupQuestion.id sont validées ensemble : leur somme ne doit pas dépasser max.


Questions conditionnelles avec prereq​

La propriété prereq contrôle la visibilité conditionnelle d'une question :

  • k (key) : nom de la question de référence
  • v (value) : valeur requise dans la question de référence pour afficher la question courante

Structure​

"prereq": [
{ "k": "reference_question_name", "v": "required_value" }
]

Plusieurs entrées sont combinées avec un ET (toutes doivent correspondre).

Important

La question référencée dans k doit être de type clausula. Seul clausula déclenche la visibilité conditionnelle.

Exemple complet​

[
{
"name": "document_type",
"description": "Sélectionnez le type de document de l'acheteur",
"type": "clausula",
"value": "id_card",
"options": [
{ "name": "Carte d'identité nationale", "value": "id_card" },
{ "name": "Carte d'étranger", "value": "foreign_id" }
]
},
{
"name": "id_card_number",
"description": "Saisissez le numéro de la carte d'identité nationale",
"type": "number",
"prereq": [{ "k": "document_type", "v": "id_card" }]
},
{
"name": "foreign_id_number",
"description": "Saisissez le numéro de la carte d'étranger",
"type": "number",
"prereq": [{ "k": "document_type", "v": "foreign_id" }]
}
]

prereqOptionals — logique OU​

Pour afficher une question lorsque la référence correspond à l'une de plusieurs valeurs, utilisez prereqOptionals avec prereq. Chaque entrée a le format {question_name}_{option_value}.

{
"name": "company_tax_id",
"description": "NIT de l'entreprise",
"type": "nit",
"prereq": [{ "k": "client_type", "v": "company" }],
"prereqOptionals": [
"client_type_company",
"client_type_consortium"
]
}

La question apparaît lorsque client_type vaut company ou consortium.


Profils de signature (signatureProfile)​

Définit qui signe le document et les données associées. Cet objet ne stocke pas les données brutes des signataires : il stocke des références aux questions qui contiennent les informations de chaque signataire.

NomTypeDescription
nameString obligatoireNom de la question contenant le nom du signataire.
identificationString facultatifNom de la question d'identification. Plusieurs options possibles avec |.
emailString conditionnelNom de la question email contenant l'e-mail du signataire, ou d'un champ preFill. Envoyez email, phone, ou les deux, sauf si le signataire a signature.
phoneString conditionnelNom de la question phone contenant le téléphone du signataire (recommandé pour l'OTP), ou d'un champ preFill. Envoyez email, phone, ou les deux, sauf si le signataire a signature.
typeString obligatoireIdentifiant unique du signataire. C'est le name de l'emplacement de signature du signataire dans le HTML Complet : <div name="…" class="sign-margin">.
roleString facultatif"APPROVER" fait approuver le document au participant au lieu de le signer. Sans role, il est signataire.
orderNumber facultatifTour de signature. Avec order, la signature est séquentielle : le participant reçoit son invitation une fois que ceux ayant un tour antérieur ont signé.
packageBoolean facultatiftrue si l'on demande des pièces jointes à ce participant. Le modèle doit déclarer lesquelles dans files.
countryString facultatifUne valeur fixe, pas un nom de question : code ISO2 du pays du document du signataire (par ex. "CO"). À utiliser avec identificationType lorsque l'identification est demandée par une question qui n'est pas de type identification, lequel porte déjà le pays et le type.
identificationTypeString facultatifUne valeur fixe, pas un nom de question : le type de document du signataire (par ex. "CC"). Même cas que country.
signatureString facultatifNom d'une question type: "signature" de config que le signataire utilise pour signer dans le formulaire (signature sur place). Avec signature, email et phone ne sont plus obligatoires.
name est une seule question

name doit être une chaîne. L'API rejette un tableau de noms de questions avec "signatureProfile[0].name" must be a string. Si le document recueille le nom dans plusieurs champs (prénom, deuxième prénom, nom de famille), ajoutez une question name qui demande le nom complet et utilisez-la comme name du signataire.

Exemple - Un signataire​

{
"name": "buyer_name",
"identification": "buyer_id",
"email": "buyer_email",
"phone": "buyer_phone",
"type": "buyer"
}

Exemple - Identifications multiples​

Si vous avez plusieurs questions d'identification (carte d'identité, carte d'étranger, passeport), séparez-les avec | (pipe). Le moteur d'exécution choisit celle qui a une valeur.

{
"name": "seller_name",
"identification": "seller_id_card|seller_foreign_id|seller_passport",
"email": "seller_email",
"phone": "seller_phone",
"type": "seller"
}

E-mail et téléphone du signataire​

email et phone ne contiennent pas les données du signataire : ils contiennent le nom du champ où Auco les lit lors de la création du processus. C'est pourquoi POST et PUT /template valident chacun d'eux par rapport au modèle :

  • Ce doit être le name d'une question de config du type correspondant —email pour email, phone pour phone—, ou le name d'un champ preFill, le tableau de valeurs fixes du modèle (name et value).
  • Si le nom n'est ni une question ni un champ preFill, l'API répond 400 avec PROFILE_FIELD_NOT_FOUND: <field>.
  • Si la question existe mais a un autre type —par exemple, un email pointant vers une question text—, elle répond 400 avec PROFILE_FIELD_TYPE_INVALID: <field> must be type email (ou phone).
  • Un signataire sans email ni phone et sans signature est rejeté avec le message du validateur : "signatureProfile[0]" must contain at least one of [email, phone].
Une question text pour l'e-mail

Si votre modèle demande l'e-mail du signataire avec une question text, l'API la rejette avec PROFILE_FIELD_TYPE_INVALID. Changez le type de cette question en email : en plus de passer la validation, le formulaire vérifie que l'e-mail a un format valide.

Signature sur place (signature)​

Un signataire avec signature signe pendant qu'il remplit le formulaire, avec la question de signature que vous référencez. Comme rien ne lui est envoyé, il n'a besoin ni d'email ni de phone ; s'il en a, ils sont tout de même validés.

  • La question doit exister dans config avec type: "signature". L'API ne le vérifie pas : vérifiez-le donc avant d'enregistrer.
  • La convention consiste à utiliser la même valeur aux trois endroits : le name de la question, le type et le signature du signataire.
  • Le formulaire doit être ouvert avec la signature sur place activée (signNow). Sans cela, la question de signature n'a aucun effet sur le signataire.
{
"config": [
{
"name": "client_name",
"description": "Saisissez votre nom complet",
"type": "name"
},
{
"name": "client",
"description": "Signez ici",
"type": "signature",
"allow": ["draw"]
}
],
"signatureProfile": [
{
"name": "client_name",
"type": "client",
"signature": "client"
}
]
}
Positionnement de la signature

Pour le placement des éléments <div> dans le HTML Complet, voir Configuration HTML → Emplacement de la signature.


Questions obligatoires​

La propriété sign est un tableau contenant les noms des questions que l'utilisateur ne peut pas ignorer :

"sign": [
"buyer_name",
"buyer_email",
"buyer_id"
]
info
  • L'utilisateur doit obligatoirement remplir les questions enregistrées dans sign.
  • Les questions de type signature sont automatiquement obligatoires — il n'est pas nécessaire de les lister dans sign.

Différences clés : clausula vs select vs searchlist​

CaractéristiqueClausulaSelectSearchlist
Liste déroulante ?OuiOuiOui, avec champ de recherche
Éléments HTML nécessairesUn <span> par optionUn <span>Un <span>
Peut limiter d'autres questions ?✅ Oui❌ Non❌ Non
Peut être référencée dans prereq.k ?✅ Oui❌ Non❌ Non
Structure des options{name, value}{name, label, value}{name, label, value}
Nombre d'options recommandé2–82–1010+