Règles avancées
Au-delà des réglages par champ, un type d’enquête peut porter trois sortes de règles au niveau de l’enregistrement. Elles se modifient dans le panneau Règles avancées au bas du générateur et sont validées à l’enregistrement, de sorte qu’une règle mal formée n’est jamais stockée. Chaque section a par défaut un éditeur visuel, et un bouton Modifier en JSON pour la forme exacte ou pour le cas rare que l’éditeur visuel ne couvre pas.
Contrôles de validation
Section intitulée « Contrôles de validation »Un contrôle est une règle sur l’ensemble de l’enregistrement : une comparaison entre deux valeurs, où chaque valeur est un champ, un nombre, ou un agrégat sur un groupe répété (la somme d’un sous-champ, ou le nombre d’entrées). Le contrôle est vérifié quand la comparaison est vraie ; sinon l’enregistrement reçoit votre message, en tant qu’erreur ou avertissement.
Dans l’éditeur visuel, chaque contrôle se lit de gauche à droite : choisissez une valeur, une comparaison (=, différent, au plus, inférieur à, au moins, supérieur à) et une autre valeur, puis saisissez un message en langage clair et choisissez Erreur (bloque l’enregistrement) ou Avertissement (signale seulement). Les listes de champs viennent des champs de l’enquête, et « comparer à un autre champ » est l’égal de « comparer à un nombre ».
Utilisez les contrôles pour ce qu’un seul champ ne peut pas exprimer :
- Un groupe répété doit totaliser un nombre fixe (par exemple, un ensemble de comptes doit totaliser 20).
- Un champ doit être inférieur ou égal à un autre (un début au plus tard à la fin).
- Un compte doit être dans des bornes.
La même règle, affichée par le bouton Modifier en JSON :
[ { "key": "counts_total", "message": { "en": "The counts must total 20.", "fr": "Les comptes doivent totaliser 20." }, "left": { "sum": { "repeat": "rows", "field": "count" } }, "op": "eq", "right": { "const": 20 } }]Un contrôle dont les valeurs ne peuvent pas encore être résolues (un champ est encore vide) est ignoré, de sorte
que des données incomplètes n’échouent jamais. La vue JSON expose aussi une condition when (n’évaluer un
contrôle que dans certains cas) et un field (pour rattacher le message à un champ).
Une règle qui ne doit pas se produire
Section intitulée « Une règle qui ne doit pas se produire »Outre la comparaison de deux valeurs, un contrôle peut échouer quand une condition est vraie, ce qui est la manière d’exprimer une règle « ces deux choses ne doivent jamais être vraies en même temps » qu’une comparaison ne peut pas formuler. Par exemple, un spécimen peut conserver un échantillon de structure de détermination de l’âge ou porter une marque, mais pas les deux.
Cette forme d’« interdiction » se rédige avec le bouton Modifier en JSON (l’éditeur visuel couvre les comparaisons). Elle ressemble à ceci :
[ { "key": "structure_or_tag", "message": { "en": "A specimen keeps its structure sample or carries a tag, never both.", "fr": "Un spécimen conserve son échantillon de structure ou porte une marque, jamais les deux." }, "failWhen": { "all": [ { "field": "structure_no", "op": "not_empty" }, { "field": "tag_no", "op": "not_empty" } ] } }]Le contrôle échoue quand chaque partie de failWhen est vraie. Réglez severity sur error ou warning,
comme tout contrôle.
Quand un contrôle additionne ou compte sur un groupe répété, le sous-champ qu’il nomme est vérifié à l’enregistrement, de sorte qu’une faute de frappe dans le champ additionné est détectée à ce moment plutôt que de devenir une règle qui, silencieusement, ne se déclenche jamais.
Champs calculés
Section intitulée « Champs calculés »Un champ calculé est rempli par le moteur à partir d’autres champs au lieu d’être saisi. Il est en lecture seule sur le formulaire et stocké avec l’enregistrement, de sorte que les rapports, l’export et les contrôles voient la valeur.
Dans l’éditeur visuel, choisissez un champ numérique à rendre calculé, puis construisez sa valeur en choisissant une fonction : un champ, un nombre, un total ou un compte sur une liste, une durée entre deux champs d’heure, ou une formule (a +−×÷ b, où chaque côté est lui-même une expression). Les listes sont filtrées sur les champs compatibles : une durée n’offre que des champs de date ou d’heure, et un total que des sous-champs numériques.
La même expression en JSON (la clé est celle d’un champ existant ; ce champ devient calculé) :
{ "soak_hours": { "duration": { "from": "set_at", "to": "haul_at", "unit": "hours" } } }Une valeur calculée se met à jour en direct à mesure que vous remplissez les champs dont elle dépend.
Plans de sous-échantillonnage
Section intitulée « Plans de sous-échantillonnage »Un plan de sous-échantillonnage décide quels enregistrements sélectionner pour un échantillonnage supplémentaire, à un taux qui peut varier par groupe (zone, saison, espèce, classe de taille). C’est une chose que la plupart des outils de terrain ne savent pas faire, car cela nécessite un compte courant entre les enregistrements, que CensusIO conserve même hors ligne.
Dans l’éditeur visuel, ajoutez un plan, donnez-lui un nom et choisissez une Méthode : un enregistrement sur N (systématique), une probabilité aléatoire par enregistrement (échantillon aléatoire), un quota par groupe (compte fixe), tous les enregistrements (chaque unité), ou prendre ce qui est accessible (opportuniste). Le champ de taux s’adapte à la méthode (un pourcentage, un intervalle 1 sur N, ou un quota par groupe). Une graine rend la sélection identique sur tous les appareils. Faire varier le taux par ajoute des dimensions de groupe à partir des champs de l’enquête (les champs numériques peuvent être découpés en tranches, par exemple des classes de taille de 5 cm), et une table de dérogations de taux fixe un taux différent pour des groupes précis. Vous pouvez aussi activer la numérotation des spécimens (préfixe, début, fin, remplissage) et redémarrer le compte à chaque enregistrement parent.
Le même plan en JSON :
[ { "key": "subsample", "label": { "en": "Sub-sample", "fr": "Sous-échantillon" }, "strategy": "systematic", "rate": 3, "seed": "subsample-2025", "stratum": { "keys": [{ "field": "species" }] } }]Pendant la saisie, le formulaire affiche la décision en direct (sélectionné, une sélection à venir, ou non sélectionné) et un numéro de spécimen lorsqu’il est configuré. La décision est stockée avec l’enregistrement pour que les taux d’échantillonnage puissent être appliqués à l’analyse.