Instances de formulaire et jeux de données associés
Le jeu de données des instances de formulaire (FormInstances) est essentiel pour la gestion des données de formulaire, en se reliant à plusieurs autres jeux de données qui renforcent ses fonctionnalités et fournissent des informations de support. Chaque jeu de données associé apporte un contexte ou des détails supplémentaires, établissant une structure complète pour les données de formulaire. Vous trouverez ci-dessous les jeux de données directement liés aux instances de formulaire, avec les points de connexion mis en évidence.
FormTemplates
Lien : Le champ form_id dans les instances de formulaire est lié au champ id dans FormTemplates.
Aperçu du schéma : Les FormTemplates définissent des structures de formulaire personnalisables, incluant des tableaux imbriqués pour les noms de modèles, les parties et les sections, tous prenant en charge la localisation. Cette connexion permet à chaque instance de formulaire d’utiliser un modèle spécifique, déterminant la structure et la mise en page du contenu de chaque formulaire.
FormAnswers
Lien : Le champ id dans les instances de formulaire correspond au champ form_instance_id dans FormAnswers.
Aperçu du schéma : FormAnswers contient les réponses individuelles aux champs de formulaire, avec des champs tels que form_answer_id, form_field_id et une valeur multilingue. Cette relation fournit des données de réponse détaillées pour chaque instance de formulaire, capturant les saisies de l'utilisateur et les réponses au formulaire.
Projects
Lien : Le champ project_id dans les instances de formulaire est lié au champ id dans Projects.
Aperçu du schéma : Projects fournit le contexte principal de projet pour chaque instance de formulaire, incluant des attributs tels que id, organization_id, name, description, start_date et end_date. Ce lien permet de situer chaque instance de formulaire dans le cadre d'un projet spécifique.
Phases
Lien : Le champ project_phase_id dans les instances de formulaire est lié au champ id dans Phases.
Aperçu du schéma : Phases décrit les différentes étapes d'un projet, avec des noms multilingues et des attributs tels que updated_at. Cette relation indique la phase spécifique du projet associée à chaque instance de formulaire.
Companies
Lien : Le champ company_id dans les instances de formulaire est lié au champ id dans Companies.
Aperçu du schéma : Companies inclut des détails tels que le nom, le statut activé et organization_id. Cette association permet de rattacher chaque instance de formulaire à une entreprise spécifique, facilitant ainsi le suivi et le reporting organisationnel.
Modules
Lien : Le champ module_id dans les instances de formulaire est lié au champ module_id dans Modules.
Aperçu du schéma : Modules fournit des données telles que le moteur, la couleur, l'icône et des noms multilingues, permettant à chaque instance de formulaire d'être associée à des domaines fonctionnels spécifiques ou à des composants de projet représentés par les modules.
Plans
Lien : Le champ plan_id dans les instances de formulaire est lié au champ id dans Plans.
Aperçu du schéma : Plans comprend des attributs tels que le nom, parent_id et organization_id, établissant une structure de projet organisée à laquelle les instances de formulaire peuvent être associées, facilitant ainsi le suivi de la planification et de l'exécution.
Documents
Lien : Le champ project_id dans les instances de formulaire est associé au champ project_id dans Documents.
Aperçu du schéma : Documents fournit des métadonnées telles que file_type, name, type et des horodatages (created_at, updated_at). Ce lien permet d'associer des documents liés au projet aux instances de formulaire pour un contexte et une référence plus riches.
Statuses
Lien : Le champ status_id dans les instances de formulaire est lié au champ id dans Statuses.
Aperçu du schéma : Statuses définit l'état des instances de formulaire, avec des noms multilingues, une couleur et une position. Ce lien permet de suivre l'état actuel ou l'avancement de chaque instance de formulaire.
Users
Lien : Les champs created_by_user_id et updated_by_user_id dans les instances de formulaire sont liés au champ user_id dans Users.
Aperçu du schéma : Users contient des informations telles que l'adresse e-mail, first_name et last_name, identifiant les utilisateurs responsables de la création et de la mise à jour de chaque instance de formulaire, et permettant la responsabilisation et le suivi des actions des utilisateurs.
Structure des modèles de formulaire
Le jeu de données FormTemplates possède une structure hiérarchique complexe conçue pour prendre en charge des formulaires personnalisables. Chaque modèle de formulaire définit la structure et la mise en page du formulaire, avec des niveaux imbriqués permettant une personnalisation étendue. Cette hiérarchie est organisée en parties (parts), sections (sections) et champs (fields):
root
|-- id: string (nullable = true)
|-- created_at: timestamp (nullable = true)
|-- updated_at: timestamp (nullable = true)
|-- deleted_at: timestamp (nullable = true)
|-- created_by_id: string (nullable = true)
|-- updated_by_id: string (nullable = true)
|-- deleted_by_id: string (nullable = true)
|-- template: struct (nullable = true)
| |-- names: array (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- id: string (nullable = true)
| | | |-- translation: string (nullable = true)
| | | |-- localization: string (nullable = true)
| |-- state: integer (nullable = true)
| |-- version: integer (nullable = true)
| |-- family_id: string (nullable = true)
| |-- parent_id: string (nullable = true)
| |-- visibility: string (nullable = true)
| |-- created_by_id: string (nullable = true)
| |-- deleted_by_id: string (nullable = true)
| |-- form_statuses: array (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- id: string (nullable = true)
| | | |-- num: integer (nullable = true)
| | | |-- color: string (nullable = true)
| | | |-- names: array (nullable = true)
| | | | |-- element: struct (containsNull = true)
| | | | | |-- id: string (nullable = true)
| | | | | |-- translation: string (nullable = true)
| | | | | |-- localization: string (nullable = true)
| | | |-- form_id: string (nullable = true)
| | | |-- created_at: string (nullable = true)
| | | |-- deleted_at: string (nullable = true)
| | | |-- updated_at: string (nullable = true)
| | | |-- created_by_id: string (nullable = true)
| | | |-- deleted_by_id: string (nullable = true)
| | | |-- updated_by_id: string (nullable = true)
| | | |-- default_status: boolean (nullable = true)
| | | |-- name_translatable_cell_id: string (nullable = true)
| |-- form_template: struct (nullable = true)
| | |-- id: string (nullable = true)
| | |-- names: array (nullable = true)
| | | |-- element: struct (containsNull = true)
| | | | |-- id: string (nullable = true)
| | | | |-- translation: string (nullable = true)
| | | | |-- localization: string (nullable = true)
| | |-- parts: array (nullable = true)
| | | |-- element: struct (containsNull = true)
| | | | |-- id: string (nullable = true)
| | | | |-- num: integer (nullable = true)
| | | | |-- names: array (nullable = true)
| | | | | |-- element: struct (containsNull = true)
| | | | | | |-- id: string (nullable = true)
| | | | | | |-- translation: string (nullable = true)
| | | | | | |-- localization: string (nullable = true)
| | | | |-- detail: string (nullable = true)
| | | | |-- weight: integer (nullable = true)
| | | | |-- sections: array (nullable = true)
| | | | | |-- element: struct (containsNull = true)
| | | | | | |-- id: string (nullable = true)
| | | | | | |-- num: integer (nullable = true)
| | | | | | |-- names: array (nullable = true)
| | | | | | | |-- element: struct (containsNull = true)
| | | | | | | | |-- id: string (nullable = true)
| | | | | | | | |-- translation: string (nullable = true)
| | | | | | | | |-- localization: string (nullable = true)
| | | | | | |-- detail: string (nullable = true)
| | | | | | |-- weight: integer (nullable = true)
| | | | | | |-- qr_code: boolean (nullable = true)
| | | | | | |-- fields: array (nullable = true)
| | | | | | | |-- element: struct (containsNull = true)
| | | | | | | | |-- id: string (nullable = true)
| | | | | | | | |-- num: integer (nullable = true)
| | | | | | | | |-- names: array (nullable = true)
| | | | | | | | | |-- element: struct (containsNull = true)
| | | | | | | | | | |-- id: string (nullable = true)
| | | | | | | | | | |-- translation: string (nullable = true)
| | | | | | | | | | |-- localization: string (nullable = true)
| | | | | | | | |-- points: integer (nullable = true)
| | | | | | | | |-- prefix: string (nullable = true)
| | | | | | | | |-- suffix: string (nullable = true)
| | | | | | | | |-- weight: integer (nullable = true)
| | | | | | | | |-- choices: string (nullable = true)
| | | | | | | | |-- details: string (nullable = true)
| | | | | | | | |-- required: boolean (nullable = true)
| | | | | | | | |-- data_type: string (nullable = true)
| | | | | | | | |-- form_link: string (nullable = true)
| | | | | | | | |-- created_at: string (nullable = true)
| | | | | | | | |-- created_by: string (nullable = true)
| | | | | | | | |-- deleted_at: string (nullable = true)
| | | | | | | | |-- deleted_by: string (nullable = true)
| | | | | | | | |-- updated_at: string (nullable = true)
| | | | | | | | |-- updated_by: string (nullable = true)
| | | | | | | | |-- internal_code: string (nullable = true)
| | | | | | | | |-- summary_field: boolean (nullable = true)
| | | | | | | | |-- qr_code_mapping_key: string (nullable = true)
| | | | | | | | |-- data_referential_tag: string (nullable = true)
| | | | | | | | |-- type_field_data: integer (nullable = true)
| | | | | | | | |-- presentation_type: string (nullable = true)
| | | | | | | | |-- complementary_text: string (nullable = true)
| | | | | | | | |-- form_field_sa_text: struct (nullable = true)
| | | | | | | | | |-- id: string (nullable = true)
| | | | | | | | | |-- end_with: string (nullable = true)
| | | | | | | | | |-- only_text: boolean (nullable = true)
| | | | | | | | | |-- max_length: integer (nullable = true)
| | | | | | | | | |-- min_length: integer (nullable = true)
| | | | | | | | | |-- start_with: string (nullable = true)
| | | | | | | | | |-- contains_text: string (nullable = true)
| | | | | | | | | |-- default_value: string (nullable = true)
| | | | | | | | | |-- form_field_id: string (nullable = true)
| | | | | | | | | |-- case_sensitive: integer (nullable = true)
| | | | | | | | | |-- case_sensitive_mode: string (nullable = true)
| | | | | | | | |-- form_template_section_id: string (nullable = true)
| | | | | | | | |-- qr_code_mapping_position: string (nullable = true)
| | | | | | | | |-- name_translatable_cell_id: string (nullable = true)
| | | | | | | | |-- description_translatable_cell_id: string (nullable = true)
| | | | | | |-- created_at: string (nullable = true)
| | | | | | |-- created_by: string (nullable = true)
| | | | | | |-- deleted_at: string (nullable = true)
| | | | | | |-- deleted_by: string (nullable = true)
| | | | | | |-- is_enabled: boolean (nullable = true)
| | | | | | |-- updated_at: string (nullable = true)
| | | | | | |-- updated_by: string (nullable = true)
| | | | | | |-- created_by_id: string (nullable = true)
| | | | | | |-- deleted_by_id: string (nullable = true)
| | | | | | |-- internal_code: string (nullable = true)
| | | | | | |-- updated_by_id: string (nullable = true)
| | | | | | |-- qr_code_format: string (nullable = true)
| | | | | | |-- data_referential_id: string (nullable = true)
| | | | | | |-- internal_description: string (nullable = true)
| | | | | | |-- data_referential_tags: string (nullable = true)
| | | | | | |-- form_template_part_id: string (nullable = true)
| | | | | | |-- name_translatable_cell_id: string (nullable = true)
| | | | | | |-- qr_code_separator_key_value: string (nullable = true)
| | | | | | |-- qr_code_separator_information: string (nullable = true)
| | | | | | |-- description_translatable_cell_id: string (nullable = true)
| | | | |-- created_at: string (nullable = true)
| | | | |-- created_by: string (nullable = true)
| | | | |-- deleted_at: string (nullable = true)
| | | | |-- deleted_by: string (nullable = true)
| | | | |-- updated_at: string (nullable = true)
| | | | |-- updated_by: string (nullable = true)
| | | | |-- created_by_id: string (nullable = true)
| | | | |-- deleted_by_id: string (nullable = true)
| | | | |-- internal_code: string (nullable = true)
| | | | |-- updated_by_id: string (nullable = true)
| | | | |-- form_template_id: string (nullable = true)
| | | | |-- internal_description: string (nullable = true)
| | | | |-- name_translatable_cell_id: string (nullable = true)
| | | | |-- description_translatable_cell_id: string (nullable = true)
| | |-- state: integer (nullable = true)
| | |-- weight: integer (nullable = true)
| | |-- version: integer (nullable = true)
| | |-- embedded: boolean (nullable = true)
| | |-- parent_id: string (nullable = true)
| | |-- created_at: string (nullable = true)
| | |-- created_by: string (nullable = true)
| | |-- deleted_at: string (nullable = true)
| | |-- deleted_by: string (nullable = true)
| | |-- updated_at: string (nullable = true)
| | |-- updated_by: string (nullable = true)
| | |-- allow_draft: boolean (nullable = true)
| | |-- presentation: integer (nullable = true)
| | |-- created_by_id: string (nullable = true)
| | |-- deleted_by_id: string (nullable = true)
| | |-- external_code: string (nullable = true)
| | |-- internal_code: string (nullable = true)
| | |-- updated_by_id: string (nullable = true)
| | |-- duplicate_from_id: string (nullable = true)
| | |-- internal_description: string (nullable = true)
| | |-- name_translatable_cell_id: string (nullable = true)
| | |-- description_translatable_cell_id: string (nullable = true)
| |-- finalcad_ready: boolean (nullable = true)
| |-- form_template_id: string (nullable = true)
| |-- duplicate_from_id: string (nullable = true)
| |-- current_organization_id: string (nullable = true)
| |-- name_translatable_cell_id: string (nullable = true)
| |-- parent_in_organization_id: string (nullable = true)
| |-- id_in_current_organization: string (nullable = true)
| |-- current_organization_visibility: string (nullable = true)
| |-- description_translatable_cell_id: string (nullable = true)
Composants clés:
Parts : Chaque modèle de formulaire est divisé en plusieurs parts, chacune représentant une section majeure du formulaire. Les parts aident à organiser les sections de manière logique. Chaque part comprend un id unique, un tableau de names (pour la prise en charge multilingue) et d’autres métadonnées.
Sections : À l'intérieur de chaque part, il y a une ou plusieurs sections. Les sections servent de conteneurs pour les champs et permettent une subdivision supplémentaire au sein de chaque part. Chaque section comprend des attributs tels que id, num (pour l’ordre), et un tableau de names pour des étiquettes localisées.
Fields : Les fields sont les éléments les plus granulaires d'un modèle de formulaire et représentent les éléments individuels que les utilisateurs remplissent dans le formulaire. Chaque field possède un id unique, essentiel pour servir de point de référence dans FormAnswers. Le champ form_field_id dans FormAnswers relie chaque réponse donnée dans une instance de formulaire au champ spécifique défini dans le jeu de données FormTemplates.
Family ID : Le
family_id
est un identifiant unique partagé entre toutes les versions d'un même modèle de formulaire, garantissant la continuité et la liaison entre différentes versions du même modèle.Internal Code : Le
internal_code
permet de référencer de manière cohérente un champ, une section et une partie entre les différentes versions d'un modèle de formulaire, facilitant le suivi et la connexion des champs à travers les différentes itérations du modèle.type_field_data : Spécifie le type de données du champ utilisé dans le formulaire.
Le type_field_data définit le type de données pour chaque champ de formulaire et détermine comment les afficher:
type_field_data égal à Text, Paragraph, Phone, Email, ou Formula est de type Text.
type_field_data égal à Number est de type Number.
type_field_data égal à Date, Time, ou DateTime est de type Calendar.
type_field_data égal à Radio est de type SingleChoice.
type_field_data égal à Checkboxes est de type MultipleChoice.
type_field_data égal à OkKo ou OkKo+NA est de type Control.
type_field_data égal à Grid est de type Resources. Il associe plusieurs champs à l'intérieur d'une grille.
Structure des Réponses de Formulaire
Le dataset FormAnswers
est dédié au stockage de l’historique complet des réponses pour chaque champ d’un formulaire. Cette structure garantit un suivi et une traçabilité exhaustive de toutes les saisies utilisateur au fil du temps.
Voici le schéma détaillé du dataset FormAnswers
:
root
|-- form_answer_id: string (nullable = true)
|-- edited_at: timestamp (nullable = true)
|-- form_field_id: string (nullable = true)
|-- form_instance_id: string (nullable = true)
|-- form_template_section_id: string (nullable = true)
|-- is_deleted: boolean (nullable = true)
|-- project_id: string (nullable = true)
|-- user_id: string (nullable = true)
|-- value: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- _: string (nullable = true)
| | |-- en: string (nullable = true)
| | |-- fr: string (nullable = true)
| | |-- ... (Autres locales)
|-- organization_id: string (nullable = true)
L’attribut value
contient un tableau de valeurs associées à un champ (form_field_id
). Deux cas sont possibles :
Champs de type multi-choix
Le tableau
value
contient plusieurs éléments, chaque élément correspondant à un choix sélectionné par l’utilisateur.
Autres types de champs
Le tableau
value
ne contient qu’un seul élément, représentant la valeur saisie ou prédéfinie pour le champ.
Chaque élément du tableau value
est stocké sous l’un des deux formats suivants, en utilisant une structure clé-valeur :
Format multilingue
Si la clé
_
est vide, la réponse est enregistrée sous des clés spécifiques aux langues (par exemple,en
,fr
, …).Ce format est utilisé pour les champs ayant des valeurs prédéfinies nécessitant une gestion multilingue.
Format sans distinction de langue
Lorsque la clé
_
est renseignée, elle contient la valeur brute saisie par l’utilisateur ou définie par défaut.Ce format est utilisé pour les champs qui ne nécessitent pas de traduction, comme les champs de texte libre ou les valeurs numériques.
Schéma relationnel
