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.
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.
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 |
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"
}
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 entiernumber
: 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
, oneOf
et anyOf
.
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-block oularge-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
}
}
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.
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"
}
}
}