UniqueIdGenerator

[Alimentation] Génération des UniqueId

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();
    }
}