Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Subdirección de las Tecnologías de la Información y Comunicaciones

Área de Gobernanza y Calidad

Image RemovedImage Added



Contenido


Tabla de contenidos
maxLevel5
indent20px


Resumen
Sección
Columna
width85%
Sugerencia
  • Versión: 1 1.01.0
  • Fecha publicación:   
  • Entrada en vigor desde: 
Columna
width108px




Cumplimiento normativo

Advertencia

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

Este documento es una guia de desarrollo en continua evolución. Para cualquier duda o sugerencia por favor contante con nosotros.

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


Histórico de cambios

Expandir

Histórico de cambios

  • Añadido dos nuevos servicios para consultar, vía réplica de BBDD, usuarios y mutuas. Los cambios han sido los siguientes:

     Proyecto SAS.BduApiClient.Core

    • Boundary/Contracts/Repositories

      • IMutualidadRepository: Interfaz de mecanismos de obtención de información referente a mutuas utilizando la réplica de BBDD. 

                   

                    //Mecanismo de obtención de información de todas las mutuas. 

                     IList<MutualInsurance> GetMutualInsurance();

                    /// Mecanismo de obtencion de información de todas las mutuas que cumplen con el criterio.

                     IList<MutualInsurance> FindMutualInsurances(QuerysMutualInsuranceDto criteria);

                         

      • IUserRepository: Mecanismos de obtención de información referente a usuarios utilizando la réplica de BBDD.

                  

                    //Mecanismo de obtención de información referente un usuario.

                     IList<BduUser> FindUserWithDetailed(QuerysBduUserSearchDto criteria);

                    

                    // Mecanismo de obtencion de información de Bdu de solicitudes decreto. Devuelve valores de CONVENIO_AP, SITUACION_ACTUAL, CLAVE_MEDICA, VALIDADO, ESPECIALIDAD_CM de la tabla de BDU por nuhsa.

                     BduDecreeRequest FindBduElementsDecreeRequest(QuerysBduUserSearchDto criteria);   

    • Boundary/Contracts/Services

      • IMutualInsuranceService: Mecanismos de obtención de información referente a las mutuas vía réplica de BBDD.

                    

                        //Mecanismo de obtención de información de todas las mutuas. 

                          IList<MutualInsurance> GetMutualInsurance(IGenericAuthContext<object> petitionerMutua);

                        // Mecanismo de obtencion de información de todas las mutuas que cumplen con el criterio.

                        IList<MutualInsurance> FindMutualInsurances(IGenericAuthContext<object> petitionerMutua, QuerysMutualInsuranceDto criteria);

                     

    • Entity/dto  

      • QuerysMutualInsuranceDto**: Entidad para definir el criterio de búsqueda de mutuas

                    public decimal? Id { get; set; } // Identificador numérico de la mutua

            

    • Entity       

      • MutualInsurance: Compañía de seguros         

Proyecto BduApiClient

    • api/boundary

      • BduUserService: Mecanismos de obtención de información referente a los usuarios mediante réplicas de BBDD

      • MutualInsuranceService: Mecanismos de obtención de información referente a las mutuas utilizando la implementación de réplicas de BBDD.       

  Proyecto SAS.BduApiClient.ManagedDataAccess.Oracle
    Componente utilizado internamente por las clases servicios que se conenectan a BDU vía réplica.

