Contenido


Resumen



  • Versión: v01r21
  • Fecha publicación:  
  • Entrada en vigor desde: 









Cumplimiento normativo

Las normas expuestas son de obligado cumplimiento. La STIC podrá estudiar los casos excepcionales los cuales serán gestionados a través de los responsables del proyecto correspondiente y autorizados por el Área de Gobernanza de la STIC. Asimismo cualquier aspecto no recogido en estas normas deberá regirse en primera instancia por las guías técnicas correspondientes al esquema nacional de seguridad y esquema nacional de interoperabilidad según correspondencia y en su defecto a los marcos normativos y de desarrollo software establecidos por la Junta de Andalucía, debiendo ser puesto de manifiesto ante la STIC.

La STIC se reserva el derecho a la modificación de la norma sin previo aviso, tras lo cual, notificará del cambio a los actores implicados para su adopción inmediata según la planificación de cada proyecto.

En el caso de que algún actor considere conveniente y/o necesario el incumplimiento de alguna de las normas y/o recomendaciones, deberá aportar previamente la correspondiente justificación fehaciente documentada de la solución alternativa propuesta, así como toda aquella documentación que le sea requerida por la STIC para proceder a su validación técnica.

Contacto Arquitectura: l-arquitectura.stic@juntadeandalucia.es


Histórico de cambios

Los cambios en la normativa vendrán acompañados de un registro de las modificaciones. De este modo se podrá realizar un seguimiento y consultar su evolución. Ordenándose de mas recientes a menos recientes, prestando especial cuidado a las cabezeras de la tablas dónde se indican las fechas de entrada en vigor y versión.


Versiónv01r21Fecha publicación

 

Fecha entrada en vigor

 

Alcance
  • Integración con BDU para desarrollos Java desde la versión 2.2.0 del componente.




1. Introducción 

Esta librería permitirá de hacer uso de la Api proporcionada por Bdu y tener acceso a utilidades relacionadas con la operativa de Bdu.

Actualmente la librería tiene las siguiente funcionalidades:

  • Versión <= 1.2
    • Consulta detallada.
    • Consulta corta.
    • Consulta recien nacido
  • Version >= 2.0
    • Se matienen las interfaces de las versiones anteriores 1.2.
    • Se añaden métodos para consulta paginadas, funcionales solamente en la implementación del conector JPA. El conector actual basado en WS lanzará NotSupportedException. 
  • Version 2.2.0
    • Se añaden servicios de alta de usuarios y recién nacidos para la implemetación WS.

De cara a priorizar futuras funcionalidades, si algún proveedor tiene la necesidad de alguna funcionalidad adicional se deberá de comunicar a l-arquitectura.stic.sspa@juntadeandalucia.es


2. Dependencias

BduApiClientMacoApiClientsasutils-xmlsasutils-parsesasutils-file
2.2.02.0.02.0.22.0.22.0.2
2.0.0.11.8.0.21.1.0.11.1.0.11.1.0.1
1.2.0.21.8.0.21.0.0.11.0.0.11.0.0.1
1.2.0.11.8.0.11.0.0.11.0.0.11.0.0.1
1.1.0.21.7.2.21.0.0.11.0.0.11.0.0.1
1.1.0.11.7.2.21.0.0.11.0.0.11.0.0.1
1.0.1.11.7.0.11.0.0.11.0.0.11.0.0.1
1.0.0.11.3.1.11.0.0.11.0.0.11.0.0.1


