Aller au contenu

Modèles d'enregistrement

Cette page décrit les contrats publics utilisés pour choisir, créer et administrer les modèles d'enregistrement et leurs catégories personnalisées. Certaines structures retournées sont étroitement liées aux formulaires du frontend.

Toutes les routes nécessitent une authentification. Les modèles privés sont limités à leur propriétaire et les modèles partagés sont filtrés selon les entités du compte courant.

Lister les modèles

GET /rest/indexingModels
Paramètre query string Type Obligatoire Description
showDisabled string true ou false Non Inclut les modèles désactivés uniquement avec admin_indexing_models
showInUserEntity string true ou false Non Restreint la sélection aux modèles privés du compte et aux modèles de ses entités

Retour

Le retour 200 contient indexingModels. Chaque entrée provient du modèle interne et comprend notamment l'identifiant, le libellé, la catégorie, le propriétaire, les indicateurs private, default, enabled et le rattachement éventuel à un modèle maître.

{
  "indexingModels": [
    {
      "id": 1,
      "label": "Courrier Arrivée",
      "category": "incoming",
      "default": true,
      "owner": 23,
      "private": false,
      "master": null,
      "enabled": true,
      "mandatoryFile": true,
      "ladProcessing": true,
      "isCustom": false
    }
  ]
}

Consulter un modèle

GET /rest/indexingModels/{id}
Paramètre Emplacement Type Obligatoire Description
id URL integer Oui Identifiant du modèle
used Query string string true Non Ajoute le nombre de courriers par statut utilisant le modèle

Retour

Le retour 200 contient indexingModel, ses entities, ses fields, ses blocks, mandatoryFile, ladProcessing, isCustom et, pour une catégorie personnalisée, categoryLabel. Avec used=true, la propriété used contient le nombre de courriers par statut.

{
  "indexingModel": {
    "id": 42,
    "label": "Courrier entrant",
    "category": "incoming",
    "default": false,
    "owner": 19,
    "private": false,
    "master": null,
    "enabled": true,
    "isCustom": false,
    "entities": [
      {
        "id": "ALL_ENTITIES",
        "keyword": "ALL_ENTITIES",
        "entity_id": "ALL_ENTITIES",
        "parent": "#",
        "icon": "fa fa-hashtag",
        "allowed": true,
        "text": "<toutes-les-entités>",
        "state": {
          "selected": true
        }
      }
    ],
    "fields": [
      {
        "identifier": "subject",
        "mandatory": true,
        "default_value": "",
        "unit": "mail",
        "enabled": true,
        "allowedValues": []
      },
      {
        "identifier": "doctype",
        "mandatory": true,
        "default_value": null,
        "unit": "mail",
        "enabled": true,
        "allowedValues": [101, 102]
      }
    ],
    "mandatoryFile": true,
    "ladProcessing": false,
    "blocks": [
      {"identifier": "mail", "label": "Courrier", "position": 0, "system": true},
      {"identifier": "contact", "label": "Contact", "position": 1, "system": true},
      {"identifier": "process", "label": "Traitement", "position": 2, "system": true},
      {"identifier": "classifying", "label": "Classement", "position": 3, "system": true}
    ],
    "allDoctypes": false
  }
}
Code HTTP Message confirmé
400 Model not found
400 Model out of perimeter

Lister les entités proposées

GET /rest/indexingModels/entities

Cette route publique prépare les données nécessaires aux formulaires.

Paramètre query string Type Obligatoire Description
allEntities string true Non Demande les entités autorisées en mode administration
resId integer Non Restreint la réponse à l'entité destinataire d'un courrier accessible

Retour

Sans query string, le retour 200 contient entities. Chaque entrée expose id, entity_id, entity_label, level et éventuellement parent_entity_id.

{
  "entities": [
    {
      "id": 1,
      "entity_label": "Ville de Maarch-les-Bains",
      "entity_id": "VILLE",
      "level": 0
    },
    {
      "id": 3,
      "entity_label": "Direction Générale des Services",
      "entity_id": "DGS",
      "parent_entity_id": "VILLE",
      "level": 1
    }
  ]
}