Boundary

  • ConfigContextApiBduConnection. Configuración de conexiones a la réplica de BBDD de BDU

  • ManagedConfigBduConnection. Entidad de conexión a contexto

  • MutualidadRepository. Mecanismos de obtención de información referente a mutuas vía réplica de BBDD

  • UserRepository. Mecanismos de obtención de información referente a los usuarios vía réplica de BBDD

  •  Control/Mapper

    • MutualidadesMapper. Clase para realizar el mapeo de las entidades relacionadas con la Mutualidad.

    • MutualidadMapper. Clase para realizar el mapeo de las entidades relacionadas con la Mutualidad.

    • UsuarioBduMapper. Clase para realizar el mapeo de las entidades relacionadas con usuario BDU.

    • UsuarioBduSolicitudDecretoMapper. Clase para realizar el mapeo de las entidades relacionadas con la solicitud de decreto de usuario BDU.

    • UsuariosBduMapper. Clase para realizar el mapeo de las entidades relacionadas con usuarios BDU.

  • Entity

    • BduSolicitudDecreto. Entidad solicitud decreto de BDU.

    • Mutualidad. Entidad de mutualidad.

    • UsuarioBdu.  Entidad usuario BDU.

  • Entity/EntityFramework/Bdu

    • BduConexion.  Contexto de conexión a la replica de BDU. 

    • BduEntity. Entidad de BDU. 

    • BduManejadoConnect. Clase para utilizar la conexión de BDU en un contexto manejado

    • CausasPasivoEntity. Entidad de las causas pasivo.

    • ComunidadEntity. Entidad de comunidad.

    • FarmaciaTipoAportacionEntity. Entidad de farmacia tipo aportacion. 

    • FinanciacionEntity.  Entidad financiación. 

    • LocalidadEntity. Entidad de localidad.

    • MutualidadEntity. Entidad de mutualidad. 

    • PaisEntity. Entidad de pais.

    • SexoEntity. Entidad de sexo. 

    • SituacionActualEntity. Entidad de la situación actual.

    • TipoViaEntity. Entidad de tipo via. 

  • Entity/EntityFramework/Exception

    • ContextException. Contexto para la excepciones producidas en la conexión a la réplica de BBDD de BDU

  • Entity/EntityFramework/Projection  

    • BduProjection. Proyección de BDU.

    • CausasPasivoProjection. Proyección de las causas pasivo.

    • ComunidadProjection. Proyección de la comunidad.

    • FarmaciaTipoAportacionProjection. Proyección farmacia tipo aportacion.

    • FinanciacionProjection. Proyección financiación.

    • LocalidadProjection. Proyección de la localidad. 

    • MutualidadProjection.  Proyección de la mutualidad.

    • PaisProjection. Proyección del pais.

    • SexoProjection. Proyección del sexo.

    • SituacionActualProjection. Proyección de la situacion actual. 

    • TipoViaProjection. Proyección del tipo de via.   

  •   Proyecto SAS.BduApiClient.Core
        •  Boundary/Contracts/Services

          • IBduSearch: Interfaz del servicio de búsqueda de BDU

                         

                        //Búsqueda de usuarios, pasando como argumento información del usuario peticionario de la consulta y 

                        // criterio de búsqueda 

                        List<BduUser> FindUsers(IGenericAuthContext<T> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto);

                      

        • Entity/dto

          • QuerysBduUserSearchDto: Entidad para definir el criterio de la consulta de usuarios de BDU

                      

                        public List<string> Nuhsas { get; set; }    //Código nuhsas

                        public string SocialSecurityNumber { get; set; }  // Número de seguridad social

                        public string AffiliationNumber { get; set; } // Número de afiliación

                        public string NUHSA { get; set; }// Código NUHSA

                        public string CodSns { get; set; } // Código SNS

                        public string BirthDateYear { get; set; } //Fecha de nacimiento

                        public bool FarmaciaInfo { get; set; } //True si la consulta devolverá información de farmacia

                        public bool FullAddress { get; set; }  //True si la consulta devolverá información de la dirección completa del usuario 

                        public string DocumentIdType { get; set; }   // Tipo del identificador del documento

                        public string DocumentType { get; set; }   // Tipo de documento

                        public string DocumentId { get; set; }  //Identificador del documento

                        public string Name { get; set; }  //Nombre del usuario    

                        public string Surname { get; set; }       //Primer apellido del usuario

                        public string SecondSurname { get; set; }    // segundo apellido del usuario

                        public string ProvinceId { get; set; } //identificador de la provincia

                        public bool DetailedInfo { get; set; } // True si se desea mostrar información detallada

        • Entity

          • Address: Dirección del usuario

          • Adscription: Adscripción

          • BduDisplacement: Desplazamiento BDU. Deriva de la clase Displacement

          • BduUser: Usuario BDU

          • Displacement: Desplazamiento

          • NursingAdscription: Adscripción de Enfermería

          • TeamAdscription: Equipo de Adscripción      

    Expandir

    Versión

    1.4.0 Upgrade

    Fecha publicación

    Fecha entrada en vigor

    Alcance

    • Se realiza una reestructuración del proyecto para realizar una división en subcomponentes. De este modo se permite la instalación separada de las implementaciones WebService y Oracle del componente para el acceso a datos de Bdu según sea la necesidad.
      • Los componentes generados han sido los siguientes:
        • SAS.BduApiClient: Es el proyecto core de la API. Contiene diferentes tipos proporcionados por la API, como BduUser, Address etc, e interfaces para el acceso de datos de Usuarios, mutuas y decretos.

        • SAS.BduApiClient.Exceptions: Manejo de excepciones de negocio de Bdu.

        • SAS.BduApiClient.WebService: Implementación de acceso a los datos de Bdu vía servicio web.

        • SAS.BduApiClient.ManagedDataAccess.Oracle: Implementación vía Réplica de BBDD para acceder en Bdu a datos de mutuas y decretos. En caso de que no se requieran datos de mutuas y decretos no hay que instalar este componente.

    Se ha cambiado el nombre a la interfaz IBduUserManager y a la clase BduUserManager por IBduUserTransformer y WsBduUserTransformer respectivamente.

    El tipo EndPointType, en el que se define los tipos de endpoints del servicio web de BDU, se ha llevado al espacio de nombre SAS.BduApiClient.WebService.Api.Entity.EndPointType.

    Versión

    1.3.1 Bug fix

    Fecha publicación

    09-11-2020

    Fecha entrada en vigor

    09-11-2020

    Alcance

    • Corrección en la definición de determinadas clases Entity respecto a la

     definición
    • definición del esquema de BBDD y envío de la versión de la API en el campo user-agent de la invocación al servicio Web de BDU.

      
     Se
      • Se ha eliminado la definición de esquema de BBDD específico en las siguientes entidades:

        • ComunidadEntity

        • FarmaciaTipoAportacionEntity

        • FinanciacionEntity

        • LocalidadEntity

        • PaisEntity

        • SexoEntity

        • SituacionActualEntity

        • TipoViaEntity

      • En la clase proxy genérico, definida en bduApiClient/WebService/Boundary/WSBduManager.cs, al invocar al servicio web de BDU, se ha añadido

     la
      • la versión actual de la API en el campo User-Agent.

           

    Versión

    1.3.0 Upgrade

    Fecha publicación

    15-07-2020

    Fecha entrada en vigor

    15-07-2020

    Alcance

     Añadido
    • Añadido consulta para obtener las solicitudes de decreto por réplica de BBDD, en el que se filtra por NUHSA.

    Los cambios han sido los siguientes:

     Proyecto SAS.BduApiClient.Core

    • Boundary/Contracts/Repositories

      • IUserRepository: Mecanismos de obtención de información referente a usuarios utilizando la réplica de BBDD. Se ha añadido el siguiente método:

                   

                    // Mecanismo de obtencion de información de Bdu de solicitudes decreto. Devuelve valores de CONVENIO_AP, SITUACION_ACTUAL, CLAVE_MEDICA, VALIDADO, ESPECIALIDAD_CM de la tabla de BDU por nuhsa.

                     BduDecreeRequest FindBduElementsDecreeRequest(QuerysBduUserSearchDto criteria);

           

    • Boundary/Contracts/Services

      • IBduDecreeRequestService: Mecanismos de obtención de información referente a las solicitudes de decreto vía réplica de BBDD.

                  

                    //Mecanismo de obtencion de información de Bdu de solicitudes decreto.

                      BduDecreeRequest FindBduElementsDecreeRequest(IGenericAuthContext<object> petitionerBdu, QuerysBduUserSearchDto criteria);             

    • Entity

      • BduDecreeRequest: Petición de decreto

     Proyecto BduApiClient

    api/boundary

    BduDecreeRequestService: Mecanismos de obtención de información de bdu referente a una solicitud decreto de un usuario. Implementa la interfaz IBduDecreeRequestService

    Proyecto SAS.BduApiClient.ManagedDataAccess.Oracle
    Componente utilizado internamente por las clases servicios que se conenectan a BDU vía réplica. Se ha añadido lo siguiente: 

      • Boundary

               

        • UserRepository. Mecanismos de obtención de información referente a los usuarios vía réplica de BBDD

                   Se añade el siguiente mecanismo de obtencion de información de BDU de solicitudes decreto, el cual devuelve los valores de CONVENIO_AP, SITUACION_ACTUAL, CLAVE_MEDICA, VALIDADO, ESPECIALIDAD_CM de la tabla BDU filtrado por NUHSA:

                     public BduDecreeRequest FindBduElementsDecreeRequest(QuerysBduUserSearchDto criteria)  

      • Control/Mapper

               

          • UsuarioBduSolicitudDecretoMapper. Clase para realizar el mapeo de las entidades relacionadas con usuario BDU.   

      • Entity

               

        • BduSolicitudDecreto. Entidad solicitud decreto de BDU.             

    Versión

    1.2.0 Upgrade

    Fecha publicación

    08-06-2020

    Fecha entrada en vigor

    08-06-2020

    Alcance

    • Añadido posibilidad de definir el endpoint del servicio web de BDU por configuración

    • Permitir llamadas al servicio web de BDU vía HTTPS

    • Corregido minúsculas en el espacio de nombre api.boundary. Se ha cambiado a Api.Boundary.

    • Actualizada versión de MacoApiClient a la v2.4.3, la cual permite llamadas a su servicio web vía HTTPS

    Versión

    1.1.0 Upgrade

    Fecha publicación

    07-04-2020

    Fecha entrada en vigor

    07-04-2020

    Alcance

    Versión

    1.0.3 Deps Update

    Fecha publicación

    19-02-2020

    Fecha entrada en vigor

    19-02-2020

    Alcance

        Actualizada la versión del componente MacoApiClient a la v2.4.1, y la versión de oracle  a la v19.6

    Versión

    1.0.2 Bug fix

    Fecha publicación

    31-07-2019

    Fecha entrada en vigor

    31-07-2019

    Alcance

    • Corregido error en el mapeo de los datos de ContactInformation.

    • Actualizada versión de la librería de MacoApiClient a v2.0.1

    Versión

    1.0.1 Bug fix

    Fecha publicación

    23-04-2019

    Fecha entrada en vigor

    23-04-2019

    Alcance

          Se actualiza la versión del componente SASUtils.Xml por la v1.0.1, debido a un error en el método obtener texto del nodo XML

    Versión

    1.0.0 Versión inicial .NET Standard 2.0.

    Fecha publicación

    12-03-2019

    Fecha entrada en vigor

    12-03-2019

    Alcance

    SAS.BduApiClient

    Introducción

    En el presente documento se presenta la librería SAS.BduApiClient, componente .NET Standar 2.0, para el acceso a datos de BDU.
    Esta librería permite el acceso a los datos de BDU utilizando dos implementaciones diferentes: una que utiliza internamente el servicio web de BDU y otra que utiliza réplica de BBDD.

    La versión actual de la librería , en su versión acceso a réplica de BBDD, solo dispone de métodos para acceso a la información de mutuas, decretos y los datos principales de usuarios de BDU. 
                

    Dependencias

    Nombre del componenteVersiónDescripciónSystem.ServiceModel.Duplex4.5.3Proporciona clases para consumir y comunicarse con servicios DúplexSystem.ServiceModel.Http4.5.3Gestiona solicitudes realizadas a través del protocolo HTTPSystem.ServiceModel.NetTcp4.5.3Genera de forma predeterminada una pila de comunicación en tiempo de ejecución, que utiliza la seguridad de transporte, TCP para la entrega de mensajesSystem.ServiceModel.Security4.5.3Se encarga de temas generales relacionados con la seguridadSAS.Common.Core1.1.0Componente .NET común con clases e interfaces core de aplicacionesSAS.Common.Kernel1.1.0Componente .NET kernel de aplicaciones, como interfaz mapper o diversas utilidades linqSAS.MacoApiClient2.4.3Componente MacoApiClientSASUtils.Parse1.0.0Componente utilidad para la conversión entre tiposSASUtils.Xml1.0.1Componente .NET común para el tratamiento de XMLsSAS.Common.OracleProvider1.3.3Componente .NET común para la configuración del proveedor de BBDD OracleEntityFramework6.2.0ORM de Microsoft para .NETOracle.ManagedDataAccess19.6.0Proveedor de acceso a datos de Oracle para .NETOracle.ManagedDataAccess.EntityFramework19.6.0ORM de Oracle para .NET

    Errores conocidos

    • Bug al obtener texto de un nodo XML: Corregido desde de la version 1.0.1  (tic)

    Integración de la librería

    Acceder a nuget e instalar la librería SAS.BduApiClient.   

    Configuración

    Versión

    1.2.0 Upgrade

    Fecha publicación

    08-06-2020

    Fecha entrada en vigor

    08-06-2020

    Alcance

    • Añadido posibilidad de definir el endpoint del servicio web de BDU por configuración

    • Permitir llamadas al servicio web de BDU vía HTTPS

    • Corregido minúsculas en el espacio de nombre api.boundary. Se ha cambiado a Api.Boundary.

    • Actualizada versión de MacoApiClient a la v2.4.3, la cual permite llamadas a su servicio web vía HTTPS

    Versión

    1.1.0 Upgrade

    Fecha publicación

    07-04-2020

    Fecha entrada en vigor

    07-04-2020

    Alcance

    • Añadido dos nuevos servicios para consultar, vía réplica de BBDD, usuarios y mutuas.

    Versión

    1.0.3 Deps Update

    Fecha publicación

    19-02-2020

    Fecha entrada en vigor

    19-02-2020

    Alcance

    Actualizada la versión del componente MacoApiClient a la v2.4.1, y la versión de oracle a la v19.6

    Versión

    1.0.2 Bug fix

    Fecha publicación

    31-07-2019

    Fecha entrada en vigor

    31-07-2019

    Alcance

    • Corregido error en el mapeo de los datos de ContactInformation.

    • Actualizada versión de la librería de MacoApiClient a v2.0.1

    Versión

    1.0.1 Bug fix

    Fecha publicación

    23-04-2019

    Fecha entrada en vigor

    23-04-2019

    Alcance

    Se actualiza la versión del componente SASUtils.Xml por la v1.0.1, debido a un error en el método obtener texto del nodo XML

    Versión

    1.0.0 Versión inicial .NET Standard 2.0.

    Fecha publicación

    12-03-2019

    Fecha entrada en vigor

    12-03-2019

    Alcance


    Versión inicial de la librería de tipo .NET Standard 2.0

    SAS.BduApiClient

    Introducción


    En el presente documento se presenta la librería SAS.BduApiClient, componente .NET Standar 2.0, para el acceso a datos de BDU.
    Esta librería permite el acceso a los datos de BDU utilizando dos implementaciones diferentes: una que utiliza internamente el servicio web de BDU y otra que utiliza réplica de BBDD.

    La versión actual de la librería , en su versión acceso a réplica de BBDD, solo dispone de métodos para acceso a la información de mutuas, decretos y los datos principales de usuarios de BDU.

    Se recomienda la instalación de la versión de la librería .NET Standard 2.0, en su versión Servicio Web, compatible con .NET Framework desde la versión 4.6.1 de .NET Framework.

    Dependencias


    Nombre del componenteVersiónDescripción
    System.ServiceModel.Duplex4.5.3Proporciona clases para consumir y comunicarse con servicios Dúplex
    System.ServiceModel.Http4.5.3Gestiona solicitudes realizadas a través del protocolo HTTP
    System.ServiceModel.NetTcp4.5.3Genera de forma predeterminada una pila de comunicación en tiempo de ejecución, que utiliza la seguridad de transporte, TCP para la entrega de mensajes
    System.ServiceModel.Security4.5.3Se encarga de temas generales relacionados con la seguridad
    SAS.Common.Core1.1.0Componente .NET común con clases e interfaces core de aplicaciones
    SAS.Common.Kernel1.1.0Componente .NET kernel de aplicaciones, como interfaz mapper o diversas utilidades linq
    SAS.MacoApiClient2.5.0Componente core de MacoApiClient
    SAS.MacoApiClient.WebServices2.5.0Componente MacoApiClient para el acceso a datos de Maco utilizando los servicios web de Maco
    SAS.MacoApiClient.Exceptions2.5.0Componente MacoApiClient para el control de excepciones
    SASUtils.Parse1.0.0Componente utilidad para la conversión entre tipos
    SASUtils.Xml1.0.1Componente .NET común para el tratamiento de XMLs
    SAS.Common.OracleProvider1.3.3Componente .NET común para la configuración del proveedor de BBDD Oracle
    EntityFramework6.2.0ORM de Microsoft para .NET
    Oracle.ManagedDataAccess19.6.0Proveedor de acceso a datos de Oracle para .NET
    Oracle.ManagedDataAccess.EntityFramework19.6.0ORM de Oracle para .NET

    Errores conocidos


    • Bug al obtener texto de un nodo XML: Corregido desde de la version 1.0.1 (tic)

    Integración de la librería


    Configurar en Visual Studio un nuevo origen de paquetes Nuget ( clic en “Administrar Paquetes Nuget …” del proyecto al que se desea añadir la referencia el componente BduApiClient) indicando en el campo Origen la dirección de repositorios de componentes .NET del SAS: http://net.lib.repository.alm.sas.junta-andalucia.es/.

    Versión API < 1.4.0

      • Instalar el componente SAS.BduApiClient.

    Versión API >= 1.4.0

      • Instalar el componente SAS.BduApiClient.WebService para el acceso a datos de Bdu utilizando los servicios web de BDU.
      • Solo en el caso de que se necesite consultar datos de mutuas y decretos, instalar el componente SAS.BduApiClient.ManagedDataAccess.Oracle.

    Configuración

    Prerequisitos

    Previo a la configuración de la librería se debe de disponer de los siguientes datos proporcionados por la Oficina Técnica de Interoperabilidad:

    • Código del módulo del sistema en Maco. Se corresponde con el código en el que está identificado el sistema en Maco.


    Procedimiento de configuración


    La configuración de la API depende del tipo de implementación de servicios que se vaya a utilizar, según se acceda a los datos mediante el Servicio Web de BDU o mediante réplicas de BBDD. Veamos cada una de ellas:

    En ambos ejemplos se utiliza como base un proyecto .NET MVC.

    Primero, en el fichero Startup.cs, método ConfigureServices, se inicializa el contenedor de inyección de dependencia:

    Bloque de código
    languagec#
    title1 Inicializar contenedor de inyección de dependencia ContainerDI
     public void ConfigureServices(IServiceCollection services)
            {
              ...
              ContainerDI.SetAsyncScopedLifestyle(); // establecer estilo de vida por defecto del contenedor de inyección. Permite procesar tanto operaciones asíncronas como síncronas
              ContainerDI.RegisterServices(ref services); 
            ...
          } 
    



    ContainerDI, clase del componente común SAS.Util.Injection, el cual permite el registro por inyección de dependencia de los diferentes servicios y tipos utilizados en el sistema.


    • Configuración de la API para acceder al Servicio Web de BDU
      En el fichero appsettings.json se define una sección en la que se establece el código del módulo en MACO y en otra sección, el endpoint del servicio web de BDU.

      Bloque de código
      languagec#
      title2 Configuración de los parámetros de BDU en fichero de configuración
        "MacoApiClient": {
            "MacoModule": "XXX" // el código concreto hay que solicitarlo a la OTI
        },
       "WebServiceLocator": {
          "ServiceAddressBdu": "https://servicios.pre.sas.junta-andalucia.es/",
          "EndPointAddressBduSolicitud": "/usuario/wsBDU.ashx"
        }
      

    En el fichero Startup.cs, método Configure(IApplicationBuilder app, IHostingEnvironment env), añadir la siguiente configuración de los controladores , viewcomponents de MVC y la llamada al nuevo método InitializeContainer:


    Bloque de código
    languagec#
    title3 Registrar controladores y ViewComponents
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                ContainerDI.RegisterMvcControllers(ref app);
                ContainerDI.RegisterMvcViewComponents(ref app);          
    
                this.InitializeContainer();
               ...
            }
    



    A continuación, en el fichero Startup.cs, crear el método void InitializeContainer() y añadir la siguiente configuración para registrar por inyección de dependencia los diferentes servicios utilizados de la API:

    Image Added

    Inyeccción de dependencias

    En el caso de que no se desee utilizar el inyector de dependencia ContainerDI, la versión 1.4.0 del componente SAS.BduApiClient.WebService permite la configuración de la inyección de dependencia utilizando el inyector por defecto de .NET, del siguiente modo .

    Bloque de código
    languagecpp
     services.AddBduWSServices(bduApiConfig );

    Se le pasan como argumentos el objeto configuración de la API. Este método se encuentra en el espacio de nombre SAS.BduApiClient.WebService.IoC.


    Configuración del servicio de búsqueda de BDU que utiliza internamente el servicio web de BDU

    Bloque de código
    languagec#
    title4 Registrar el servicio de búsqueda de BDU
       private void InitializeContainer()
            {        
                #region Registrar BDU
       				ContainerDI.Register<IBduSearch<MacoUser>, BduSearch>(ContainerDI.LifeStyleContainer.Transient);
    

    Configuración de la API de BDU, indicando url principal de BDU y código de la aplicación en MACO

    Bloque de código
    languagec#
    title5 Configuración de la API de BDU
       var bduApiConfig = new BduApiConfig(Configuration.GetSection("WebServiceLocator:ServiceAddressBdu").Value, Configuration.GetSection("MacoApiClient:MacoModule").Value){};

    Configuración el endpoint del Servicio web de BDU


    Bloque de código
    languagec#
    title6 Configuración del endpoint del servicio de BDU
    bduApiConfig.EndPoints = new Dictionary<BduApiClient.WebService.Api.Entity.EndPointType, string>
                {
                    { SAS.BduApiClient.WebService.Api.Entity.EndPointType.Solicitud, Configuration.GetSection("WebServiceLocator:EndPointAddressBduSolicitud").Value }
                }; 

    Image Added

    Breaking changes

    En las versiones anteriores a 1.4.0, el enumerado EndPointType tenía el espacio de nombre SAS.BduApiClient.Api.Entity .

    Registro del tipo BDUApiConfig que implementa la interfaz de configuración de BDU, IBduApiConfig

    Bloque de código
    languagec#
    title7 Registro del tipo BduApiConfig que implementa la interfaz IBduApiConfig
        ContainerDI.Register<IBduApiConfig>(() => bduApiConfig,  ContainerDI.LifeStyleContainer.Transient);


    Registro del tipo WSBduUserTransformer, que implementa la interfaz IBduUserTransformer. Realiza la transformación de los mensajes XML recibidos del servicio web de BDU a objetos.

    Bloque de código
    languagec#
    title8 Registrar el servicio de transformación de datos de BDU
         ContainerDI.Register<IBduUserTransformer , WSBduUserTransformer >(ContainerDI.LifeStyleContainer.Transient);

    Image Added

    Breaking changes

    En la versión 1.4.0, se ha cambiado el nombre a la interfaz IBduUserManager y a la clase BduUserManager por IBduUserTransformer y WSBduUserTransformer respectivamente.

    Registro del tipo BduExceptionManager, que implementa la interfaz IBduExceptionManager. Se encarga de gestionar las excepciones y errores informados del servicio web de BDU.

    Bloque de código
    languagec#
    title9 Registrar el tipo BduExceptionManager
     ContainerDI.Register<IBduExceptionManager, BduExceptionManager>(ContainerDI.LifeStyleContainer.Transient); 


    Registro del tipo WsBduManager, que implementa la interfaz IWsBduManager. Es la clase wrapper encargada de llamar a los servicios web de BDU.

    Bloque de código
    languagec#
    title10 Registrar el servicio WsBduManager
      ContainerDI.Register<IWsBduManager, WsBduManager>(ContainerDI.LifeStyleContainer.Transient); 
     } 


    • Configuración de la API versión Réplica de BBDD


    Registro del servicio IConfigContextApiConnection, configuración del contexto de BBDD con el tipo concreto ConfigContextApiBduConnection. Recibe como parámetros la cadena de conexión de la réplica, en este caso del fichero de configuración app.config, tipo de esquema BDU y nombre del esquema de la BBDD.

    Bloque de código
    languagec#
    title11 Registrar el contexto de BBDD de Bdu
    private void InitializeContainer()
            {
    ...
        #region Registrar BDU
        // Conexion a la réplica de BDU
    
              var configContextApiBduConnection =  new ConfigContextApiBduConnection(new ManagedConfigConnectionBase<SchemaType>[]
                    {
                        new ManagedConfigConnectionBase<SchemaType>(ConfigurationManager.ConnectionStrings["BDUConnection"].ConnectionString, SchemaType.Bdu, "NOMBRE DEL ESQUEMA")
                    });
                ContainerDI.Register<IConfigContextApiConnection<SchemaType>>(() => configContextApiBduConnection  , ContainerDI.LifeStyleContainer.Transient);
    
    

    Registro del servicio BduUserService, que implemeneta la interfaz IBduSearch. Permite el acceso a datos de usuario vía réplica de BBDD.

    Bloque de código
    languagec#
    title12 Registrar el servicio BduUserService
        ContainerDI.Register<IBduSearch<object>, BduUserService>(ContainerDI.LifeStyleContainer.Transient);


    Registro del servicio MutualInsuranceService, que implementa la interfaz IMutualInsuranceService, para el acceso a datos de mutuas vía réplica de BBDD.

    Bloque de código
    languagec#
    title13 Registrar el servicio MutualInsuranceService
      ContainerDI.Register<IMutualInsuranceService<object>, MutualInsuranceService>(ContainerDI.LifeStyleContainer.Transient);

    Registro del servicio BduDecreeRequestService, que implemeneta la interfaz IBduDecreeRequestService, para el acceso a datos de decretos vía réplica de BBDD.

    Bloque de código
    languagec#
    title14 Registrar el servicio BduDecreeRequestService
      ContainerDI.Register<IBduDecreeRequestService<object>, BduDecreeRequestService>(ContainerDI.LifeStyleContainer.Transient);

    Registro del tipo UserRepository que implementa la interfaz IUserRepository. Repositorio encargado de acceder a datos de usuario vía réplica de BBDD.

    Bloque de código
    languagec#
    title15 Registrar el repositorio UserRepository
       ContainerDI.Register<IUserRepository, UserRepository>(ContainerDI.LifeStyleContainer.Transient);


    Registro del tipo MutualidadRepository que implementa la interfaz IMutualidadRepository. Repositorio encargado de acceder a datos de mutualidad vía réplica de BBDD.

    Bloque de código
    languagec#
    title16 Registrar el repositorio MutualidadRepository
      ContainerDI.Register<IMutualidadRepository, MutualidadRepository>(ContainerDI.LifeStyleContainer.Transient);
         
             #endregion
                ...
            } 





    Image Added

    Inyeccción de dependencias

    En el caso de que no se desee utilizar el inyector de dependencia ContainerDI, la versión 1.4.0 del componente SAS.BduApiClient.ManagedDataAccess.Oracle permite la configuración de la inyección de dependencia utilizando el inyector por defecto de .NET, del siguiente modo.


    Bloque de código
    services.AddBduOracleServices(configContextApiBduConnection );


    Se le pasa como argumento la configuración del contexto de BDU. Este método se encuentra en el espacio de nombre SAS.BduApiClient.ManagedDataAccess.Oracle.IoC.

    A continuación se presenta el código completo del ejemplo de configuración :


    Bloque de código
    languagec#
    title17 Ejemplo de configuración de la librería utilizando el inyector de dependencia ContainerDI
    collapsetrue
    public class Startup
    {
    	public Startup(IConfiguration configuration)
    	{
    		Configuration = configuration;
    	}
    
    	public IConfiguration Configuration { get; }
    
    
    	// This method gets called by the runtime. Use this method to add services to the container.
    	public void ConfigureServices(IServiceCollection services)
    	{
    		...
    
    		ContainerDI.SetAsyncScopedLifestyle();
    		ContainerDI.RegisterServices(ref services); 
    	}
    
    	// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    	public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    	{
    		ContainerDI.RegisterMvcControllers(ref app);
    		ContainerDI.RegisterMvcViewComponents(ref app);
    
    		app.UseDeveloperExceptionPage();
    
    		this.InitializeContainer(); 
    
    		...
    	}
    
    	/// <summary>
    	/// Inicializador de contenedor utilizando el inyector de dependencia ContainerDI.
    	/// </summary>
    	private void InitializeContainer()
    	{
            ...
    		#region registrar BDU
    			ContainerDI.Register<IUserService, UserService>(ContainerDI.LifeStyleContainer.Transient);
    			ContainerDI.Register<IBduUseCase, BduUseCase>(ContainerDI.LifeStyleContainer.Transient);
    			ContainerDI.Register<IBduSearch<MacoUser>, BduSearch>(ContainerDI.LifeStyleContainer.Transient);
    
    			var bduApiConfig = new BduApiConfig(Configuration.GetSection("WebServiceLocator:ServiceAddressBdu").Value, Configuration.GetSection("MacoApiClient:MacoModule").Value)
    			{
    			};
    			bduApiConfig.EndPoints = new Dictionary<BduApiClient.WebService.Api.Entity.EndPointType, string>
    			{
    				{ SAS.BduApiClient.WebService.Api.Entity.EndPointType.Solicitud, Configuration.GetSection("WebServiceLocator:EndPointAddressBduSolicitud").Value }
    			};
    
    			ContainerDI.Register<IBduApiConfig>(() => bduApiConfig, ContainerDI.LifeStyleContainer.Transient);
    			ContainerDI.Register<IBduUserTransformer, WSBduUserTransformer>(ContainerDI.LifeStyleContainer.Transient);
    			ContainerDI.Register<IBduExceptionManager, BduExceptionManager>(ContainerDI.LifeStyleContainer.Transient);
    			ContainerDI.Register<IBduService, BduService>(ContainerDI.LifeStyleContainer.Transient);
    
    			ContainerDI.Register<IWsBduManager, WsBduManager>(ContainerDI.LifeStyleContainer.Transient);
    			ContainerDI.Register<IBduFactory>(() => new BduFactory(bduApiConfig), ContainerDI.LifeStyleContainer.Transient);
    
                //descomentar en caso de consultar datos de mutuas vía réplica de BBDD
     			//var configContextApiBduConnection =  new ConfigContextApiBduConnection(new ManagedConfigConnectionBase<SchemaType>[]                 
    			//{                     
    				//new ManagedConfigConnectionBase<SchemaType>(ConfigurationManager.ConnectionStrings["BDUConnection"].ConnectionString, SchemaType.Bdu, "NOMBRE DEL ESQUEMA")                 
    			//});             
    			//ContainerDI.Register<IConfigContextApiConnection<SchemaType>>(() => configContextApiBduConnection  , ContainerDI.LifeStyleContainer.Transient);
     			//ContainerDI.Register<IBduSearch<object>, BduUserService>(ContainerDI.LifeStyleContainer.Transient);
     			//ContainerDI.Register<IMutualInsuranceService<object>, MutualInsuranceService>(ContainerDI.LifeStyleContainer.Transient);
    
     			//ContainerDI.Register<IBduDecreeRequestService<object>, BduDecreeRequestService>(ContainerDI.LifeStyleContainer.Transient);
     			//ContainerDI.Register<IUserRepository, UserRepository>(ContainerDI.LifeStyleContainer.Transient);
    			//ContainerDI.Register<IMutualidadRepository, MutualidadRepository>(ContainerDI.LifeStyleContainer.Transient);
    
    		#endregion registrar BDU
    	}
    }
    Bloque de código
    languagec#
    title18 Ejemplo de configuración de la librería utilizando el inyector de dependencia por defecto de .NET
    collapsetrue
    public class Startup
    {
    	public Startup(IConfiguration configuration)
    	{
    		Configuration = configuration;
    	}
    
    	public IConfiguration Configuration { get; }
    
    
    	// This method gets called by the runtime. Use this method to add services to the container.
    	public void ConfigureServices(IServiceCollection services)
    	{
    		...
            #region configuración BDU
    			var bduApiConfig = new BduApiConfig(Configuration.GetSection("WebServiceLocator:ServiceAddressBdu").Value, Configuration.GetSection("MacoApiClient:MacoModule").Value)
    			{
    			};
    			bduApiConfig.EndPoints = new Dictionary<BduApiClient.WebService.Api.Entity.EndPointType, string>
    			{
    				{ SAS.BduApiClient.WebService.Api.Entity.EndPointType.Solicitud, Configuration.GetSection("WebServiceLocator:EndPointAddressBduSolicitud").Value }
    			}; 
    	        services.AddBduWSServices(bduApiConfig);
    
    
    	        //descomentar en caso de consultar datos de mutuas vía réplica de BBDD 
    	        //var configContextApiBduConnection =  new ConfigContextApiBduConnection(new ManagedConfigConnectionBase<SchemaType>[]                 
    	       //{                     
    	           //new ManagedConfigConnectionBase<SchemaType>(ConfigurationManager.ConnectionStrings["BDUConnection"].ConnectionString, SchemaType.Bdu, "NOMBRE DEL ESQUEMA")                 
    			//});             
    			//services.AddBduOracleServices( configContextApiBduConnection );
    	     #endregion 
    	}	
    }
    

    Criterios


    El objeto QuerysBduUserSearchDto, es la representación de los criterios de búsqueda que son soportados por la 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). Valor por defecto: False
      • FarmaciaInfo: Booleano indicando si se desea la información detallada sobre farmacia. Valor por defecto: False
      • FullAddress: Booleano indicando si se desea la información detallada del domicilio del paciente. Valor por defecto: False.
    • Identificadores de usuario único
      • NUHSA: Alfanumérico.
      • CodSns: Alfanumérico.
      • SocialSecurityNumber: Alfanumérico.
      • AffiliationNumber: Alfanumérico
      • Nuhsas: Lista de códigos NUHSA
      • DocumentIdType + DocumentType + DocumentId: permite identificar un paciente por el identificador definido.
    • Filtros de búsqueda
      • BirthDateYear: Alfanumérico.
      • Name: Nombre del paciente
      • Surname: Primer apellido del paciente
      • SecondSurname: Segundo apellido del paciente

    Antes de realizar la búsqueda de usuarios vía réplica de BBDD, se valida que el objeto criterio de búsqueda QuerysBduUserSearchDto cumpla las siguientes condiciones:

      • El objeto QuerysBduUserSearchDto no puede ser nulo
      • No pueden ser nulo los siguientes atributos: SocialSecurityNumber, AffiliationNumber, NUHSA, CodSns, DocumentId
      • Al menos se deben de especificar dos campos de entre: Name, Surname, SecondSurname

    Métodos de servicio

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

    • Búsqueda de usuarios (consula detallada/corta)
      La búsqueda de usuarios se realizará mediante los métodos "findUsers" que soportan el criteria descrito anteriormente

    Image Added

    Breaking changes

    La versión actual del componente SAS.BduApiClient.ManagedDataAccess.OracleActualmente, versión réplica de la API, sólo se permite la consulta detallada.

    • Búsqueda información de mutuas (sólo modo réplica de BBDD)
      - Listado de mutualidades
      - Listado de mutualidades que cumplen con un criterio
    • Búsqueda información de decretos (sólo modo réplica de BBDD)
      - Búsqueda de información de solicitud de decreto que cumple un criterio

    Uso


    A continuación se describe el uso de la librería.

    Funcionalidades utilizando Servicio Web de BDU

    • Búsqueda de usuarios

    Una vez realizada la configuración de la API, se siguen los siguientes pasos para realizar una búsqueda de usuarios utilizando el servicio Web de BDU.

    En la clase donde se va a añadir esta funcional, BduService en el ejemplo, añadir al constructor un objeto de tipo IBduSearch: IBduSearch<MacoUser> bduSearch.

    Bloque de código
    languagec#
    title19 Constructor de la clase que llamará a los métodos de la API BDU
           ...
           public class BduService: IBduService
            {
                private IBduSearch<MacoUser> _bduSearch;
                public BduService(IBduSearch<MacoUser> bduSearch)
                {
                    _bduSearch = bduSearch;
                }
               ...
            }

    Añadir un método, FindUsers en el ejemplo, con los siguientes parámetros: IGenericAuthContext<MacoUser> petitionerUser y QuerysBduUserSearchDto querysBduUserSearchDto. El primero hace referencia al usuario Maco peticionario de la llamada y el segundo los criterial de la query que se va a realizar.

    Llamar al método FindUsers del servicio de BDU, _bduSearch en el ejemplo, pasando como parámetro el usuario peticionario y la query, petitionerUser y queryBduUserSearchDto en el ejemplo.

    Por último, se hace el mapping entre el tipo usuario BDU devuelto por la API y el propio del sistema que realiza la llamada.


    Bloque de código
    languagec#
    title20 Método que busca usuarios en BBDD
        
                public List<BduUser> FindUsers(IGenericAuthContext<MacoUser> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto)
                {
                    List<BduUser> resultFindUsers = new List<BduUser>();
                    var result = _bduSearch.FindUsers(petitionerUser, querysBduUserSearchDto);
                    foreach (SAS.BduApiClient.Api.Entity.BduUser bduUser in result)
                    {
                        var bduUserLocal = new BduUser();
                        bduUserLocal.Name = bduUser.Name;
                        bduUserLocal.FirstSurname = bduUser.FirstSurname;
                        bduUserLocal.SecondSurname = bduUser.SecondSurname;
                        //en un mapping hacer resto de campos
                        resultFindUsers.Add(bduUserLocal);
                    }
                    return resultFindUsers;
                }       


    El código completo del ejemplo que consulta datos de usuarios vía Réplica de BBDD se muestra a continuación:

    Bloque de código
    languagec#
    title21 Ejemplo completo de búsqueda de usuarios en BBDD
    collapsetrue
        using SAS.MacoApiClient.User.Entity;
        using SAS.Common.Core.Boundary.Contracts;
        using SAS.BduApiClient.Api.Boundary;
        using SAS.BduApiClient.Api.Entity.dto;
    
           public class BduService: IBduService
            {
                private IBduSearch<MacoUser> _bduSearch;
                public BduService(IBduSearch<MacoUser> bduSearch)
                {
                    _bduSearch = bduSearch;
                }
        
                public List<BduUser> FindUsers(IGenericAuthContext<MacoUser> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto)
                {
                    List<BduUser> resultFindUsers = new List<BduUser>();
                    var result = _bduSearch.FindUsers(petitionerUser, querysBduUserSearchDto);
                    foreach (SAS.BduApiClient.Api.Entity.BduUser bduUser in result)
                    {
                        var bduUserLocal = new BduUser();
                        bduUserLocal.Name = bduUser.Name;
                        bduUserLocal.FirstSurname = bduUser.FirstSurname;
                        bduUserLocal.SecondSurname = bduUser.SecondSurname;
                        //en un mapping hacer resto de campos
                        resultFindUsers.Add(bduUserLocal);
                    }
                    return resultFindUsers;
                }
            }


    Crear la interfaz IBduService que implementa la clase BduService:

    Bloque de código
    languagec#
    title22 Definición de la interfaz IBduService
      public interface IBduService
        {
            List<BduUser> FindUsers(IGenericAuthContext<MacoUser> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto);
        }


    La clase que se haya creado para añadir la funcionalidad de búsqueda de usuarios se debe registrar en la clase Startup.cs, método InitializeContainer(), al igual que el resto de servicio y tipos. Continuando con el ejemplo:

    Bloque de código
    languagec#
    title23 Registrar la clase servicio que implementa la interfaz IBduService con el inyector de dependencia ContainerDI
      ContainerDI.Register<IBduService, BduService>(ContainerDI.LifeStyleContainer.Transient);

    o si se declara con el inyector de dependencia por defecto de .NET:

    Bloque de código
    languagec#
    title24 Registrar la clase servicio que implementa la interfaz IBduService con el inyector de dependencia por defecto de .NET
      services.AddTransient<IBduService, BduService>(); 


    Funcionalidades utilizando la réplica de BDU

    • Búsqueda de usuarios
      La búsquea de usuarios se realiza del mismo modo que se explica en el punto anterior. Únicamente hay que tener encuenta que el servicio que implementa la interfaz IBduSearch es, en este caso, SAS.BduApiClient.ManagedDataAccess.Oracle.Boundary.BduUserService (ver Configuración de la API versión Réplica de BBDD) y que en modo réplica, y en la versión actual de la librería, sólo se puede especificar la consulta detallada.
    • Información de Mutuas
      Para consultar información de mutuas, se realiza los siguientes pasos:

    En la clase donde vamos a llamar a los diferentes métodos de la API de BDU, BduService en el ejemplo, definimos un objeto interfaz de tipo servicio de mutuas IMutualInsuranceService. Será el objeto utilizado para acceder a los datos de mutuas.

    En el método constructor de la clase donde vamos a utilizar la funcionalidad de mutuas, se añade un objeto de tipo IMutualInsuranceService: IMutualInsuranceService<object> servicioMutua;

    Bloque de código
    languagec#
    title25 Constructor de la clase que llamará a los métodos de la API BDU
    public class BduService : IBduService
    { 
    /// <summary>
    /// Interfaz de servicio al componente de bdu para la mutuas
    /// </summary>
    private readonly IMutualInsuranceService<object> servicioMutua;
     
    public BduService( IMutualInsuranceService<object> servMutua)
    {
    	this.servicioMutua = servMutua; 
    }


      • Listado de mutuas.

    A continuación se llama al método GetMutualInsurance del servicio, pasando como parámetro peticionario un null: servicioMutua.GetMutualInsurance(null);, tal y como se observa en el método GetMutuas() del ejemplo:


    Bloque de código
    languagec#
    title26 Método que obtiene listado mutuas de BBDD
    /// <summary>
    /// Método que obtiene todas las mutuas.
    /// </summary>
    /// <returns>Listado de mutuas aseguradoras.</returns>
    public List<MutuaAseguradora> GetMutuas()
    {
    	var mut = this.servicioMutua.GetMutualInsurance(null);
    	List<MutuaAseguradora> domMut = new List<MutuaAseguradora>();
    
    	if (mut != null)
    	{
    		foreach (var item in mut)
    		{
    			domMut.Add(new MutuaAseguradora(item.Id,item.Description));
    		}
    	}
    
    	return domMut;
    }

    Image Added

    Breaking changes

    El parámetro peticionario es null debido a que en la réplica no se registra peticionario de la consulta. En un futuro servicio web de mutuas sí podría ser necesario el parámetro peticionario definido en la interfaz para su registro.


      • Búsqueda de mutuas que cumplen una determinada condición

    En este caso se llamaría al método FindMutualInsurances, que recibe como parámetros el peticionario y el criterio de búsqueda de mutuas, tal y como se observa en el método GetMutuaById del ejemplo::

    Bloque de código
    languagec#
    title27 Método que obtiene mutua por id
     /// <summary>
    /// Método que obtiene una mutua por su codigo de identificacion.
    /// </summary>
    /// <returns>Codigo y descripcion de la mutua aseguradora.</returns>
    public MutuaAseguradora GetMutuaById(decimal? codigo)
    {
    	if (codigo != null)
    	{
    		var item= this.servicioMutua.FindMutualInsurances(null, new QuerysMutualInsuranceDto { Id = codigo ?? 0 });
            if (item!= null) return new MutuaAseguradora(item.Id,item.Description);
            else
    		return null;
    	}
    	else
    	return null;
    }



    • Información de decretos

    Para consultar información de decretos, realizamos los siguientes pasos:

    En el constructor de la clase donde vamos a utilizar la funcionalidad de decretos, se añade un objeto de tipo IBduDecreeRequestService: IBduDecreeRequestService<object> servicioDecretos;

    Bloque de código
    languagec#
    title28 Constructor de la clase que llamará a los métodos de la API BDU
    public class BduService : IBduService { 
     /// <summary>
    /// Interfaz de servicio al componente de bdu para las mutuas.
    /// </summary>
    private readonly IBduDecreeRequestService<object> servicioDecretos;
    
    public BduService( IBduDecreeRequestService<object> servicioDecretos) 
    { 
       this.servicioMutua = servMutua; 
    }
    
    ...
    }


    A continuación se llama al método public BduDecreeRequest FindBduElementsDecreeRequest(IGenericAuthContext<object> petitionerBdu, QuerysBduUserSearchDto criteria), que recibe como parámetros el peticionario y el criterio de búsqueda.


    En el atributo peticionario se le pasaría un null y en criteria el criterio de búsqueda QuerysBduUserSearchDto, con el NUHSA relleno. Devuelve un objeto petición de decreto con los siguientes valores de la tabla BDU por NUHSA:


      • SITUACION_ACTUAL: Situacion del paciente en BDU en el momento de la inscripcion en el Registro (0=Vigente, 1=Pasivo)
      • CLAVE_MEDICA: Clave medica del paciente en BDU en el momento de la inscripcion en el Registro
      • VALIDADO: Indica si los datos del paciente en BDU estaban validados en el momento de la inscripcion en el Registro (0=Si, 1=No)
      • ESPECIALIDAD_CM: Especialidad de la clave medica del paciente en BDU en el momento de la inscripcion (G=General, P=Pediatrica)


    Bloque de código
    languagec#
    title29 Método búsqueda de petición de decretos
    List<BduDecreeRequest> FindDecreeRequest( QuerysBduUserSearchDto querysBduUserSearchDto)
    {
    	var listaBduDecreeRequest = this.servicioDecretos.FindBduElementsDecreeRequest(null, querysBduUserSearchDto);
    	List<PeticionDecreto> listaPeticionDecreto = new List<PeticionDecreto>();
    
    
    	if (listaBduDecreeRequest != null)
    	{
    		foreach (var item in listaBduDecreeRequest)
    		{
                var peticionDecreto = new PeticionDecreto()
                  {
                     Nuhsa = item.Nusa,
                     ClaveMedica= item.Clave_Medica,                
                     EspecialidadCm = item.Especialidad_Cm,
                     SituacionActual = item.Situacion_Actual,
                     Validado = item.Validado
                   };
    
    			listaPeticionDecreto.Add( peticionDecreto );
    		}
    	}
    
    	return listaPeticionDecreto; 
    }


    El código completo del ejemplo de consulta de datos de mutuas y decretos se muestra a continuación:

    Bloque de código
    languagec#
    title30 Ejemplo de búsqueda de mutuas y decretos
    collapsetrue
    public class BduService : IBduService {
    
    /// <summary>
    /// Interfaz de servicio al componente de bdu para la mutuas
    /// </summary>
    private readonly IMutualInsuranceService<object> servicioMutua;
    
    /// <summary>
    /// Interfaz de servicio al componente de bdu para las decretos.
    /// </summary>
    private readonly IBduDecreeRequestService<object> servicioDecretos;
    
    
    
    public BduService( IMutualInsuranceService<object> servMutua, IBduDecreeRequestService<object> servicioDecretos)
    {
    
    	this.servicioMutua = servMutua;
    	this.servicioDecretos = servicioDecretos;
    }
    
    /// <summary> /// Método que obtiene todas las mutuas. 
    /// </summary> /// <returns>Listado de mutuas aseguradoras.</returns> 
    public List<MutuaAseguradora> GetMutuas() { 
    	var mut = this.servicioMutua.GetMutualInsurance(null); 
    	List<MutuaAseguradora> domMut = new List<MutuaAseguradora>(); 
    	
    	if (mut != null) { 
    		foreach (var item in mut) { 
    			domMut.Add(new MutuaAseguradora(item.Id,item.Description)); 
    		}
    	 }
     return domMut; 
    }
    
    /// <summary>
    /// Método que obtiene una mutua por su codigo de identificacion.
    /// </summary>
    /// <returns>Codigo y descripcion de la mutua aseguradora.</returns>
    public MutuaAseguradora GetMutuaById(decimal? codigo)
    {
    	if (codigo != null)
    	{
    		var item= this.servicioMutua.FindMutualInsurances(null, new QuerysMutualInsuranceDto { Id = codigo ?? 0 });
    		if (item!= null) return new MutuaAseguradora(item.Id,item.Description);
    		else
    			return null;
    	}
    	else
    		return null;
    }
    
    List<BduDecreeRequest> FindDecreeRequest( QuerysBduUserSearchDto querysBduUserSearchDto)
    {
    	var listaBduDecreeRequest = this.servicioDecretos.FindBduElementsDecreeRequest(null, querysBduUserSearchDto);
    	List<PeticionDecreto> listaPeticionDecreto = new List<PeticionDecreto>();
    
    
    	if (listaBduDecreeRequest != null)
    	{
    		foreach (var item in listaBduDecreeRequest)
    		{
    			var peticionDecreto = new PeticionDecreto()
    			{
    				Nuhsa = item.Nusa,
    				ClaveMedica= item.Clave_Medica,				
    				EspecialidadCm = item.Especialidad_Cm,
    				SituacionActual = item.Situacion_Actual,
    				Validado = item.Validado
    			};
    
    			listaPeticionDecreto.Add( peticionDecreto );
    		}
    	}
    
    	return listaPeticionDecreto;
    }
    La configuración de la API depende del tipo de implementación de servicios que se vaya a utilizar, según se acceda a los datos  mediante el Servicio Web de BDU o mediante réplicas de BBDD. Veamos cada una de ellas:

    La siguiente configuración de ejemplo se añadiría en clase Startup de un proyecto ASP .NET MVC.

    Primero, en el fichero Startup.cs, método ConfigureServices, inicializamos el contenedor de inyección de dependencia:
     
        public void ConfigureServices(IServiceCollection services)
        {
            ...
            ContainerDI.SetAsyncScopedLifestyle(); // establecer estilo de vida por defecto del contenedor de inyección. Permite procesar tanto operaciones asíncronas como síncronas
            ContainerDI.RegisterServices(ref services); 
            ...
        }
     
    ContainerDI, clase del componente común SAS.Util.Injection, el cual permite el registro por inyección de dependencia de los diferentes servicios y tipos utilizados en el sistema.

    • Configuración de la API para acceder al Servicio Web de BDU
          En el fichero appsettings.json se define una sección en la que se establece el código del módulo en MACO y en otra sección, el endpoint del servicio web de BDU.
          
       
       (1) "MacoApiClient": {
            "MacoModule": "XXX" // el código concreto hay que solicitarlo a la OTI
        },
      (2) "WebServiceLocator": {
          "ServiceAddressBdu": "https://servicios.pre.sas.junta-andalucia.es/",
          "EndPointAddressBduSolicitud": "/usuario/wsBDU.ashx"
        }
       
        (1) Configuración del módulo en MACO, indicado por la OTI.
        (2) Configuración de la dirección URL del servicio web de BDU. En el ejemplo se hace referencia a la URL de PRE.
        
    A continuación, en el fichero Startup.cs, método InitializeContainer() se registra, por inyección de dependencia, los diferentes servicios utilizados de la API.
      
        
           private void InitializeContainer()
            {
            ...
                #region Registrar BDU
      (3) ContainerDI.Register<IBduSearch<MacoUser>, BduSearch>(ContainerDI.LifeStyleContainer.Transient);

                (4) var bduApiConfig = new BduApiConfig(Configuration.GetSection("WebServiceLocator:ServiceAddressBdu").Value, Configuration.GetSection("MacoApiClient:MacoModule").Value){
                };
                (5) bduApiConfig.EndPoints = new Dictionary<BduApiClient.Api.Entity.EndPointType, string>
                {
                    { SAS.BduApiClient.Api.Entity.EndPointType.Solicitud, Configuration.GetSection("WebServiceLocator:EndPointAddressBduSolicitud").Value }
                };
                (6) ContainerDI.Register<IBduApiConfig>(() => bduApiConfig,  ContainerDI.LifeStyleContainer.Transient);
                (7) ContainerDI.Register<IBduUserManager, BduUserManager>(ContainerDI.LifeStyleContainer.Transient);
                (8) ContainerDI.Register<IBduExceptionManager, BduExceptionManager>(ContainerDI.LifeStyleContainer.Transient);
                (9) ContainerDI.Register<IWsBduManager, WsBduManager>(ContainerDI.LifeStyleContainer.Transient);
                #endregion
                ...
            }
        

         
       (3) Configuración del servicio de búsqueda de BDU que utiliza internamente el servicio web de BDU
       (4) Configuración de la API de BDU, indicando url de BDU y código de la aplicación en MACO
       (5) Configuración el endpoint del Servicio web de BDU
       (6) Registro del tipo BDUApiConfig que implementa la interfaz de configuración de BDU, IBduApiConfig
       (7) Registro del tipo BduUserManager, que implementa la interfaz IBduUserManager
       (8) Registro del tipo BduExceptionManager, que implementa la interfaz IBduExceptionManager
       (9) Registro del tipo WsBdumanager, que implementa la interfaz IWsBduManager   

    • Configuración de la API versión Réplica de BBDD     

            private void InitializeContainer()
            {
            ...
                #region Registrar BDU
            (10)  ContainerDI.Register<IBduSearch<object>, BduUserService>(ContainerDI.LifeStyleContainer.Transient);
            (11)  ContainerDI.Register<IMutualInsuranceService<object>, MutualInsuranceService>(ContainerDI.LifeStyleContainer.Transient);
            (12)  ContainerDI.Register<IBduDecreeRequestService<object>, BduDecreeRequestService>(ContainerDI.LifeStyleContainer.Transient);
            (13)  ContainerDI.Register<IUserRepository, UserRepository>(ContainerDI.LifeStyleContainer.Transient);
            (14)  ContainerDI.Register<IMutualidadRepository, MutualidadRepository>(ContainerDI.LifeStyleContainer.Transient);
            (15)  // Conexion a la réplica de BDU
                ContainerDI.Register<IConfigContextApiConnection<SchemaType>>(() =>
                new ConfigContextApiBduConnection(new ManagedConfigConnectionBase<SchemaType>[]
                    {
                        new ManagedConfigConnectionBase<SchemaType>(ConfigurationManager.ConnectionStrings["BDUConnection"].ConnectionString, SchemaType.Bdu, "NOMBRE DEL ESQUEMA")
                    })
                , ContainerDI.LifeStyleContainer.Transient);
             #endregion
                ...
            }
               
       (10) Registro del servicio BduUserService, que implemeneta la interfaz IBduSearch. Permite el acceso a datos de usuario vía réplica de BBDD.
       (11) Registro del servicio MutualInsuranceService, que implemeneta la interfaz IMutualInsuranceService, para el acceso a datos de mutuas vía réplica.
       (12) Registro del servicio BduDecreeRequestService, que implemeneta la interfaz IBduDecreeRequestService, para el acceso a datos de decretos vía réplica.
       (13) Registro del tipo UserRepository que implementa la interfaz IUserRepository
       (14) Registro del tipo MutualidadRepository que implementa la interfaz IUseIMutualidadRepository
       (15) Configuración del contexto de BBDD con el tipo concreto ConfigContextApiBduConnection. Recibe como parámetros la cadena de conexión de la réplica de BDU, tipo de esquema Bdu y nombre del esquema de la BBDD.

    Criterios

    El objeto QuerysBduUserSearchDto, es la representación de los criterios de búsqueda que son soportados por la 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). Valor por defecto: False
                NOTA: Actualmente, en la versión réplica de la API sólo se permite la consulta detallada.                
      • FarmaciaInfo: Booleano indicando si se desea la información detallada sobre farmacia. Valor por defecto: False
      • FullAddress: Booleano indicando si se desea la información detallada del domicilio del paciente. Valor por defecto: False.
    • Identificadores de usuario único
          -
      • NUHSA: Alfanumérico.    
      • CodSns: Alfanumérico.   
      • SocialSecurityNumber: Alfanumérico.   
      • AffiliationNumber: Alfanumérico    
      • Nuhsas: Lista de códigos NUHSA   
      • DocumentIdType + DocumentType + DocumentId: permite identificar un paciente por el identificador definido. 
    • Filtros de búsqueda    
      • BirthDateYear: Alfanumérico.    
      • Name: Nombre del paciente    
      • Surname: Primer apellido del paciente    
      • SecondSurname: Segundo apellido del paciente

        Antes de realizar la búsqueda de usuarios, vía servicio web o réplica de BBDD, se valida que el objeto criterio de búsqueda QuerysBduUserSearchDto cumpla las siguientes condiciones:
        

    • El objeto QuerysBduUserSearchDto no puede ser nulo
    • No pueden ser nulo los siguientes atributos: SocialSecurityNumber, AffiliationNumber, NUHSA, CodSns, DocumentId
    • Almenos se deben de especificar dos campos de entre: Name,  Surname, SecondSurname
        

    Métodos de servicio

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

    • Búsqueda de usuarios (consula detallada/corta)
          La búsqueda de usuarios se realizará mediante los métodos "findUsers"  que soportan el criteria descrito anteriormente.
              NOTA: Actualmente en la versión réplica sólo se permite la consulta detallada
    • Búsqueda información de mutuas (sólo modo réplica de BBDD)
          - Listado de mutualidades
          - Listado de mutualidades que cumplen con un criterio
    • Búsqueda información de decretos (sólo modo réplica de BBDD)
          - Búsqueda de información de solicitud de decreto que cumple un criterio

    Uso

    A continuación se describe el uso de la librería. 

    Funcionalidades utilizando Servicio Web de BDU

    • Búsqueda de usuarios

    Una vez realizada la configuración de la API, se siguen los siguientes pasos para realizar una búsqueda de usuarios utilizando el servicio Web de BDU.
        
    1. En la clase donde se va a añadir esta funcional, BduService en el ejemplo,  añadir al constructor un objeto de tipo IBduSearch: IBduSearch<MacoUser> bduSearch. 
    2. Añadir un método, FindUsers en el ejemplo, con los siguientes parámetros: IGenericAuthContext<MacoUser> petitionerUser y QuerysBduUserSearchDto querysBduUserSearchDto. El primero hace referencia al usuario Maco peticionario de la llamada y el segundo los criterial de la query que se va a realizar.
    3. Llamar al método FindUsers del servicio de BDU, _bduSearch en el ejemplo, pasando como parámetro el usuario peticionario y la query, petitionerUser y queryBduUserSearchDto en el ejemplo.
    4. Por último, se hace el mapping entre el tipo usuario BDU devuelto por la API y el propio del sistema que realiza la llamada.
    Ejemplo:
      
           ...
            using SAS.MacoApiClient.User.Entity;
            using SAS.Common.Core.Boundary.Contracts;
            using SAS.BduApiClient.Core.Entity.dto;
            using SAS.BduApiClient.Core.Boundary.Contracts.Services;
            ...
           public class BduService: IBduService
            {
                private IBduSearch<MacoUser> _bduSearch;
                public BduService(IBduSearch<MacoUser> bduSearch)
                {
                    _bduSearch = bduSearch;
                }
        
                public List<BduUser> FindUsers(IGenericAuthContext<MacoUser> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto)
                {
                    List<BduUser> resultFindUsers = new List<BduUser>();
                    var result = _bduSearch.FindUsers(petitionerUser, querysBduUserSearchDto);
                    foreach (SAS.BduApiClient.Core.Entity.BduUser bduUser in result)
                    {
                        var bduUserLocal = new BduUser();
                        bduUserLocal.Name = bduUser.Name;
                        bduUserLocal.FirstSurname = bduUser.FirstSurname;
                        bduUserLocal.SecondSurname = bduUser.SecondSurname;
                        //en unmapping hacer resto de campos
                        resultFindUsers.Add(bduUserLocal);
                    }
                    return resultFindUsers;
                }
            }
        }
        
       
        5. La clase que se haya creado para añadir la funcionalidad de búsqueda de usuarios se debe registrar en la clase Startup.cs, método InitializeContainer(), al igual que el resto de servicio y tipos. Continuando con el ejemplo:
         
                   
              ContainerDI.Register<IBduService, BduService>(ContainerDI.LifeStyleContainer.Transient);
           

    Funcionalidades utilizando la réplica de BDU

    • Búsqueda de usuarios
          La búsquea de usuarios se realiza del mismo modo que se explica en el punto anterior. Únicamente hay que tener encuenta que el servicio que implementa la interfaz IBduSearch es, en este caso, SAS.BduApiClient.Api.Boundary.BduUserService (ver Configuración de la API versión Réplica de BBDD) y que en modo réplica, y en la versión actual de la librería, sólo se puede especificar la consulta detallada.
          
    • Información de Mutuas
          Para consultar información de mutuas, se realiza los siguientes pasos:
        
      • En el constructor de la clase donde vamos a utilizar la funcionalidad de mutuas, se añade un objeto de tipo  IMutualInsuranceService: IMutualInsuranceService<object> servicioMutua;        
        • Listado de mutuas
                       A continuación se llama al método GetMutualInsurance del servicio, pasando como parámetro peticionario un null: servicioMutua.GetMutualInsurance(null);
                       NOTA: El parámetro peticionario es null debido a que en la réplica no se registra peticionario de la consulta. En un futuro servicio web de mutuas sí podría ser necesario el parámetro peticionario definido en la interfaz para su registro.
                  
        • Búsqueda de mutuas  que cumplen una determinada condición
                      En este caso se llamaría al método FindMutualInsurances, que recibe como parámetros el peticionario y el criterio de búsqueda:
                      FindMutualInsurances(IGenericAuthContext<object> petitionerMutua, QuerysMutualInsuranceDto criteria);
                      En el atributo petitionerMutua se le pasaría un null y en criteria el id de la mútua a buscar.
    • Información de decretos

        Para consultar información de decretos, realizamos los siguientes pasos:
       

    En el constructor de la clase donde vamos a utilizar la funcionalidad de decretos, se añade un objeto de tipo  IBduDecreeRequestService: IBduDecreeRequestService<object> servicioDecretos;
            Búsqueda de decretos  que cumplen una determinada condición
                En este caso se llamaría al método  FindBduElementsDecreeRequest(IGenericAuthContext<object> petitionerBdu, QuerysBduUserSearchDto criteria), que recibe como parámetros el peticionario y el criterio de búsqueda:    
                En el atributo peticionario se le pasaría un null y en criteria el criterio de búsqueda QuerysBduUserSearchDto.