3. Historial de Cambios

  • v2.0.2

    • Modificación de la política de versionado con reducción a tres dígitos
    • Alta de recién nacidos a través del web-service de bdu expuesto para tal fin y bajo el contrato de la versión 2.12.
    • Alta de usuarios en bdu a través del web-service de bdu expuesto para tal fin y bajo el contrato actual de la versión 2.12. 
    • Fixes para el servicio de consulta de recien nacidos en base al nuhsa de los progenitores
    • Maestras conteniendo enumerados para los elementos más habituales relacionados con BDU según la spec del último contrato disponible en la documentación de la OTI que está versionado como 2.3
    • Proyecto de ejemplo con interacción mixta de las dos implementaciones en base a indentificación de servicios con @Named
    • Modificaciones en las entities a nivel de api:
      • En las políticas de los getters nulos, devolviéndose ahora objetos vacíos listos para su uso en lugar de nulos.
      • Nuevos elementos de negocio para direcciones,adscripcion, etc..
    • Se añade una nueva interfaz para la interacción con los datos de BDU para el alta de usuarios  BduRepository, esta sustituirá a futuro el componente de negocio actual BduSearch, pero aún no se marca como deprecado. 
    • Se actualizan las dependencias de todos los componentes estructurales pasando a ser:
      • macoApiClient:2.0.0
      • Jpa-impl:
        • estructuraApiClient:2.1.4
        • claveEquipoApiClient:1.1.0
      • sasutils:2.0.2
  • v2.0.0.1
    • Actualización de las dependencias a sas-utils en su versión mas reciente 1.1.0.1
    • Se modifican los servicios de bduSearch para dar soporte a la paginación de registros.
    • Se incluye el conector JPA para consulta de BDU.
    • Se incluyen valores comunes de maestras relacionadas con bdu en el empaquetado bduApiClient-maestras.
    • Se incluyen dependencias a estructuraApiClient para poder traer la información relativa a los profesionales y estructura que se requiera para las consultas detalladas. 
  • v1.2.0.2

    • Hotfix para cambiar a la version 1.8.0.2 de la libreria de maco
  • v1.2.0.1
    • Adaptacion a la libreria de sasconfiguration
  • v1.1.0.2

    • Hotfix para cambiar el orden de generacion de las propiedades del header de los mensajes 
  • v1.1.0.1
    • Uso de la nueva libreria de maco 1.7.2.2
  • v1.0.1.1

    • Modificado el constructor de la clase de configuracion.
  • v1.0.0.1
    • Añadidos servicios de consulta

4. Integración de la librería

Integración con el api client

La api de integración con bdu, está construida en base a un contrato de servicio especificado en "bduApiClient-api" que es implementado por conectores específicos a la solución tecnológica que se decida en el ámbito del proyecto. Actualmente las soluciones tecnlógicas aportadas resuelven los datasources de BDU mediante JAX-WS ó JPA. 

Para incluir la librería en un proyecto Maven es necesario realizar los siguientes pasos:

  1. Agregar el repositorio de la Junta de Andalucía. Es posible realizarlo de dos formas diferentes.
  • Especificando el repositorio en la configuración global.

        
    <project>
        ...
          <repositories>
            <repository>
              <id>Repo_SAS</id>
              <name>Repo_SAS</name>
              <url>http://calidad.sas.junta-andalucia.es/artifactory/sas-internal</url>
            </repository>
          </repositories>
        ...
        </project>


  • Otra opción es especificar un perfil en concreto en ${user.home}/.m2/settings.xml

    <mirrors>
    		<mirror>
    		<id>Repo_SAS</id>
    		<name>Repo_SAS</name>
    		<url>http://snap.java.lib.repository.dev.alm.sas.junta-andalucia.es</url>
    		<mirrorOf>*</mirrorOf>
    		</mirror>
    		</mirrors>
    	<profiles>
        <profile>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <id>nexus-public</id>
                    <name>Nexus Public Repository</name>
                    <url>http://snap.java.lib.repository.alm.pre.sas.junta-andalucia.es</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>

    Hay que tener en cuenta, que se deberá de tener activo el perfil.


2. Especificar la dependencia principal contra la api en el POM del proyecto que requiere la funcionalidad

  

...
    <dependencies>
        <!--BDU-->
        <dependency>
            <groupId>es.ja.csalud.sas.componentescomunes.bduapiclient</groupId>
            <artifactId>bduApiClient-api</artifactId>
            <version>x.x.x.x</version>
        </dependency>
