UniqueIdGenerator
Afin d’être totalement conforme à l’exigence EX_2.1-1130.
Chaque document et lot de document(s) produit par un LPS doit être identifié par un identifiant universel (champ XDS uniqueId au format OID) :
soit le uniqueId est généré à partir d’un UUID (sous la branche OID 2.25), dans ce cas cet OID doit être stocké dans le LPS pour les recherches / remplacements futurs via ce même LPS ;
soit le uniqueId est généré à partir d’une racine propre à l’installation du LPS et d’un élément « variable » mais unique vis-à-vis de la racine de l’instance du LPS installée (par exemple horodatage, ou identifiant interne du document dans le LPS) ; il incombe au LPS de pouvoir retrouver ce uniqueId pour les recherches / remplacements futurs via ce même LPS (par exemple en stockant le uniqueId ainsi généré, ou la partie variable uniquement à condition de savoir reconstruire le uniqueId complet).
La DMPC-API fournit les deux implémentations demandées dans cette exigence. C’est à l’intégrateur de la choisir.
Basé sur la Source
L’implémentation par défaut est basée sur les paramètres de la source. Elle est conforme au deuxième point de l’exigence :
La source est définie par les deux paramètres de l’application.yml
:
dmpc:
source:
# 1.2.250.1.287 est l'OID de Devcoop
# 1.2.250.1.287.1 est l'OID correspondant à la DMPC pour Devcoop
idRoot: 1.2.250.1.287.1
# l'idExtension doit prendre pour valeur une valeur unique de l'instance installé EX_2.1-1130
idExtension: 1234567
Pour obtenir des informations concernant les OIDs vous pouvez consulter ce guide de l’ANS : https://esante.gouv.fr/sites/default/files/media_entity/documents/ans_guide-gestion-oid_v0.1.pdf
L’implémentation ressemble à cela :
/**
* Implémentation par défaut basé sur les informations du logiciel @see fr.devboxsante.dmp.core.Source
* * un compteur
* * et le temps en ms
*/
public static class Default implements UniqueIdGenerator {
...
@Override
public Id generate() {
return new IdBuilder().setRoot(source.ToOID()).setExtension(System.currentTimeMillis() + "." + (cpt++)).toId();
}
}
Basée sur l’UUID
Il est possible d’utiliser une autre implémentation proposée par la DMPC-API pour utiliser l’OID UUID : “2.25” . Cette implémentation est conforme à la première méthode de l’exigence.
Il suffit de configurer un bean implémentant UniqueIdGenerator
, de la manière suivante:
@Configuration
public class MyOwnDmpcApiConfiguration {
@Bean
public UniqueIdGenerator idGenerate() {
return new UniqueIdGenerator.WithUuid();
}
}
Implémentée par l’intégrateur
Il est néanmoins possible de générer ses UniqueId, l’intégrateur devra donc proposer sa propre implémentation du UniqueIdGenerator
et de l’ajouter à sa configuration spring .
Attention : Elle devra être conforme à l’une des deux exigences mentionnées ci-dessus.
Exemple :
@Configuration
public class MyOwnDmpcApiConfiguration {
@Bean
public UniqueIdGenerator idGenerate() {
return new MyOwnImplementationOfUniqueIdGenerator();
}
}