Avec allEntities=true, les entrées sont adaptées au composant d'arborescence et ajoutent notamment serialId, parent, allowed, text et state. Avec resId, la liste contient uniquement l'entité destinataire du courrier. Un courrier hors périmètre retourne 403 avec {"errors":"Document out of perimeter"}.

Créer un modèle

POST /rest/indexingModels
Champ Type Obligatoire Description
label string Oui Libellé, au maximum 256 caractères
category string Oui Catégorie système ou personnalisée existante
fields array Oui Champs du formulaire et doit contenirdoctype et subject
private boolean Non Ignoré ou forcé selon les privilèges
default boolean Non Réservé à admin_indexing_models
entities array Non Identifiants d'entités ouALL_ENTITIES
master integer Non Modèle maître public existant
mandatoryFile boolean Non Rend le fichier obligatoire
ladProcessing boolean Non Active le traitement LAD
allDoctypes boolean Non Autorise tous les types pour le champdoctype
blocks array Non Blocs du formulaire, les quatre blocs système sont utilisés par défaut

Chaque élément de fields utilise les clés confirmées identifier, mandatory, enabled, default_value, unit et éventuellement allowedValues.

Chaque élément de blocks contient identifier, label et position. Les identifiants et positions doivent être uniques. Les blocs système mail, contact, process et classifying sont obligatoires. Les champs référencent leur bloc avec unit.

Body

{
  "label": "Courrier entrant",
  "category": "incoming",
  "private": false,
  "default": false,
  "mandatoryFile": true,
  "ladProcessing": false,
  "allDoctypes": false,
  "entities": ["ALL_ENTITIES"],
  "blocks": [
    {"identifier": "mail", "label": "Courrier", "position": 0},
    {"identifier": "contact", "label": "Contact", "position": 1},
    {"identifier": "process", "label": "Traitement", "position": 2},
    {"identifier": "classifying", "label": "Classement", "position": 3}
  ],
  "fields": [
    {
      "identifier": "subject",
      "mandatory": true,
      "enabled": true,
      "default_value": "",
      "unit": "mail"
    },
    {
      "identifier": "doctype",
      "mandatory": true,
      "enabled": true,
      "default_value": null,
      "unit": "mail",
      "allowedValues": [101, 102]
    }
  ]
}

Retour

Code HTTP Description ou message confirmé
200 Objet contenant l'id créé
400 Body label is empty or not a string or more than 256 characters
400 Body category is empty, not a string or not a valid category
400 Body fields is empty or not an array
400 Mandatory 'doctype' field is missing ou Mandatory 'subject' field is missing
400 Master model not found ou Master model is a private model

Exemple de retour 200 :

{
  "id": 42
}

Modifier un modèle

PUT /rest/indexingModels/{id}

Privilège requis : admin_indexing_models.

Le body reprend la structure de création. label, category, default, mandatoryFile et fields sont obligatoires. entities, blocks, ladProcessing et allDoctypes peuvent également être transmis. La modification d'un modèle maître propage sa structure à ses modèles enfants et peut supprimer des valeurs de courriers pour les champs retirés.

Body

{
  "label": "Courrier entrant mis à jour",
  "category": "incoming",
  "default": false,
  "mandatoryFile": true,
  "ladProcessing": false,
  "allDoctypes": false,
  "entities": ["ALL_ENTITIES"],
  "blocks": [
    {"identifier": "mail", "label": "Courrier", "position": 0},
    {"identifier": "contact", "label": "Contact", "position": 1},
    {"identifier": "process", "label": "Traitement", "position": 2},
    {"identifier": "classifying", "label": "Classement", "position": 3}
  ],
  "fields": [
    {
      "identifier": "subject",
      "mandatory": true,
      "enabled": true,
      "default_value": "Objet par défaut",
      "unit": "mail"
    },
    {
      "identifier": "doctype",
      "mandatory": true,
      "enabled": true,
      "default_value": 101,
      "unit": "mail",
      "allowedValues": [101, 102]
    }
  ]
}

Retour