... 



  • Conector JPA
...
    <dependencies>
        <!--BDU-->
        <dependency>
            <groupId>es.ja.csalud.sas.componentescomunes.bduapiclient</groupId>
            <artifactId>bduApiClient-jpa-impl</artifactId>
            <version>x.x.x.x</version>
        </dependency>
... 


  • Conector JAX-WS
...
    <dependencies>
        <!--BDU-->
        <dependency>
            <groupId>es.ja.csalud.sas.componentescomunes.bduapiclient</groupId>
            <artifactId>bduApiClient-ws-impl</artifactId>
            <version>x.x.x.x</version>
    </dependency>
...



Configuración

Según sea la solución tecnológica utilizada la configuración de la infraestructura necesaria para interaccionar con bdu es diferente, aunque ambas soluciones basadas en SasConfiguration.

JAX-WS

Para que la libreria se autoconfigure mediante la libreria sasconfiguration, se tendran que realizar las siguientes acciones:

  • Añadir la siguiente dependencia:

    ...
        <dependencies>
            <!--BDU-->
            <dependency>
                <groupId>es.ja.csalud.sas.componentescomunes.bduapiclient</groupId>
                <artifactId>bduApiClient-config</artifactId>
                <version>x.x.x.x</version>
            </dependency>
    ... 


  • Agregar las dependencias necesarias de la libreria sasconfiguration
  • definir los siguientes parametros:
    • es.ja.csalud.sas.componentescomunes.bduapiclient.config.url                 | Se configura el valor de la url dónde se encuentra el ws de bdu.
    • es.ja.csalud.sas.componentescomunes.bduapiclient.config.modulecode | Se configura el código maco del módulo que representa la aplicación.

De forma alternativa se podran definir manualmente estas configuraciones.Estos parametros se definiran usando la libreria sasconfiguration.(SAS configuration)

Actualmente existe un objeto de configuración:

  • BduApiConfig gestiona la configuración general de la librería.
    Ejemplo:

...
@Produces public BduApiConfig getBduApiConfig() {
 final BduApiConfig bduApiConfig = new BduApiConfig("http://ws-bdu-pre.diraya-test.sspa.junta-andalucia.es/web_services/", "338");
 ...
 return bduApiConfig;
 }
... 
Para su uso mediante la Factoria, se debera de crear la factoria pasandole al constructor como parametro la configuracion de la libreria.
...
public BduFactory getBduFactory() {
 return new BduFactory(getBduApiConfig());
}
... 


JPA

La configuración del conector JPA espera una clase del tipo "BduApiConfig" propia de JPA, debido a las características propias de las impl de ws y jpa se mantendrán separadas las dos necesidades, atendiendo al ppo de segregación de responsabilidades, y permitiendo la coexistencia de varias implementaciones de los servicios expuestos en caso de ser necesario.

Básicamente define una serie de timeouts para los servicios integrados, ya que el resto de configuración necesaria para el datasource se realizará como es habitual en un proyecto JPA mediante su "persistence.xml" correspondiente en el proyecto de su aplicación, así como el mapeo de tablas a entidades. 

Operación

Criterias

El objeto QuerysBduUserSearchDto, es la representación de los criterios de búsqueda que son soportados por el api client. Dicho objeto permite los siguientes valores.

  • Flags, estos son los modificadores soportados:
    • detailedInfo: Booleano indicando si se desea la información detallada (true) o resumida (false). Default: false.
    • famarciaInfo: Booleano indicando si se desea la información detallada sobre farmacia. Default: False
    • fullAddress: Booleano indicando si se desea la información detallada del domicilio del paciente. Default: False.
  • Identificadores de usuario único
    • Nhusa: Alfanumérico.
    • codSns: Alfanumérico.
    • socialSecurityNumber: Alfanumérico.
    • documentIdType + documentType + documentId: La tripla permite identificar un paciente por el identificador definido, en caso de no informar de forma explicita el tipo de indentificador, se supone por defecto DNI. 
  • Filtros de búsqueda
    • birthDateYear: Alfanumérico.
    • name: Alfanumérico. Soporta modificadores "startWith","endsWith","contains" y "exact match".
    • lastname1: Alfanumérico. Soporta modificadores "startWith","endsWith","contains" y "exact match".
    • lastName2: Alfanumérico. Soporta modificadores "startWith","endsWith","contains" y "exact match".

