Modèles d'attributs

Maarch Digital Flow permet d'ajouter des attributs personnalisés aux entités gérées dans l'application, qu'il s'agisse des métadonneés pour les documents numériques, des données de formulaires pour les dossiers métier ou encore des informations personnelles des utilisateurs.

Bien que cela ne soit pas systématique, le plus souvent ces données doivent répondre à des contraintes en lien avec les règles du métier ou le besoin d'interopérabilité avec d'autres systèmes d'information. On peut par exemple souhaiter que les métadonnées des documents numériques de facture d'achat comportent obligatoirement l'identification du fournisseur, un numéro, une date et un montant total, ou que la structure des données d'un dossier correspondent à celle reçue depuis un formulaire de l'extranet.

Dans Maarch Digital Flow, la description de la structure des attributs des objets et les contraintes applicables sont décrites par des modèles d'attributs gérés par l'administrateur. Ces définitions sont ensuites utilisées dans les différentes sections d'administrations des entités.

Accès aux modèles

La section Modèles d'attributs de l'administration permet de créer et gérer les modèles. L'administrateur habilité l'utilise pour lister les modèles existants, les gérer et en ajouter de nouveaux.

Propriétés des modèles d'attributs

Champ Type Description
Identifiant texte Le nom utilisé par le système pour identifier le modèle. Il ne peut être changé quand le modèle est en cours d'utilisation
Libellé texte Le nom affiché aux utilisateurs lorsqu'ils utilisent le modèle
Description texte Description du modèle

@


Contenu du modèle

Les modèles d'attributs sont basés sur le formalisme de déclaration des schémas de données JSON Schema (cf https://json-schema.org). Ils en reprennent toute la syntaxe, les éléments de base tels que les types de données, les structures complexes de tableaux et d'objets, les contraintes sur les formats, propriétés obligatoires, etc, à laquelle ils ajoutent des éléments de description étendus pour répondre à de nouveaux besoins.

La présente documentation n'a pas pour objectif de redécrire les spécifications ou la documentation complète du standards JSON Schema. On fournit ici quelques bases mais on ne reprend dans le détail la documentation disponible sur le site du projets. Pour plus d'informations, consulter la page https://json-schema.org/understanding-json-schema.

La version de spécifications utilisée à ce jour est Draft 2020-12.

Un modèle d'attributs est un schéma JSON décrivant une structure de type object qui contient les attributs souhaités. La base de tout schéma est donc la suivante :

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type" : "object"
}

Schéma de base pour les objets

Le schéma décrit les attributs grâce au mot-clé properties. Ce bloc contient une liste qui associe les noms des propriétés à leur définition. La définition d'une propriété elle-même un schéma qui répond aux spécifications du formalisme JSON Schema. Chaque propriété doit a minima déclarer un type de données avec le mot-clé type qui peut prendre les valeurs suivantes :

  • string : chaîne de caractères (texte)
  • integer : nombre entier
  • number : nombre réel (ou décimal ou à virgule flottante)
  • boolean: indicateur booléen pouvant prendre les valeurs 'vrai' ou 'faux'
  • object : structure composite objet (ou clés-valeurs)
  • array : structure composite tableau (ou liste de valeurs non ordonnée)

Les propriétés obligatoires peuvent être déclarées par le mot-clé required sous la forme de la liste des noms des propriétés concernées.

{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "type" : "object",
    "properties": {
        "firstmane" : { "type": "string" },
        "lastname" : { "type": "string" },
        "age" : { "type": "integer" }
    },
    "required": [
        "lastname",
        "firstname"
    ]
}

L'application autorise aussi les définitions de propriétés complémentaires avec les mots-clés additionalProperties, patternProperties ainsi que les compositions avec les mots-clés allOf, oneOfet anyOf.

Affichage du formulaire

En plus de la définition des données, le modèle d'attributs utilise des mots-clés spécifiques liés à la présentation des attributs par l'application dans des formulaires dynamiques.

Mot-clé Type Description
position entier Permet de définir l'ordre d'affichage des propriétés dans le formulaire
collapsable indicateur Pour les propriétés de type object uniquement, permet de définir si le bloc d'affichage contenant le jeu de propriétés peut être refermé. Quelle que soit la valeur indiquée, le bloc est ouvert par défaut si les données ne sont pas valides au regard du schéma de la propriété.
view définition de champ Ce bloc fournit les paramètres d'affichage du champ dans le formulaire (voir ci-après)