Code HTTP Description ou message confirmé
204 Modification effectuée
400 Param id is empty or not an integer
400 Body default is empty or not a boolean
400 Body mandatoryFile is empty or not a boolean
400 Model not found ou Model out of perimeter
403 Service forbidden

Le retour 204 ne contient pas de body.

Désactiver ou activer un modèle

PUT /rest/indexingModels/{id}/disable
PUT /rest/indexingModels/{id}/enable

Privilège requis : admin_indexing_models. L'action est propagée aux modèles enfants.

Ces deux routes n'attendent aucun body.

Retour

Code HTTP Description ou message confirmé
204 État modifié
400 Route id is empty or not an integer
400 Model not found
400 Can not disable this model because this is the default model
403 Service forbidden

Le retour 204 ne contient pas de body.

Supprimer un modèle

DELETE /rest/indexingModels/{id}

Un modèle privé enfant est supprimable par son propriétaire. Un modèle public enfant exige create_public_indexing_models et un modèle maître exige admin_indexing_models. Le modèle par défaut ne peut pas être supprimé.

Champ body Type Obligatoire Description
targetId integer Si le modèle est utilisé Modèle de remplacement pour les courriers existants

Body

Le body est omis lorsque le modèle n'est utilisé par aucun courrier. Sinon, il contient le modèle de remplacement :

{
  "targetId": 2
}

Retour

Code HTTP Description ou message confirmé
204 Modèle et modèles enfants supprimés
400 Param id is empty or not an integer
400 Model not found ou Model out of perimeter
400 Default model can not be deleted
400 Model is used by at least one resource

Le retour 204 ne contient pas de body.

Créer une catégorie personnalisée

POST /rest/indexingModels/categories/custom

Privilège requis : admin_indexing_models.

Champ Type Obligatoire Description
id string Oui Commence par une lettre puis lettres, chiffres,_, - ou :
label string Oui Libellé
chronoLetter string Oui Une lettre majuscule non utilisée

Body

{
  "id": "demande_citoyen",
  "label": "Demande citoyenne",
  "chronoLetter": "Q"
}

Retour

Code HTTP Description ou message confirmé
201 {"success":true}
400 badFormat, mandatoryField, alreadyExist ou chronoLetterAlreadyUsed
403 Service forbidden

Modifier une catégorie personnalisée

PUT /rest/indexingModels/categories/custom/{id}

Privilège requis : admin_indexing_models. L'identifiant provient de l'URL.

Body

{
  "label": "Demandes des citoyens",
  "chronoLetter": "Q"
}

Retour

Code HTTP Description ou message confirmé
200 {"success":true}
400 badFormat, mandatoryField, alreadyExist ou chronoLetterAlreadyUsed
403 Service forbidden
404 categoryNotFound

Consulter l'utilisation d'une catégorie

GET /rest/indexingModels/categories/custom/{id}/usages

Retour

Le retour 200 contient indexingModels, liste des modèles utilisant la catégorie.

{
  "indexingModels": [
    {
      "id": 42,
      "label": "Courrier entrant"
    }
  ]
}

Rediriger une catégorie

PUT /rest/indexingModels/categories/custom/{id}/redirect
Champ body Type Obligatoire Description
replacementCategoryId string Oui Catégorie système ou personnalisée de remplacement

Body

{
  "replacementCategoryId": "incoming"
}

Retour

Code HTTP Description ou message confirmé
200 {"success":true}
400 replacementCategoryIdIsEmpty, replacementCategoryIdIsSame ou replacementCategoryNotFound
404 categoryNotFound

Supprimer une catégorie personnalisée

DELETE /rest/indexingModels/categories/custom/{id}

Privilège requis : admin_indexing_models.

Champ body Type Obligatoire Description
reassignToCategoryId string Si la catégorie est utilisée Catégorie recevant les modèles et courriers

Body

Le body est omis lorsque la catégorie n'est pas utilisée. Sinon, il contient la catégorie de remplacement :

{
  "reassignToCategoryId": "incoming"
}

Retour

Code HTTP Description ou message confirmé
200 {"success": true}
403 Service forbidden
404 categoryNotFound
409 categoryUsedByIndexingModels, avec le nombre used