Los filtros de búsqueda basados en cadenas que soportan modificadores se habilitan pasando al criteria el wildcard "*" y en base a su posición se comportan de un modo u otro. Las restricciones impuestas para la longitud de las cadenas entrantes como parámetros son dependientes 

  • startWith: "*<search_string>"
  • endsWith: "<search_string>*"
  • contains: "*<search_string>*"
  • exact match: "<match_string>"

Es obligatorio informar al menos uno de los siguientes campos para poder hacer uso del criteria, en caso de no informarse se dará una "UnsupportedOperationException" al operar el servicio.

  • Un identificador.
  • Una lista de nhusas con al menos un elemento.
  • Una tupla de nombre,apellido1 y apellido2 en cualquiera de sus posibles combinaciones.

Métodos de servicio

Los métodos de servicio que la api proporciona son los siguientes:

Búsqueda de usuarios (consulta detallada/corta)

La búsqueda de usuarios se realizará mediante los métodos "findUsers"  que soportan el criteria descrito anteriormente. Adicionalmente para el conector JPA dichos métodos soportan la indicación de valores para la paginación ó la definición de un valor máximo para el número de resultados devueltos. 

Los métodos sin paginación se han marcado para su retirada por obsolescencia y serán retirados a partir de la versión 3.0 del api client. La información devuelta para los métodos paginados devolverán en lugar de una lista de pacientes un objeto de tipo "Page" de pacientes.

Una cuestión importante a tener en cuenta es que el conector basado en JAX-WS no dispone de soporte de paginación ni de máximo número de resultados devueltos actualmente debido a las limitaciones de los contratos de interoperación,  y en caso de hacer uso de dichos métodos de servicio se elevarán excepciones fuera de la capa de servicio.

Búsqueda de recién nacidos

La búsqueda de recién nacidos nos devolverá una lista de usuarios que están asociados al nhusa indicado y tambien tienen soporte para la paginación. 

Todos los métodos de servicio están preparados para elevar excepciones internas encapsuladas en una excepción de tipo BduApiClientException, sin embargo las implementaciones finales de los conectores a los datasource (JAX-WS ó JPA) son los que disponen de los valores de categorización y tipificación de la excepción.


Paginación

Conector JPA

El conector JPA dispone de características internas para paginar sobre el número de resultados devueltos, además es posible especificar conjuntos de valores especiales que permiten conocer el total del registros del dataset que puede ser devuelto por la búsqueda al definir ambos valores de "page" y "count" a cero. 

La implementación actual lo que espera por parte de los desarrolladores es que se haga un uso razonable de los servicios de búsqueda, haciendo uso de las características de paginación cuando sea apropiado, y consultado la información detallada sólo en aquellos casos en los que una navegación en profundidad sea necesaria.

Por otro lado el conector JPA no soporta la devolución de información detallada paginada por cuestiones de rendimiento, devolviendo una excepción en caso de un uso inadecuado. 

En el caso de hacer uso de las búsquedas sin soporte para paginación los límites establecidos para los contratos del servicio SOA CCUSU01 serán los aplicables, actualmente 50 registros. 

Conector JAX-WS

El conector JAX-WS no tiene soporte a paginación y su limitación sobre el número de resultados devueltos será la aplicable definida en los contratos de operación del servicio CCUSU01.

En caso de operar los servicios con paginación haciendo uso de este conector, se elevarán excepciones hasta la capa de servicio.