Le bloc view contient des mots-clés pour adapter les paramètres d'affichage du champ dans le formulaire :

Mot-clé Type Description
type texte Mode de saisie de l'attribut, par exemple input-string, input-checkbox, textarea, etc.
size texte Largeur du champ de saisie small-blockoularge-block

L'application propose un mode de saisie par défaut pour les attributs en fonction de leur type de base, mais ce mode peut-être adapté grâce au mot-clé type :

Type de champ Description Type d'attribut applicables
input-string Champ de saisie de texte simple string, number, integer
textarea Zone de texte multilignes string
input-autocomplete Champs de saisie assistée string avec enum ou externalReference
input-checkbox Cases à cocher Type simple avec enum, boolean
input-radio Boutons radio Type simple avec enum
input-date Champs de saisie avec sélecteur de date string avec format: date-time

Ci-dessous un exemple de définition d'attributs comportant des mots-clés de présentation :

{
    "civilite": {
        "enum": [
            "M",
            "MME"
        ],
        "type": "string",
        "view": {
            "type": "input-radio"
        },
        "title": "Civilité",
        "position": 1
    },
    "nom": {
        "type": "string",
        "view": {
            "size": "small-block",
            "type": "input-text"
        },
        "title": "Nom",
        "position": 2
    }
}

Protection des données personnelles et sensibles

Le mot-clé gdpr permet d'indiquer qu'un attribut contient des données à caractère personnel ou sensible. De telles données pourront ainsi être facilement identifiées dans l'application pour des opérations ultérieures d'anonymisation ou de pseudonymisation par exemple.

Liaison à un référentiel

Le modèle d'attribut peut définir des contraintes sur les valeurs possibles d'un ou plusieurs attributs, en lien avec un référentiel de données externe accessible à l'applciation. Par exemple, il est possible de lier le matricule d'un employé au registre du service des ressources humaines fourni par l' SIRH, de sorte que l'attribut devra obligatoirement contenir un matricule existant. Il est aussi possible de lier un groupe d'attributs dont les valeurs sont présentes dans une même entrée de référentiel, afin par exemple de renseigner et valider d'une seul coup le numéro, le nom et l'adresse d'un compte client présent dans un logiciel CRM.

Le mot-clé externalReference déclare la structure d'accès au référentiel externe pour le schéma.

Mot-clé Type Description
service string L'identification d'un service configuré dans l'application pour fournir des valeurs de référence
field string Nom de la propriété du schéma (de type objet) servant de champ de saisie pour l'utilisateur dans le formulaire
parameters objet Une liste de paramètres passés au service pour la recherche des valeurs de référence. Cette partie dépend de l'implémentation du service en question
response objet Une liste de définitions de réponses possibles du service, notamment la celles retournant des valeurs
referentProperty string Nom de la propriété dans la structure de données de la réponse qui sert de clé d'identification de la ligne

Ci-dessous un exemple de déclaration de référentiel pour lier un champ dans lequel l'utilisateur saisit un code postal et l'application propose une liste de communes :

"externalReference": {
    "field": "codePostal",
    "service": "cp",
    "parameters": {
        "sort": {
            "@by": "asc"
        },
        "search": {
            "code_postal": "@codePostal",
            "nom_commune": "@commune"
        }
    },
    "response": {
        "*": {
            "id": "insee_com",
            "commune": "nom_commune",
            "codePostal": "code_postal"
        }
    },
    "referentProperty": "code_postal"
}

Une fois le référentiel branché, les attributs du modèle peuvent être liés par le mot-clé externalResource :

{
    "codePostal": {
        "type": "string",
        "view": {
            "type": "input-autocomplete"
        },
        "title": "Code Postal",
        "externalResource": {
            "by": "code_postal",
            "service": "cp",
            "response": {
                "*": {
                    "id": "code_postal",
                    "name": "code_postal+' - '+nom_commune",
                    "nom_commune": "nom_commune"
                }
            },
            "writingStrategy": "none"
        }
    },
    "commune": {
        "type": "string",
        "view": {
            "type": "input-autocomplete"
        },
        "title": "Ville",
        "externalResource": {
            "by": "nom_commune",
            "service": "cp",
            "response": {
                "*": {
                    "cp": "code_postal",
                    "id": "nom_commune",
                    "name": "code_postal+' - '+nom_commune"
            }
            },
            "writingStrategy": "none"
        }
    }
}

results matching ""

    No results matching ""