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 componente | Versión | Descripción |
---|
System.ServiceModel.Duplex | 4.5.3 | Proporciona clases para consumir y comunicarse con servicios Dúplex |
System.ServiceModel.Http | 4.5.3 | Gestiona solicitudes realizadas a través del protocolo HTTP |
System.ServiceModel.NetTcp | 4.5.3 | Genera 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.Security | 4.5.3 | Se encarga de temas generales relacionados con la seguridad |
SAS.Common.Core | 1.1.0 | Componente .NET común con clases e interfaces core de aplicaciones |
SAS.Common.Kernel | 1.1.0 | Componente .NET kernel de aplicaciones, como interfaz mapper o diversas utilidades linq |
SAS.MacoApiClient | 2.4.3 | Componente MacoApiClient |
SASUtils.Parse | 1.0.0 | Componente utilidad para la conversión entre tipos |
SASUtils.Xml | 1.0.1 | Componente .NET común para el tratamiento de XMLs |
SAS.Common.OracleProvider | 1.3.3 | Componente .NET común para la configuración del proveedor de BBDD Oracle |
EntityFramework | 6.2.0 | ORM de Microsoft para .NET |
Oracle.ManagedDataAccess | 19.6.0 | Proveedor de acceso a datos de Oracle para .NET |
Oracle.ManagedDataAccess.EntityFramework | 19.6.0 | ORM de Oracle para .NET |
Errores conocidos
- Bug al obtener texto de un nodo XML.
Corregido desde de la version 1.0.1
Historial de cambios
Histórico de cambios realizados en la librería
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. - 1.2.0 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
- 1.3.0 Añadido consulta para obtener las solicitudes de decreto, 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:
Integración de la librería
Acceder a nuget e instalar la librería SAS.BduApiClient.
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:
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
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.
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.