Les API de transcodification

Chaque organisation utilise des référentiels et des nomenclatures pour désigner et identifier un déchet ou un matériel. Cela s'applique bien évidemment à d'autres informations.

Les codes utilisés ne sont pas toujours normalisés. Ce qui rend la communication entre les applications parfois difficile. Les API de transcodification ont pour objectif de faciliter les échanges avec le SI Trinov.

La transcodification s'appliquera à des ressources exposés par Trinov, comme la ressource Waste, Equipment, CollectionPoint dont la description est disponible dans la documentation API Waste Collections.

Authentification

Toutes les authentifications aux API Trinov se font via le protocole OIDC.

curl --location '<https://keycloak-staging.trinov.com/realms/demo/protocol/openid-connect/token>' \\
--header 'Content-Type: application/x-www-form-urlencoded' \\
--data-urlencode 'client_id=demo' \\
--data-urlencode 'client_secret=xxxxxxxxxxxxxxxx' \\
--data-urlencode 'grant_type=client_credentials' \\
--data-urlencode 'scope=openid profile'

Le jeton obtenu contient des informations sur le compte de service, notamment l'organisation à laquelle il est rattaché. Cette information est enregistrée sous l'attribut "tenant".

L'information "tenant" est utilisée par les API de transcodifications pour n'exposer et ne permettre l'administration que des données qui lui sont rattachées. Par exemple, un prestataire A ne pourra ni voir, ni modifier ni supprimer des données de transcodification d'un prestataire B.


Liste des éléments nécessaire pour identifier une transcodification

Nous rappelons ci-dessous les éléments importants qui permettre d'identifier une transcodification.

Champ technique dans l'API

Description

producerOrganization

Organisation productrice de déchet. Il s'agit du producteur de déchet.

externalOrganization

Il s'agit de toute organisation qui s'interface avec Trinov. Il s'agit des prestataires de déchets, notamment les transporteurs ou les centres de traitement.

field

Il représente l'élement transcodé. Le déchet ou le matériel sont par exemple des éléments à transcoder. Le champ field est une liste prédéfinie de valeur. Les valeurs disponibles sont consultables dans la documentation de l'API.

producerValue

Valeur de l'élément pour l'organisation productrice

externalValue

Valeur de l'élément pour l'organisation externe

direction

Sens de la transcodification. Trois valeurs possibles : BOTH, IN ou OUT.

  • BOTH : bidirectionnelle
  • IN : transcodification utilisée dans le cas des informations entrantes dans Trinov
  • OUT : transcodification utilisée dans le cas des informations sortantes dans TrinovIl n'est pas toujours possible d'avoir une transcodification bidirectionnelle. Dans ce cas il faudra définir une transcodification entrante et une sortante.

Modélisation des ressources dans les API de Transcodification

La transcodification est représentée par 2 ressources étroitement liée. La combinaison de ces 2 ressources permet de retrouver toutes les informations citées dans le chapitre précédent.

La ressource TranscodificationHeader regroupe les informations principales

AttributTypeDescription
idnumériqueidentifiant unique de l'objet
producerOrganizationchaine de caractèreorganisation producrtice, client de Trinov
externalOrganizationchaine de caractèreorganisation externe (prestataire)
fieldénumération (WASTE,EQUIPMENT,COLLECITON_POINT)élément transcodé
directionénumération (BOTH,IN,OUT)sens de la transcodification
keyStructureobjet KeyStructuredécrit le moyen de composer les identifiants à partir des objets métiers Trinov selon le type Field. Nous décrirons plus loin le fonctionnement de la structure de clé.
activebooléenindique si la transcodification de l'élément est activé ou désactivé
replacebooléensi replace est à true, on remplace les valeurs de l'objet métier d'origine par le résultat de la transcodification, sinon on fusionne les informations. Ceci sera détaillé plus loin dans la documentation

Pour initialiser un nouvel élément à transcoder il faut donc créer une ressource TranscodificationHeader pour ensuite créer l'ensemble des valeurs à transcoder.

Pour cette deuxième partie, la ressource à utiliser est TranscodificationItem. Il fait obligatoirement référence à une ressource TranscodificationHeader et contient seulement 3 autres attributs : un identifiant unique, la valeur d'origine et la valeur cible.

AttributTypeDescription
idnumériqueidentifiant unique de la ressource
headerIdnumériqueIdentifiant de la ressource TranscodificationHeader auquel il fait référence
producerValuechaine de caractèrevaleur de l'élément transcodé reconnue par l'organisation productrice
externalValuechaine de caractèrevaleur de l'élément transcodé reconnue par l'organisation externe

Exemple des ressources TranscodificationHeader et TranscodifiatioItem :

TranscodificationHeader : 
{
  "id": "1231456",
  "producerOrganization": "producer1",
  "externalOrganization": "external1",
  "field": "WASTE",
  "direction": "IN",
  "keyStructure": "{”fields”: [{”field”: “waste.name”, “rank”: 0}]}",
  "replace": "true"
}

TranscodificationItem (qui fait référence à la précédente ressource TranscodificationHeader : 
{
  "id" : "4564",
  "headerId" : "1231456",
  "producerValue" : "carton",
  "externalValue" : "carton 90/10"
}

Structure de clé

L'objet KeyStructure permet de définir la façon dont on va composer une clé unique à partir des objets métiers Trinov que nous transmettons vers un prestataire ou que nous recevons d'un prestataire.

Prenons l'exemple d'une ressource WasteCollection qui représente une collecte de déchet. Cette ressource contient une ressource Waste qui représente et contient l'ensemble des informations sur le déchet à collecter.

Un prestataire qui souhaite créer une collecte de déchet dans Trinov par le biais de l'endpoint POST /api/v1/waste-collection va renseigner dans le body de son appel une ressource WasteCollection.

La ressource Waste contient plusieurs attributs dont l'attribut "name".

Le prestataire aura renseigné comme valeur "carton 90/10" dans l'attribut "name" de la ressource Waste. Le service Trinov qui réceptionne la ressource WasteCollection à créer va appeler les services de transcodification avec pour paramètres les informations de l'appelant (externalOrganization), du producteur de déchet visé (producerOrganization), field = WASTE puisqu'on transcode ici une ressource Waste, direction = IN. Il va alors récupérer l'objet KeyStructure pour générer la valeur de l'organisation externe.

A partir de l'ensemble de ces informations, le service récupère la valeur cible, c'est-à-dire la valeur de l'organisation productrice pour envoyer la ressource WasteCollection avec les valeurs des référentiels du client Trinov.


Le mode Replace

Ce mode n'est effectif que pour le sens sortant, c'est à dire pour les transcodifications qui prennent la valeur d'un élément basé sur les référentiels du producteur de déchet pour retourner la valeur de l'organisation externe correspondante.

Imaginons toujours la ressource Waste contenant les informations du déchet à collecter. Cette ressource est très complète lorsqu'elle est issue de Trinov (tous les attributs ou presque sont renseignés). Dans le cas de la transcodification sortante, si on décide de remplacer la ressource d'origine par les valeurs issues de la transcodification, l'API effacera tous les attributs puis affectera les nouvelles valeurs.

Si on décide de ne pas remplacer, les attributs d'origine resteront intactes, seuls les attributs faisant l'objet de la transcodificaiton (basé sur la KeyStructure) seront changés. On obtient alors une ressource Waste très complète.