diff --git a/pom.xml b/pom.xml index ed84ffc..a9e4c62 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ bus-payment-initiation-request 1.0-native-quarkus-jdk17 bus-payment-initiation-request - API Business - Read payment statuses of the file by ID + API Business - Create payment single request 17 diff --git a/scripts/native/file/bus-payment-initiation-request-1.0-native-quarkus-jdk17-runner b/scripts/native/file/bus-payment-initiation-request-1.0-native-quarkus-jdk17-runner index b20ce90..39af4c7 100644 Binary files a/scripts/native/file/bus-payment-initiation-request-1.0-native-quarkus-jdk17-runner and b/scripts/native/file/bus-payment-initiation-request-1.0-native-quarkus-jdk17-runner differ diff --git a/src/main/java/com/banesco/common/application/helper/PartyValidateHelper.java b/src/main/java/com/banesco/common/application/helper/PartyValidateHelper.java new file mode 100644 index 0000000..32b911d --- /dev/null +++ b/src/main/java/com/banesco/common/application/helper/PartyValidateHelper.java @@ -0,0 +1,112 @@ +package com.banesco.common.application.helper; + +import com.banesco.common.domain.exception.HttpStatusCodeException; +import com.banesco.module.msg_response_header.domain.model.AdditionalStatus; +import com.banesco.module.msg_response_header.domain.model.BlackList; +import com.banesco.module.msg_response_header.domain.model.BlackListRec; +import com.banesco.module.msg_response_header.domain.model.Status; +import io.netty.util.internal.StringUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@Slf4j +public class PartyValidateHelper { + + private PartyValidateHelper() {} + + public static void validateBlackListStatus( + BlackList blackList, + Status status + ) { + if(!Objects.isNull(blackList)) { + BlackListRec blackListRec = blackList.getBlackListRec(); + + if( + !Objects.isNull(blackListRec) && + !StringUtil.isNullOrEmpty(blackListRec.getBlackListBanesco()) && + !StringUtil.isNullOrEmpty(blackListRec.getBlackListCbn()) && + blackListRec.getBlackListBanesco().equalsIgnoreCase("N") && + blackListRec.getBlackListCbn().equalsIgnoreCase("N") + ) { + return; + } + } + + PartyValidateHelper.validateStatus(status); + } + + public static void validateStatus(Status status) { + if(Objects.isNull(status)) { + return; + } + + List errors = extractErrorCodes(status); + + if(!errors.isEmpty()) { + AdditionalStatus additionalStatus = getFirstAdditionalStatus(status); + String error = String.join("-", errors); + String desc = (!Objects.isNull(additionalStatus)) + ? additionalStatus.getStatusDesc() + : ""; + + log.error( + "Error asignado desde la lista concatenada de los errores: {} -> {}", + error, + desc + ); + + throw HttpStatusCodeException.badRequest(error, desc); + } else { + log.error( + "Error asignado desde el status principal: {} -> {}", + status.getStatusCode(), + status.getStatusDesc() + ); + + throw HttpStatusCodeException.internalServer( + status.getStatusCode(), + status.getStatusDesc() + ); + } + } + + private static List extractErrorCodes(Status status) { + List errors = new ArrayList<>(); + + List additionalStatuses = status.getAdditionalStatus(); + + if(Objects.isNull(additionalStatuses) || additionalStatuses.isEmpty()) { + return errors; + } + + for (AdditionalStatus item: additionalStatuses) { + if ( + !Objects.equals(item.getStatusCode(), "000") && + !errors.contains(item.getStatusCode()) + ) { + errors.add(item.getStatusCode()); + } + } + + return errors; + } + + private static AdditionalStatus getFirstAdditionalStatus(Status status) { + List additionalStatuses = status.getAdditionalStatus(); + + if(Objects.isNull(additionalStatuses) || additionalStatuses.isEmpty()) { + return null; + } + + for (AdditionalStatus item: additionalStatuses) { + if (!Objects.equals(item.getStatusCode(), "000")) { + return item; + } + } + + return null; + } +} diff --git a/src/main/java/com/banesco/common/application/service/HttpClientService.java b/src/main/java/com/banesco/common/application/service/HttpClientService.java index fb42a5c..d74aaa6 100644 --- a/src/main/java/com/banesco/common/application/service/HttpClientService.java +++ b/src/main/java/com/banesco/common/application/service/HttpClientService.java @@ -36,56 +36,61 @@ public class HttpClientService implements HttpClientUseCase { @Override public T execute(HttpRequest request) { - return executeInternal(request); + return executeRequest(request); + } + + @Override + public Either executeEither(HttpRequest request) { + return executeEitherInternal(request, false); + } + + @Override + public Either, R> executeEitherList(HttpRequest request) { + return executeEitherInternal(request, true); } @Override public ApiResponse executeApiResponse(HttpRequest request) { - return executeInternal(request); + return executeRequest(request); } @Override - public ApiResponse> executeApiResponseList( - HttpRequest request - ) { - return executeInternal(request); + public ApiResponse> executeApiResponseList(HttpRequest request) { + return executeRequest(request); } @Override - public ApiPrivateResponse> executeApiPrivateResponse( - HttpRequest request - ) { - return executeInternal(request); + public ApiPrivateResponse> executeApiPrivateResponse(HttpRequest request) { + return executeRequest(request); } @Override - public ApiPrivateResponse, ApiPrivateError>> executeApiPrivateResponseList( - HttpRequest request - ) { - return executeInternal(request); + public ApiPrivateResponse, ApiPrivateError>> executeApiPrivateResponseList(HttpRequest request) { + return executeRequest(request); } - private T executeInternal(HttpRequest request) { - String finalUrl = buildFinalUrl(request); - - if (request.isLogRequestBody()) { - log.info("URL final: {}", finalUrl); - - if (request.getHeaders() != null && !request.getHeaders().isEmpty()) { - log.info("Headers: {}", request.getHeaders()); - } - - if (request.getQueryParams() != null && !request.getQueryParams().isEmpty()) { - log.info("Query params: {}", request.getQueryParams()); - } - - if (request.getBody() != null) { - log.info("Body: {}", request.getBody()); - } - } - + private Either executeEitherInternal(HttpRequest request, boolean isList) { try (Client client = createClient(request.getConnectTimeout(), request.getReadTimeout())) { - WebTarget target = client.target(finalUrl); + WebTarget target = client.target(buildFinalUrl(request)); + Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON); + + if (request.getHeaders() != null) { + request.getHeaders().forEach(builder::header); + } + + Response response = buildRequest(builder, request); + return handleEitherResponse(request, response, isList); + + } catch (HttpStatusCodeException | HttpApiResponseException e) { + throw e; + } catch (Exception e) { + throw handleConnectionError(request, e); + } + } + + private T executeRequest(HttpRequest request) { + try (Client client = createClient(request.getConnectTimeout(), request.getReadTimeout())) { + WebTarget target = client.target(buildFinalUrl(request)); Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON); if (request.getHeaders() != null) { @@ -97,14 +102,122 @@ public class HttpClientService implements HttpClientUseCase { } catch (HttpStatusCodeException | HttpApiResponseException e) { throw e; } catch (Exception e) { - log.error("Error de conexion {}: {}", request.getMethod(), e.getMessage()); - throw HttpStatusCodeException.serviceUnavailable( - "503", - "Error de conexion con el servicio externo: " + e.getMessage() - ); + throw handleConnectionError(request, e); } } + @SuppressWarnings("unchecked") + private Either handleEitherResponse(HttpRequest request, Response response, boolean isList) { + int statusCode = response.getStatus(); + + try (response) { + String responseBody = response.readEntity(String.class); + logResponse(request, statusCode, responseBody); + + if (statusCode >= 200 && statusCode < 300) { + Object successData = isList + ? parseSuccessListResponse(request, responseBody) + : parseSuccessResponse(request, responseBody); + return Either.left((T) successData); + } else { + logErrorResponse(request, statusCode, responseBody); + R errorData = tryParseErrorResponse(request, responseBody); + + if (errorData != null) { + return Either.right(errorData); + } + + throw mapHttpStatusToException(statusCode, responseBody); + } + } catch (HttpStatusCodeException | HttpApiResponseException e) { + throw e; + } catch (Exception e) { + throw handleProcessingError(request, e); + } + } + + @SuppressWarnings("unchecked") + private T parseSuccessResponse(HttpRequest request, String responseBody) throws JsonProcessingException { + Type successType = extractSuccessType(request); + + if (successType != null) { + if (successType instanceof Class) { + return objectMapper.readValue(responseBody, (Class) successType); + } else if (successType instanceof ParameterizedType) { + JavaType javaType = objectMapper.getTypeFactory().constructType(successType); + return objectMapper.readValue(responseBody, javaType); + } + } + + if (request.getResponseType() != null && request.getResponseType() != Object.class) { + return objectMapper.readValue(responseBody, objectMapper.getTypeFactory().constructType(request.getResponseType())); + } + + return (T) objectMapper.readValue(responseBody, Object.class); + } + + @SuppressWarnings("unchecked") + private List parseSuccessListResponse(HttpRequest request, String responseBody) throws JsonProcessingException { + Type successType = extractSuccessType(request); + + if ( + successType instanceof ParameterizedType paramType && + paramType.getRawType() == List.class && + paramType.getActualTypeArguments().length > 0 + ) { + Type elementType = paramType.getActualTypeArguments()[0]; + if (elementType instanceof Class) { + JavaType javaType = objectMapper.getTypeFactory().constructCollectionType( + List.class, (Class) elementType + ); + return objectMapper.readValue(responseBody, javaType); + } + } + + return objectMapper.readValue(responseBody, List.class); + } + + private Type extractSuccessType(HttpRequest request) { + if ( + request.getComplexType() != null && + request.getComplexType() instanceof ParameterizedType paramType && + paramType.getRawType() == Either.class && + paramType.getActualTypeArguments().length > 0 + ) { + return paramType.getActualTypeArguments()[0]; + } + + if (request.getGenericType() != null) { + return request.getGenericType(); + } + + return request.getResponseType(); + } + + @SuppressWarnings("unchecked") + private R tryParseErrorResponse(HttpRequest request, String responseBody) { + if (responseBody == null || responseBody.trim().isEmpty()) { + return null; + } + + try { + if (request.getErrorType() != null) { + return (R) objectMapper.readValue(responseBody, request.getErrorType()); + } + + if (request.getComplexType() != null && request.getComplexType() instanceof ParameterizedType paramType) { + Type[] typeArgs = paramType.getActualTypeArguments(); + if (typeArgs.length >= 2 && typeArgs[1] instanceof Class) { + return objectMapper.readValue(responseBody, (Class) typeArgs[1]); + } + } + } catch (Exception e) { + log.error("No se pudo parsear la respuesta como error type: {}", e.getMessage()); + } + + return null; + } + private String buildFinalUrl(HttpRequest request) { String finalUrl = request.getUrl(); @@ -115,7 +228,11 @@ public class HttpClientService implements HttpClientUseCase { } } - return appendQueryParams(finalUrl, request.getQueryParams()); + String url = appendQueryParams(finalUrl, request.getQueryParams()); + + log.info("Url Final: {}", url); + + return url; } private String appendQueryParams(String url, Map queryParams) { @@ -145,12 +262,13 @@ public class HttpClientService implements HttpClientUseCase { return urlBuilder.toString(); } - private Response buildRequest( - Invocation.Builder builder, - HttpRequest request - ) { + private Response buildRequest(Invocation.Builder builder, HttpRequest request) { log.info("Metodo HTTP: {}", request.getMethod().name()); + if(request.getBody() != null) { + log.info("Cuerpo de la Peticion: {}", request.getBody()); + } + return switch (request.getMethod()) { case GET -> builder.get(); case POST -> builder.post(Entity.entity(request.getBody(), MediaType.APPLICATION_JSON)); @@ -165,43 +283,26 @@ public class HttpClientService implements HttpClientUseCase { private Client createClient(int connectTimeout, int readTimeout) { return ClientBuilder.newBuilder() - .connectTimeout(connectTimeout, TimeUnit.MILLISECONDS) - .readTimeout(readTimeout, TimeUnit.MILLISECONDS) - .build(); + .connectTimeout(connectTimeout, TimeUnit.MILLISECONDS) + .readTimeout(readTimeout, TimeUnit.MILLISECONDS) + .build(); } - private T handleResponse( - HttpRequest request, - Response response - ) { + private T handleResponse(HttpRequest request, Response response) { int statusCode = response.getStatus(); - log.info("Respuesta {} - Status: {}", request.getMethod(), statusCode); try (response) { String responseBody = response.readEntity(String.class); - - if (request.isLogResponseBody()) { - log.info("Respuesta Cuerpo: {}", responseBody); - } + logResponse(request, statusCode, responseBody); if (statusCode >= 200 && statusCode < 300) { if (request.getResponseType() == Void.class || request.getResponseType() == void.class) { return null; } - T result = responseResult(request, responseBody); - - log.debug("Respuesta exitosa {} {}: {}", request.getMethod(), request.getUrl(), result); - - return result; + return responseResult(request, responseBody); } else { - log.error( - "Error HTTP {} {} - Status: {} - Body: {}", - request.getMethod(), - request.getUrl(), - statusCode, - responseBody - ); + logErrorResponse(request, statusCode, responseBody); if (isApiResponseFormat(responseBody)) { ApiResponse apiResponse = deserializeApiResponse(responseBody, request); @@ -213,53 +314,72 @@ public class HttpClientService implements HttpClientUseCase { } catch (HttpStatusCodeException | HttpApiResponseException e) { throw e; } catch (Exception e) { - log.error( - "Error procesando respuesta {} {}: {}", - request.getMethod(), - request.getUrl(), - e.getMessage() - ); - throw HttpStatusCodeException.internalServer( - "500", "Error procesando respuesta del servicio externo: " + e.getMessage() - ); + throw handleProcessingError(request, e); } } - private T responseResult( - HttpRequest request, - String responseBody - ) throws JsonProcessingException { + private void logResponse(HttpRequest request, int statusCode, String responseBody) { + if (request.isLogResponseBody()) { + log.info("Respuesta {} - Status: {}", request.getMethod(), statusCode); + log.info("Respuesta Cuerpo: {}", responseBody); + } + } + + private void logErrorResponse(HttpRequest request, int statusCode, String responseBody) { + log.error( + "Error HTTP {} {} - Status: {} - Body: {}", + request.getMethod(), + request.getUrl(), + statusCode, + responseBody + ); + } + + private HttpStatusCodeException handleConnectionError(HttpRequest request, Exception e) { + log.error("Error de conexion {}: {}", request.getMethod(), e.getMessage()); + + return HttpStatusCodeException.serviceUnavailable( + "503", "Error de conexion con el servicio externo: " + e.getMessage() + ); + } + + private HttpStatusCodeException handleProcessingError(HttpRequest request, Exception e) { + log.error( + "Error procesando respuesta {} {}: {}", + request.getMethod(), + request.getUrl(), + e.getMessage() + ); + return HttpStatusCodeException.internalServer( + "500", "Error procesando respuesta del servicio externo: " + e.getMessage() + ); + } + + private T responseResult(HttpRequest request, String responseBody) throws JsonProcessingException { if (request.isApiPrivateResponse() && request.isEitherResponse()) { return handleApiPrivateResponseWithEither(request, responseBody); } - T result; - if (request.getResponseType() == ApiResponse.class) { - result = deserializeApiResponse(responseBody, request); + return deserializeApiResponse(responseBody, request); } else if (request.getComplexType() != null) { JavaType javaType = objectMapper.getTypeFactory().constructParametricType( request.getResponseType(), objectMapper.getTypeFactory().constructType(request.getComplexType()) ); - result = objectMapper.readValue(responseBody, javaType); + return objectMapper.readValue(responseBody, javaType); } else if (request.getGenericType() != null) { JavaType javaType = objectMapper.getTypeFactory().constructParametricType( request.getResponseType(), objectMapper.getTypeFactory().constructType(request.getGenericType()) ); - result = objectMapper.readValue(responseBody, javaType); + return objectMapper.readValue(responseBody, javaType); } else { - result = objectMapper.readValue( + return objectMapper.readValue( responseBody, objectMapper.getTypeFactory().constructType(request.getResponseType()) ); } - - return result; } - private T handleApiPrivateResponseWithEither( - HttpRequest request, - String responseBody - ) throws JsonProcessingException { + private T handleApiPrivateResponseWithEither(HttpRequest request, String responseBody) throws JsonProcessingException { JsonNode rootNode = objectMapper.readTree(responseBody); String status = rootNode.has("estatus") ? rootNode.get("estatus").asText() : null; String message = rootNode.has("mensaje") ? rootNode.get("mensaje").asText() : null; @@ -273,12 +393,7 @@ public class HttpClientService implements HttpClientUseCase { } @SuppressWarnings("unchecked") - private T handleSuccessResponse( - HttpRequest request, - String status, - String message, - JsonNode detailNode - ) { + private T handleSuccessResponse(HttpRequest request, String status, String message, JsonNode detailNode) { Object successData; if (request.isListResponse()) { @@ -300,10 +415,7 @@ public class HttpClientService implements HttpClientUseCase { } } - private Object handleListSuccess( - HttpRequest request, - JsonNode detailNode - ) { + private Object handleListSuccess(HttpRequest request, JsonNode detailNode) { Class elementType = getElementTypeFromRequest(request); JavaType listType = objectMapper.getTypeFactory().constructCollectionType(List.class, elementType); @@ -314,10 +426,7 @@ public class HttpClientService implements HttpClientUseCase { return List.of(); } - private Object handleObjectSuccess( - HttpRequest request, - JsonNode detailNode - ) { + private Object handleObjectSuccess(HttpRequest request, JsonNode detailNode) { Class elementType = getElementTypeFromRequest(request); if (detailNode != null && !detailNode.isNull()) { @@ -328,11 +437,7 @@ public class HttpClientService implements HttpClientUseCase { } @SuppressWarnings("unchecked") - private T handleErrorResponse( - String status, - String message, - JsonNode detailNode - ) { + private T handleErrorResponse(String status, String message, JsonNode detailNode) { ApiPrivateError error = buildApiPrivateError(detailNode, message); ApiPrivateResponse> response = new ApiPrivateResponse<>(); @@ -343,10 +448,7 @@ public class HttpClientService implements HttpClientUseCase { return (T) response; } - private ApiPrivateError buildApiPrivateError( - JsonNode detailNode, - String message - ) { + private ApiPrivateError buildApiPrivateError(JsonNode detailNode, String message) { if (detailNode != null && !detailNode.isNull()) { try { return objectMapper.convertValue(detailNode, ApiPrivateError.class); @@ -390,15 +492,11 @@ public class HttpClientService implements HttpClientUseCase { } @SuppressWarnings("unchecked") - private T deserializeApiResponse( - String responseBody, - HttpRequest request - ) { + private T deserializeApiResponse(String responseBody, HttpRequest request) { try { if (request.getGenericType() != null) { JavaType javaType = objectMapper.getTypeFactory().constructParametricType( - ApiResponse.class, - objectMapper.getTypeFactory().constructType(request.getGenericType()) + ApiResponse.class, objectMapper.getTypeFactory().constructType(request.getGenericType()) ); return objectMapper.readValue(responseBody, javaType); } else { @@ -432,10 +530,7 @@ public class HttpClientService implements HttpClientUseCase { } } - private HttpStatusCodeException mapHttpStatusToException( - int statusCode, - String errorBody - ) { + private HttpStatusCodeException mapHttpStatusToException(int statusCode, String errorBody) { String errorCode = "HTTP_" + statusCode; String defaultMessage = "Error en servicio externo: HTTP " + statusCode; String message = errorBody != null && !errorBody.isEmpty() diff --git a/src/main/java/com/banesco/common/application/usecase/HttpClientUseCase.java b/src/main/java/com/banesco/common/application/usecase/HttpClientUseCase.java index c7a0b7b..b55922c 100644 --- a/src/main/java/com/banesco/common/application/usecase/HttpClientUseCase.java +++ b/src/main/java/com/banesco/common/application/usecase/HttpClientUseCase.java @@ -8,6 +8,10 @@ public interface HttpClientUseCase { T execute(HttpRequest request); + Either executeEither(HttpRequest request); + + Either, R> executeEitherList(HttpRequest request); + ApiResponse executeApiResponse(HttpRequest request); ApiResponse> executeApiResponseList(HttpRequest request); diff --git a/src/main/java/com/banesco/common/domain/exception/BusinessException.java b/src/main/java/com/banesco/common/domain/exception/BusinessException.java deleted file mode 100644 index 6d44727..0000000 --- a/src/main/java/com/banesco/common/domain/exception/BusinessException.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.banesco.common.domain.exception; - -public class BusinessException extends BaseApiException { - public BusinessException(String errorCode, String message, String fieldPath) { - super(errorCode, message, fieldPath, "business"); - } - - public BusinessException(String errorCode, String fieldPath) { - super(errorCode, fieldPath, "business"); - } -} diff --git a/src/main/java/com/banesco/common/domain/model/HttpRequest.java b/src/main/java/com/banesco/common/domain/model/HttpRequest.java index af48ca7..57c88d3 100644 --- a/src/main/java/com/banesco/common/domain/model/HttpRequest.java +++ b/src/main/java/com/banesco/common/domain/model/HttpRequest.java @@ -143,6 +143,20 @@ public class HttpRequest { .build(); } + public static HttpRequest forDirectResponse( + String url, + HttpMethod method, + Class responseType, + Class errorType + ) { + return HttpRequest.builder() + .url(url) + .method(method) + .responseType(responseType) + .errorType(errorType) + .build(); + } + public static HttpRequest forGenericResponse( String url, HttpMethod method, diff --git a/src/main/java/com/banesco/common/infrastructure/config/RestClientConfig.java b/src/main/java/com/banesco/common/infrastructure/config/RestClientConfig.java index 9e8bca8..3f63719 100644 --- a/src/main/java/com/banesco/common/infrastructure/config/RestClientConfig.java +++ b/src/main/java/com/banesco/common/infrastructure/config/RestClientConfig.java @@ -1,6 +1,8 @@ package com.banesco.common.infrastructure.config; import com.banesco.common.domain.model.DomainConfig; +import com.banesco.module.black_list.domain.model.BlackListConfig; +import com.banesco.module.get_affiliation.domain.model.GetAffiliationConfig; import com.banesco.module.security_trace.domain.model.SecurityTraceConfig; import com.banesco.module.service_status.domain.model.ServiceStatusConfig; import com.fasterxml.jackson.core.JsonProcessingException; @@ -26,6 +28,8 @@ public class RestClientConfig { private static final String API_DOMAIN_NAME = "dom-payment-initiation-request"; private static final String API_SECURITY_TRACE_NAME = "security-trace"; private static final String API_SERVICE_STATUS_NAME = "service-status"; + private static final String API_BLACK_LIST_NAME = "black-list"; + private static final String API_GET_AFFILIATION_NAME = "get-affiliation"; @Inject public RestClientConfig( @@ -36,7 +40,7 @@ public class RestClientConfig { this.objectMapper = objectMapper; } - public DomainConfig getDomDocserviceFileConfig() { + public DomainConfig getDomPaymentRequestConfig() { return getConfig(API_DOMAIN_NAME, DomainConfig.class); } @@ -48,6 +52,14 @@ public class RestClientConfig { return getConfig(API_SERVICE_STATUS_NAME, ServiceStatusConfig.class); } + public BlackListConfig getBlackListConfig() { + return getConfig(API_BLACK_LIST_NAME, BlackListConfig.class); + } + + public GetAffiliationConfig getGetAffiliationConfig() { + return getConfig(API_GET_AFFILIATION_NAME, GetAffiliationConfig.class); + } + private T getConfig( String configName, Class configType diff --git a/src/main/java/com/banesco/module/black_list/application/usecase/BlackListUseCase.java b/src/main/java/com/banesco/module/black_list/application/usecase/BlackListUseCase.java new file mode 100644 index 0000000..1393582 --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/application/usecase/BlackListUseCase.java @@ -0,0 +1,12 @@ +package com.banesco.module.black_list.application.usecase; + +import com.banesco.common.domain.model.Either; +import com.banesco.module.payment_initiation_request.domain.dto.request.PaymentInitiationRequestRequest; + +public interface BlackListUseCase { + Either execute( + PaymentInitiationRequestRequest apiRequest, + Class responseType, + Class errorType + ); +} diff --git a/src/main/java/com/banesco/module/black_list/domain/dto/request/BlackListRequest.java b/src/main/java/com/banesco/module/black_list/domain/dto/request/BlackListRequest.java new file mode 100644 index 0000000..5662b5f --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/domain/dto/request/BlackListRequest.java @@ -0,0 +1,22 @@ +package com.banesco.module.black_list.domain.dto.request; + +import com.banesco.module.black_list.domain.model.Customer; +import com.banesco.module.msg_request_header.domain.model.MsgRqHdr; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +@JsonInclude(JsonInclude.Include.NON_NULL) +public class BlackListRequest { + private MsgRqHdr msgRqHdr; + private Customer customer; + private String domain; + private String requestId; + private String appId; +} \ No newline at end of file diff --git a/src/main/java/com/banesco/module/black_list/domain/dto/response/BlackListResponse.java b/src/main/java/com/banesco/module/black_list/domain/dto/response/BlackListResponse.java new file mode 100644 index 0000000..0847abe --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/domain/dto/response/BlackListResponse.java @@ -0,0 +1,22 @@ +package com.banesco.module.black_list.domain.dto.response; + +import com.banesco.module.msg_response_header.domain.model.BlackList; +import com.banesco.module.msg_response_header.domain.model.MsgRsHdr; +import com.banesco.module.msg_response_header.domain.model.Status; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class BlackListResponse { + private MsgRsHdr msgRsHdr; + private Status status; + private BlackList blackList; + private String httpStatus; + private String blackListBanesco; + private String blackListCbn; +} diff --git a/src/main/java/com/banesco/module/black_list/domain/model/BlackListConfig.java b/src/main/java/com/banesco/module/black_list/domain/model/BlackListConfig.java new file mode 100644 index 0000000..919cf15 --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/domain/model/BlackListConfig.java @@ -0,0 +1,16 @@ +package com.banesco.module.black_list.domain.model; + +import com.banesco.common.domain.model.TimeoutConfig; +import com.banesco.module.black_list.domain.dto.request.BlackListRequest; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +@RegisterForReflection +public class BlackListConfig { + private String url; + private TimeoutConfig timeout; + private BlackListRequest request; +} \ No newline at end of file diff --git a/src/main/java/com/banesco/module/black_list/domain/model/Customer.java b/src/main/java/com/banesco/module/black_list/domain/model/Customer.java new file mode 100644 index 0000000..938b795 --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/domain/model/Customer.java @@ -0,0 +1,14 @@ +package com.banesco.module.black_list.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class Customer { + private PersonInfo personInfo; +} diff --git a/src/main/java/com/banesco/module/black_list/domain/model/OtherIdentDoc.java b/src/main/java/com/banesco/module/black_list/domain/model/OtherIdentDoc.java new file mode 100644 index 0000000..6fedd84 --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/domain/model/OtherIdentDoc.java @@ -0,0 +1,14 @@ +package com.banesco.module.black_list.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class OtherIdentDoc { + private String identSerialNum; +} diff --git a/src/main/java/com/banesco/module/black_list/domain/model/PersonInfo.java b/src/main/java/com/banesco/module/black_list/domain/model/PersonInfo.java new file mode 100644 index 0000000..ed12035 --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/domain/model/PersonInfo.java @@ -0,0 +1,15 @@ +package com.banesco.module.black_list.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class PersonInfo { + private String nationality; + private OtherIdentDoc otherIdentDoc; +} diff --git a/src/main/java/com/banesco/module/black_list/infrastructure/client/BlackListClient.java b/src/main/java/com/banesco/module/black_list/infrastructure/client/BlackListClient.java new file mode 100644 index 0000000..1689704 --- /dev/null +++ b/src/main/java/com/banesco/module/black_list/infrastructure/client/BlackListClient.java @@ -0,0 +1,114 @@ +package com.banesco.module.black_list.infrastructure.client; + +import com.banesco.common.application.usecase.HttpClientUseCase; +import com.banesco.common.domain.exception.HttpStatusCodeException; +import com.banesco.common.domain.model.Either; +import com.banesco.common.domain.model.HttpRequest; +import com.banesco.common.infrastructure.config.RestClientConfig; +import com.banesco.module.black_list.application.usecase.BlackListUseCase; +import com.banesco.module.black_list.domain.dto.request.BlackListRequest; +import com.banesco.module.black_list.domain.model.BlackListConfig; +import com.banesco.module.black_list.domain.model.Customer; +import com.banesco.module.black_list.domain.model.OtherIdentDoc; +import com.banesco.module.black_list.domain.model.PersonInfo; +import com.banesco.module.msg_request_header.domain.model.MsgRqHdr; +import com.banesco.module.payment_initiation_request.domain.dto.request.PaymentInitiationRequestRequest; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@ApplicationScoped +public class BlackListClient implements BlackListUseCase { + private final HttpClientUseCase httpClientUseCase; + private final BlackListConfig blackListConfig; + + @Inject + public BlackListClient( + HttpClientUseCase httpClientUseCase, + RestClientConfig restClientConfig + ) { + this.httpClientUseCase = httpClientUseCase; + this.blackListConfig = restClientConfig.getBlackListConfig(); + log.info("Configuracion cargada para security-trace: {}", blackListConfig); + } + + @Override + public Either execute( + PaymentInitiationRequestRequest apiRequest, + Class responseType, + Class errorType + ) { + BlackListRequest body = getRequest(apiRequest); + HttpRequest request = HttpRequest.forDirectResponse( + blackListConfig.getUrl(), + HttpRequest.HttpMethod.POST, + responseType, + errorType + ) + .withBody(body) + .withTimeout( + blackListConfig.getTimeout().getConnect(), + blackListConfig.getTimeout().getResponse() + ); + + try { + Either response = httpClientUseCase.executeEither(request); + + log.info( + "Solicitud de lista negra exitosa: {}", + response.isLeft() && response.getLeft().toString().contains("msgRsHdr=") + ); + + return response; + } catch (HttpStatusCodeException e) { + log.error( + "Error HTTP ejecutando lista negra: {} - {}", + e.getStatusCode(), + e.getMessage() + ); + + throw e; + } catch (Exception e) { + log.error("Error ejecutando lista negra: {}", e.getMessage()); + throw HttpStatusCodeException.serviceUnavailable("503"); + } + } + + private BlackListRequest getRequest( + PaymentInitiationRequestRequest apiRequest + ) { + String payeeId = apiRequest.getPayeeId(); + MsgRqHdr msgRqHdr = blackListConfig + .getRequest() + .getMsgRqHdr() + .withOptions(apiRequest.getDevice()); + + return BlackListRequest.builder() + .msgRqHdr(msgRqHdr) + .customer(Customer.builder() + .personInfo(PersonInfo.builder() + .nationality(payeeId.substring(0, 1).toUpperCase()) + .otherIdentDoc(OtherIdentDoc.builder() + .identSerialNum(getPartyIdNumber(payeeId.substring(1))) + .build()) + .build()) + .build()) + .domain(blackListConfig.getRequest().getDomain()) + .build(); + } + + private String getPartyIdNumber(String partyId) { + if (partyId == null || partyId.trim().isEmpty()) { + return null; + } + + String digits = partyId.replaceAll("\\D", ""); + + if (digits.isEmpty()) { + return null; + } + + return digits; + } +} \ No newline at end of file diff --git a/src/main/java/com/banesco/module/get_affiliation/application/usecase/GetAffiliationUseCase.java b/src/main/java/com/banesco/module/get_affiliation/application/usecase/GetAffiliationUseCase.java new file mode 100644 index 0000000..8160096 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/application/usecase/GetAffiliationUseCase.java @@ -0,0 +1,12 @@ +package com.banesco.module.get_affiliation.application.usecase; + +import com.banesco.common.domain.model.Either; +import com.banesco.module.payment_initiation_request.domain.dto.request.PaymentInitiationRequestRequest; + +public interface GetAffiliationUseCase { + Either execute( + PaymentInitiationRequestRequest apiRequest, + Class responseType, + Class errorType + ); +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/dto/request/GetAffiliationRequest.java b/src/main/java/com/banesco/module/get_affiliation/domain/dto/request/GetAffiliationRequest.java new file mode 100644 index 0000000..0c37298 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/dto/request/GetAffiliationRequest.java @@ -0,0 +1,26 @@ +package com.banesco.module.get_affiliation.domain.dto.request; + +import com.banesco.module.msg_request_header.domain.model.MsgRqHdr; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +@JsonInclude(JsonInclude.Include.NON_NULL) +public class GetAffiliationRequest { + private MsgRqHdr msgRqHdr; + private String type; + private String identSerialNum; + private String phone; + private String svcType; + private String affilType; + private String sourceChannelCode; + private String domain; + private String requestId; + private String appId; +} \ No newline at end of file diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/dto/response/GetAffiliationResponse.java b/src/main/java/com/banesco/module/get_affiliation/domain/dto/response/GetAffiliationResponse.java new file mode 100644 index 0000000..a872c08 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/dto/response/GetAffiliationResponse.java @@ -0,0 +1,27 @@ +package com.banesco.module.get_affiliation.domain.dto.response; + +import com.banesco.module.get_affiliation.domain.model.Account; +import com.banesco.module.get_affiliation.domain.model.AffiliationSvg; +import com.banesco.module.get_affiliation.domain.model.Configuration; +import com.banesco.module.get_affiliation.domain.model.Customer; +import com.banesco.module.msg_response_header.domain.model.MsgRsHdr; +import com.banesco.module.msg_response_header.domain.model.Status; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.util.List; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class GetAffiliationResponse { + private MsgRsHdr msgRsHdr; + private Status status; + private List affiliationSvc; + private Customer customer; + private List account; + private List configuration; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/Account.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/Account.java new file mode 100644 index 0000000..d6c306f --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/Account.java @@ -0,0 +1,14 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class Account { + private String acctId; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/AffilStatus.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/AffilStatus.java new file mode 100644 index 0000000..02e9547 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/AffilStatus.java @@ -0,0 +1,14 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class AffilStatus { + private String affilStatusCode; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/AffiliationSvg.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/AffiliationSvg.java new file mode 100644 index 0000000..6da73c6 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/AffiliationSvg.java @@ -0,0 +1,17 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class AffiliationSvg { + private String affilType; + private String affilDate; + private AffilStatus affilStatus; + private Service service; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/Configuration.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/Configuration.java new file mode 100644 index 0000000..a24fec8 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/Configuration.java @@ -0,0 +1,18 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.util.List; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class Configuration { + private String confId; + private String confType; + private List parameter; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/CustInfo.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/CustInfo.java new file mode 100644 index 0000000..a0fecfd --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/CustInfo.java @@ -0,0 +1,17 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.util.List; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class CustInfo { + private String emailAddr; + private List phoneNum; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/Customer.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/Customer.java new file mode 100644 index 0000000..fa62709 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/Customer.java @@ -0,0 +1,17 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.util.List; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class Customer { + private List personInfo; + private CustInfo custInfo; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/GetAffiliationConfig.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/GetAffiliationConfig.java new file mode 100644 index 0000000..316791a --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/GetAffiliationConfig.java @@ -0,0 +1,16 @@ +package com.banesco.module.get_affiliation.domain.model; + +import com.banesco.common.domain.model.TimeoutConfig; +import com.banesco.module.get_affiliation.domain.dto.request.GetAffiliationRequest; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +@RegisterForReflection +public class GetAffiliationConfig { + private String url; + private TimeoutConfig timeout; + private GetAffiliationRequest request; +} \ No newline at end of file diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/OtherIdentDoc.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/OtherIdentDoc.java new file mode 100644 index 0000000..e45050f --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/OtherIdentDoc.java @@ -0,0 +1,15 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class OtherIdentDoc { + private String identSerialNum; + private String type; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/ParamValue.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/ParamValue.java new file mode 100644 index 0000000..da510ac --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/ParamValue.java @@ -0,0 +1,14 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class ParamValue { + private String value; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/Parameter.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/Parameter.java new file mode 100644 index 0000000..cbc612a --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/Parameter.java @@ -0,0 +1,15 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class Parameter { + private String paramName; + private ParamValue paramValue; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/PersonInfo.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/PersonInfo.java new file mode 100644 index 0000000..4d8c015 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/PersonInfo.java @@ -0,0 +1,16 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.util.List; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class PersonInfo { + private List otherIdentDoc; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/PhoneNum.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/PhoneNum.java new file mode 100644 index 0000000..35bb44a --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/PhoneNum.java @@ -0,0 +1,14 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class PhoneNum { + private String phone; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/domain/model/Service.java b/src/main/java/com/banesco/module/get_affiliation/domain/model/Service.java new file mode 100644 index 0000000..312324b --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/domain/model/Service.java @@ -0,0 +1,14 @@ +package com.banesco.module.get_affiliation.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class Service { + private String svcType; +} diff --git a/src/main/java/com/banesco/module/get_affiliation/infrastructure/client/GetAffiliationClient.java b/src/main/java/com/banesco/module/get_affiliation/infrastructure/client/GetAffiliationClient.java new file mode 100644 index 0000000..00cb2b2 --- /dev/null +++ b/src/main/java/com/banesco/module/get_affiliation/infrastructure/client/GetAffiliationClient.java @@ -0,0 +1,109 @@ +package com.banesco.module.get_affiliation.infrastructure.client; + +import com.banesco.common.application.usecase.HttpClientUseCase; +import com.banesco.common.domain.exception.HttpStatusCodeException; +import com.banesco.common.domain.model.Either; +import com.banesco.common.domain.model.HttpRequest; +import com.banesco.common.infrastructure.config.RestClientConfig; +import com.banesco.module.get_affiliation.application.usecase.GetAffiliationUseCase; +import com.banesco.module.get_affiliation.domain.dto.request.GetAffiliationRequest; +import com.banesco.module.get_affiliation.domain.model.GetAffiliationConfig; +import com.banesco.module.msg_request_header.domain.model.MsgRqHdr; +import com.banesco.module.payment_initiation_request.domain.dto.request.PaymentInitiationRequestRequest; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@ApplicationScoped +public class GetAffiliationClient implements GetAffiliationUseCase { + private final HttpClientUseCase httpClientUseCase; + private final GetAffiliationConfig getAffiliationConfig; + + @Inject + public GetAffiliationClient( + HttpClientUseCase httpClientUseCase, + RestClientConfig restClientConfig + ) { + this.httpClientUseCase = httpClientUseCase; + this.getAffiliationConfig = restClientConfig.getGetAffiliationConfig(); + log.info("Configuracion cargada para security-trace: {}", getAffiliationConfig); + } + + @Override + public Either execute( + PaymentInitiationRequestRequest apiRequest, + Class responseType, + Class errorType + ) { + GetAffiliationRequest body = getRequest(apiRequest); + HttpRequest request = HttpRequest.forDirectResponse( + getAffiliationConfig.getUrl(), + HttpRequest.HttpMethod.POST, + responseType, + errorType + ) + .withBody(body) + .withTimeout( + getAffiliationConfig.getTimeout().getConnect(), + getAffiliationConfig.getTimeout().getResponse() + ); + + try { + Either response = httpClientUseCase.executeEither(request); + + log.info( + "Solicitud de consulta de afiliacion exitosa: {}", + response.isLeft() && response.getLeft().toString().contains("msgRsHdr=") + ); + + return response; + } catch (HttpStatusCodeException e) { + log.error( + "Error HTTP ejecutando consulta de afiliacion: {} - {}", + e.getStatusCode(), + e.getMessage() + ); + + throw e; + } catch (Exception e) { + log.error("Error ejecutando consulta de afiliacion: {}", e.getMessage()); + throw HttpStatusCodeException.serviceUnavailable("503"); + } + } + + private GetAffiliationRequest getRequest( + PaymentInitiationRequestRequest apiRequest + ) { + String payeeId = apiRequest.getPayeeId(); + MsgRqHdr msgRqHdr = getAffiliationConfig + .getRequest() + .getMsgRqHdr() + .withOptions(apiRequest.getDevice()); + + return GetAffiliationRequest.builder() + .msgRqHdr(msgRqHdr) + .type(payeeId.substring(0, 1).toUpperCase()) + .identSerialNum(getPartyIdNumber(payeeId.substring(1))) + .phone(getAffiliationConfig.getRequest().getPhone()) + .svcType(getAffiliationConfig.getRequest().getSvcType()) + .affilType(getAffiliationConfig.getRequest().getAffilType()) + .sourceChannelCode(getAffiliationConfig.getRequest().getSourceChannelCode()) + .domain(getAffiliationConfig.getRequest().getDomain()) + .build(); + } + + private String getPartyIdNumber(String partyId) { + if (partyId == null || partyId.trim().isEmpty()) { + return null; + } + + String digits = partyId.replaceAll("\\D", ""); + + if (digits.isEmpty()) { + return null; + } + + return digits; + } +} \ No newline at end of file diff --git a/src/main/java/com/banesco/module/msg_request_header/domain/model/ApplicantData.java b/src/main/java/com/banesco/module/msg_request_header/domain/model/ApplicantData.java new file mode 100644 index 0000000..ab0ef10 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_request_header/domain/model/ApplicantData.java @@ -0,0 +1,32 @@ +package com.banesco.module.msg_request_header.domain.model; + +import com.banesco.common.domain.model.Device; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class ApplicantData { + private String enterpriseCode; + private String privateChannelId; + private String ipAddress; + private String hostName; + private String stadisticId; + private String application; + private String nationality; + private String idDocument; + private String rolType; + private String planCode; + private String channel; + + @JsonIgnore + public ApplicantData withOptions(Device device) { + this.ipAddress = device.getDeviceIp(); + return this; + } +} diff --git a/src/main/java/com/banesco/module/msg_request_header/domain/model/MsgRqHdr.java b/src/main/java/com/banesco/module/msg_request_header/domain/model/MsgRqHdr.java new file mode 100644 index 0000000..5e70319 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_request_header/domain/model/MsgRqHdr.java @@ -0,0 +1,67 @@ +package com.banesco.module.msg_request_header.domain.model; + +import com.banesco.common.domain.model.Device; +import com.banesco.common.infrastructure.context.RequestContext; +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Objects; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class MsgRqHdr { + private String messageDate; + private String messageTime; + private String requestId; + private String lastStatusRequest; + private String finalStatusRequest; + private String resumeId; + private String reverseId; + private String lineId; + private String sourceChannelCode; + private String supervisorCode; + private String operatorCode; + private String requestedOperationType; + private List networkTrnInfo; + private ApplicantData applicantData; + private RecCtrlIn recCtrlIn; + private String returnValue; + private String messageId; + private String priority; + private VbProtocol vbProtocol; + + private static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @JsonIgnore + public MsgRqHdr withOptions(Device device) { + if(Objects.isNull(this.getApplicantData())) { + this.applicantData = ApplicantData.builder() + .ipAddress(device.getDeviceIp()) + .build(); + } else { + this.applicantData = this.applicantData.withOptions(device); + } + + String[] dateTime = LocalDateTime.now().format(dateTimeFormatter).split(" "); + String date = dateTime[0]; + String time = dateTime[1]; + + this.requestId = RequestContext.getRequestId(); + this.messageDate = date; + this.messageTime = time; + + this.networkTrnInfo = this.networkTrnInfo.stream() + .map(info -> (!Objects.isNull(info)) ? info.withOptions(date, time) : null) + .toList(); + + return this; + } +} diff --git a/src/main/java/com/banesco/module/msg_request_header/domain/model/NetworkTrnInfo.java b/src/main/java/com/banesco/module/msg_request_header/domain/model/NetworkTrnInfo.java new file mode 100644 index 0000000..ef69b90 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_request_header/domain/model/NetworkTrnInfo.java @@ -0,0 +1,41 @@ +package com.banesco.module.msg_request_header.domain.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class NetworkTrnInfo { + private String transactionConsecutive; + private String registerNumber; + private String originatorName; + private String operationType; + private String transactionType; + private String transactionCode; + private String transactionDate; + private String transactionTime; + private String bankId; + private String agencyCode; + private String channelId; + private String channelUserId; + private String operationExecIndicator; + private String configuredTransactionCode; + private String desc; + private String userId; + private String userType; + + @JsonIgnore + public NetworkTrnInfo withOptions( + String date, + String time + ) { + this.transactionDate = date; + this.transactionTime = time; + return this; + } +} diff --git a/src/main/java/com/banesco/module/msg_request_header/domain/model/RecCtrlIn.java b/src/main/java/com/banesco/module/msg_request_header/domain/model/RecCtrlIn.java new file mode 100644 index 0000000..fb73a1d --- /dev/null +++ b/src/main/java/com/banesco/module/msg_request_header/domain/model/RecCtrlIn.java @@ -0,0 +1,14 @@ +package com.banesco.module.msg_request_header.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class RecCtrlIn { + private String maxRec; +} diff --git a/src/main/java/com/banesco/module/msg_request_header/domain/model/VbProtocol.java b/src/main/java/com/banesco/module/msg_request_header/domain/model/VbProtocol.java new file mode 100644 index 0000000..1ce4a61 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_request_header/domain/model/VbProtocol.java @@ -0,0 +1,15 @@ +package com.banesco.module.msg_request_header.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class VbProtocol { + private Boolean vbProtocolInd; + private Boolean transactionInd; +} diff --git a/src/main/java/com/banesco/module/msg_response_header/domain/model/AdditionalStatus.java b/src/main/java/com/banesco/module/msg_response_header/domain/model/AdditionalStatus.java new file mode 100644 index 0000000..acc520d --- /dev/null +++ b/src/main/java/com/banesco/module/msg_response_header/domain/model/AdditionalStatus.java @@ -0,0 +1,19 @@ +package com.banesco.module.msg_response_header.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class AdditionalStatus { + private String statusType; + private String statusCode; + private String statusDesc; + private String validationType; + private String severity; + private String lineNumber; +} diff --git a/src/main/java/com/banesco/module/msg_response_header/domain/model/BlackList.java b/src/main/java/com/banesco/module/msg_response_header/domain/model/BlackList.java new file mode 100644 index 0000000..ca30d25 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_response_header/domain/model/BlackList.java @@ -0,0 +1,18 @@ +package com.banesco.module.msg_response_header.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class BlackList { + private BlackListRec blackListRec; +} \ No newline at end of file diff --git a/src/main/java/com/banesco/module/msg_response_header/domain/model/BlackListRec.java b/src/main/java/com/banesco/module/msg_response_header/domain/model/BlackListRec.java new file mode 100644 index 0000000..0ffb289 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_response_header/domain/model/BlackListRec.java @@ -0,0 +1,19 @@ +package com.banesco.module.msg_response_header.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class BlackListRec { + private String blackListBanesco; + private String blackListCbn; +} diff --git a/src/main/java/com/banesco/module/msg_response_header/domain/model/MsgRsHdr.java b/src/main/java/com/banesco/module/msg_response_header/domain/model/MsgRsHdr.java new file mode 100644 index 0000000..ec54d23 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_response_header/domain/model/MsgRsHdr.java @@ -0,0 +1,38 @@ +package com.banesco.module.msg_response_header.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.util.List; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class MsgRsHdr { + private String privateChannelId; + private String finalStatusRequest; + private String countDataOut; + private String headerTypeReg; + private String detailTypeReg; + private String transactionCode; + private String supervisorCode; + private String operationType; + private String transactionConsecutive; + private String detailReg; + private List registerNumber; + private String transactionType; + private String requestId; + private String requestedOperationType; + private String messageDate; + private String transactionTime; + private String lastStatusRequest; + private String returnValue; + private String requestStatus; + private String messageTime; + private String transacctionDate; + private String requestNumber; + private String appName; +} diff --git a/src/main/java/com/banesco/module/msg_response_header/domain/model/Status.java b/src/main/java/com/banesco/module/msg_response_header/domain/model/Status.java new file mode 100644 index 0000000..6ab6ba7 --- /dev/null +++ b/src/main/java/com/banesco/module/msg_response_header/domain/model/Status.java @@ -0,0 +1,24 @@ +package com.banesco.module.msg_response_header.domain.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.*; + +import java.util.List; + +@Getter +@ToString +@Builder +@NoArgsConstructor +@AllArgsConstructor +@RegisterForReflection +public class Status { + private String statusType; + private String statusCode; + private String statusDesc; + private String applicationName; + private int lineNumber; + private List additionalStatus; + private String severity; + private String statusInd; + private String logId; +} diff --git a/src/main/java/com/banesco/module/payment_initiation_request/application/service/PaymentInitiationRequestService.java b/src/main/java/com/banesco/module/payment_initiation_request/application/service/PaymentInitiationRequestService.java index 4ef2d3f..12febad 100644 --- a/src/main/java/com/banesco/module/payment_initiation_request/application/service/PaymentInitiationRequestService.java +++ b/src/main/java/com/banesco/module/payment_initiation_request/application/service/PaymentInitiationRequestService.java @@ -1,9 +1,15 @@ package com.banesco.module.payment_initiation_request.application.service; import com.banesco.common.application.helper.MessageHelper; +import com.banesco.common.application.helper.PartyValidateHelper; import com.banesco.common.domain.exception.HttpStatusCodeException; import com.banesco.common.domain.model.ApiResponse; +import com.banesco.common.domain.model.Either; import com.banesco.common.infrastructure.context.RequestContext; +import com.banesco.module.black_list.application.usecase.BlackListUseCase; +import com.banesco.module.black_list.domain.dto.response.BlackListResponse; +import com.banesco.module.get_affiliation.application.usecase.GetAffiliationUseCase; +import com.banesco.module.get_affiliation.domain.dto.response.GetAffiliationResponse; import com.banesco.module.payment_initiation_request.application.usecase.DomainUseCase; import com.banesco.module.payment_initiation_request.application.usecase.PaymentInitiationRequestUseCase; import com.banesco.module.payment_initiation_request.domain.dto.request.PaymentInitiationRequestRequest; @@ -26,6 +32,8 @@ public class PaymentInitiationRequestService implements PaymentInitiationRequest private final MessageHelper messageHelper; private final ServiceStatusUseCase serviceStatusUseCase; + private final BlackListUseCase blackListUseCase; + private final GetAffiliationUseCase getAffiliationUseCase; private final SecurityTraceUseCase securityTraceUseCase; private final DomainUseCase domainUseCase; @@ -33,11 +41,15 @@ public class PaymentInitiationRequestService implements PaymentInitiationRequest public PaymentInitiationRequestService( MessageHelper messageHelper, ServiceStatusUseCase serviceStatusUseCase, + BlackListUseCase blackListUseCase, + GetAffiliationUseCase getAffiliationUseCase, SecurityTraceUseCase securityTraceUseCase, DomainUseCase domainUseCase ) { this.messageHelper = messageHelper; this.serviceStatusUseCase = serviceStatusUseCase; + this.blackListUseCase = blackListUseCase; + this.getAffiliationUseCase = getAffiliationUseCase; this.securityTraceUseCase = securityTraceUseCase; this.domainUseCase = domainUseCase; } @@ -57,6 +69,9 @@ public class PaymentInitiationRequestService implements PaymentInitiationRequest throw HttpStatusCodeException.serviceUnavailable("VRN04"); } + blackList(request); + getAffiliation(request); + ApiResponse apiResponse = domain(request); response = messageHelper.handleSuccess( @@ -117,6 +132,69 @@ public class PaymentInitiationRequestService implements PaymentInitiationRequest return isServiceActive; } + private void blackList( + PaymentInitiationRequestRequest request + ) { + log.info("Ejecutando llamada al api de la consulta de la lista negra"); + + try { + Either responseEither = blackListUseCase.execute( + request, BlackListResponse.class, BlackListResponse.class + ); + BlackListResponse response = (responseEither.isLeft()) + ? responseEither.getLeft() + : responseEither.getRight(); + + PartyValidateHelper.validateBlackListStatus( + response.getBlackList(), + response.getStatus() + ); + } catch (HttpStatusCodeException e) { + log.info( + "Error HTTP al ejecutar la consulta de la lista negra: {} -> {}", + e.getStatusCode(), + e.getMessage() + ); + throw e; + } catch (Exception e) { + log.info( + "Error al ejecutar la consulta de la lista negra: {}", + e.getMessage() + ); + throw e; + } + } + + private void getAffiliation( + PaymentInitiationRequestRequest request + ) { + log.info("Ejecutando llamada al api de la consulta de afiliacion"); + + try { + Either responseEither = getAffiliationUseCase.execute( + request, GetAffiliationResponse.class, GetAffiliationResponse.class + ); + GetAffiliationResponse response = (responseEither.isLeft()) + ? responseEither.getLeft() + : responseEither.getRight(); + + PartyValidateHelper.validateStatus(response.getStatus()); + } catch (HttpStatusCodeException e) { + log.info( + "Error HTTP al ejecutar la consulta de afiliacion: {} -> {}", + e.getStatusCode(), + e.getMessage() + ); + throw e; + } catch (Exception e) { + log.info( + "Error al ejecutar la consulta de afiliacion: {}", + e.getMessage() + ); + throw e; + } + } + private void securityTrace( PaymentInitiationRequestRequest request, Response response, diff --git a/src/main/java/com/banesco/module/payment_initiation_request/domain/dto/response/PaymentInitiationRequestResponse.java b/src/main/java/com/banesco/module/payment_initiation_request/domain/dto/response/PaymentInitiationRequestResponse.java index ae22c0b..f31c6e5 100644 --- a/src/main/java/com/banesco/module/payment_initiation_request/domain/dto/response/PaymentInitiationRequestResponse.java +++ b/src/main/java/com/banesco/module/payment_initiation_request/domain/dto/response/PaymentInitiationRequestResponse.java @@ -11,8 +11,8 @@ import org.eclipse.microprofile.openapi.annotations.media.Schema; @NoArgsConstructor @AllArgsConstructor @RegisterForReflection -@Schema(description = "Respuesta de la notificación del cliente") +@Schema(description = "Respuesta de la solicitud de pago del cliente") public class PaymentInitiationRequestResponse { - @Schema(description = "Instancia de la notificación del cliente") + @Schema(description = "Instancia de la solicitud de pago del cliente") private PaymentInitiationTransaction paymentInitiationTransaction; } diff --git a/src/main/java/com/banesco/module/payment_initiation_request/domain/model/PaymentInitiationTransactionInstanceRecord.java b/src/main/java/com/banesco/module/payment_initiation_request/domain/model/PaymentInitiationTransactionInstanceRecord.java index 31677f1..4ce3268 100644 --- a/src/main/java/com/banesco/module/payment_initiation_request/domain/model/PaymentInitiationTransactionInstanceRecord.java +++ b/src/main/java/com/banesco/module/payment_initiation_request/domain/model/PaymentInitiationTransactionInstanceRecord.java @@ -14,10 +14,10 @@ import java.math.BigDecimal; @AllArgsConstructor @RegisterForReflection public class PaymentInitiationTransactionInstanceRecord { - private PaymentTransactionType paymentTransactionType; - private Payer payerReference; - private Payee payeeReference; - private BigDecimal amount; - private String currencyCode; - private String paymentPurpose; + private PaymentTransactionType paymentTransactionType; // operationTypeCode + private Payer payerReference; // applicantId + private Payee payeeReference; // recipientId + private BigDecimal amount; // amount + private String currencyCode; // currency + private String paymentPurpose; // concept } diff --git a/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/client/DomPaymentInitiationRequestClient.java b/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/client/DomPaymentInitiationRequestClient.java index d2c5ed6..c806c08 100644 --- a/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/client/DomPaymentInitiationRequestClient.java +++ b/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/client/DomPaymentInitiationRequestClient.java @@ -25,7 +25,7 @@ public class DomPaymentInitiationRequestClient implements DomainUseCase { RestClientConfig restClientConfig ) { this.httpClientUseCase = httpClientUseCase; - this.domainConfig = restClientConfig.getDomDocserviceFileConfig(); + this.domainConfig = restClientConfig.getDomPaymentRequestConfig(); log.info("Configuracion cargada para bus-payment-initiation-request: {}", domainConfig); } @@ -46,8 +46,6 @@ public class DomPaymentInitiationRequestClient implements DomainUseCase { domainConfig.getTimeout().getResponse() ); - log.debug("Request configurado: {}", request); - try { ApiResponse response = httpClientUseCase.execute(request); diff --git a/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/resource/PaymentInitiationRequestResource.java b/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/resource/PaymentInitiationRequestResource.java index 8cdff4b..d8286a0 100644 --- a/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/resource/PaymentInitiationRequestResource.java +++ b/src/main/java/com/banesco/module/payment_initiation_request/infrastructure/resource/PaymentInitiationRequestResource.java @@ -37,8 +37,8 @@ public class PaymentInitiationRequestResource { @POST @Path("/initiate") @Operation( - summary = "Proveer informacion de la transaccion", - description = "Envía la notificación del cliente" + summary = "Genera informacion de la solicitud de pago", + description = "Envía la solicitud del pago del cliente" ) @APIResponses(value = { @APIResponse( @@ -64,7 +64,7 @@ public class PaymentInitiationRequestResource { value = """ { "data": { - "documentService": { + "paymentInitiationTransaction": { "transaction": { "transactionIdentification": { "identifierValue": "1" @@ -216,8 +216,7 @@ public class PaymentInitiationRequestResource { }) public Response initiate( @RequestBody( - description = "Request para la notificación del cliente", - required = true, + description = "Request de la solicitud del pago del cliente", content = @Content( mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = PaymentInitiationRequestRequest.class), diff --git a/src/main/java/com/banesco/module/security_trace/infrastructure/client/SecurityTraceClient.java b/src/main/java/com/banesco/module/security_trace/infrastructure/client/SecurityTraceClient.java index fb7b1e3..5f59cda 100644 --- a/src/main/java/com/banesco/module/security_trace/infrastructure/client/SecurityTraceClient.java +++ b/src/main/java/com/banesco/module/security_trace/infrastructure/client/SecurityTraceClient.java @@ -59,8 +59,6 @@ public class SecurityTraceClient implements SecurityTraceUseCase { securityTraceConfig.getTimeout().getResponse() ); - log.debug("Request configurado: {}", request); - try { T response = httpClientUseCase.execute(request); diff --git a/src/main/java/com/banesco/module/service_status/infrastructure/client/ServiceStatusClient.java b/src/main/java/com/banesco/module/service_status/infrastructure/client/ServiceStatusClient.java index f362237..b50513d 100644 --- a/src/main/java/com/banesco/module/service_status/infrastructure/client/ServiceStatusClient.java +++ b/src/main/java/com/banesco/module/service_status/infrastructure/client/ServiceStatusClient.java @@ -48,8 +48,6 @@ public class ServiceStatusClient implements ServiceStatusUseCase { serviceStatusConfig.getTimeout().getResponse() ); - log.debug("Request configurado: {}", request); - try { T response = httpClientUseCase.execute(request); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index ebf35dc..3741346 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -7,16 +7,16 @@ quarkus: core-threads: 1 api: - source-id: BDFAT - allowed: - app-id: '[{"appId":"DANIAPP","request":{"serviceType":"P2P","limitType":"REC","casheaIndicator":"NO"}}]' + source-id: BPIR read-messages: from-props: true bus-payment-initiation-request: messages: key: 'bus-payment-initiation-request' - content: '[{"backendCode":"200","httpCode":200,"statusCode":"200","description":"Operacion exitosa"},{"backendCode":"R404","httpCode":404,"statusCode":"404","description":"Datos de validacion no encontrado."},{"backendCode":"503","httpCode":503,"statusCode":"503","description":"Uso interno"},{"backendCode":"422","httpCode":422,"statusCode":"422","description":"Uso interno"},{"backendCode":"500","httpCode":500,"statusCode":"500","description":"Uso interno"},{"backendCode":"100","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-382505","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-380002","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"ERROR","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"400","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"401","httpCode":401,"statusCode":"401","description":"Uso interno"},{"backendCode":"403","httpCode":403,"statusCode":"403","description":"Uso interno"},{"backendCode":"404","httpCode":404,"statusCode":"404","description":"Uso interno"},{"backendCode":"default","httpCode":409,"statusCode":"409","description":"Conflicto"},{"backendCode":"424","httpCode":424,"statusCode":"424","description":"Error de dependencia"},{"backendCode":"VDE01","httpCode":400,"statusCode":"VDE01","description":"VDE01 - Error en dato de entrada obligatorio: %s"},{"backendCode":"VDE02","httpCode":400,"statusCode":"VDE02","description":"VDE02 - Error en valor permitido para campo: %s"},{"backendCode":"VRN04","httpCode":"503","statusCode":"VRN04","description":"Servicio en horario de mantenimiento","status":"error"},{"backendCode":"VRN02","httpCode":"204","statusCode":"VRN02","description":"Cliente sin productos"}]' + content: '[{"backendCode":"001","httpCode":400,"statusCode":"001","description":"LN001 - Error en cabecera backend"},{"backendCode":"003","httpCode":409,"statusCode":"003","description":"Uso interno"},{"backendCode":"004","httpCode":400,"statusCode":"004","description":"Error en cabecera backend"},{"backendCode":"007","httpCode":400,"statusCode":"007","description":"Validar el No cta enviada"},{"backendCode":"010","httpCode":401,"statusCode":"010","description":"Uso interno"},{"backendCode":"011","httpCode":400,"statusCode":"011","description":"Validar montos"},{"backendCode":"012","httpCode":400,"statusCode":"012","description":"Uso interno"},{"backendCode":"013","httpCode":400,"statusCode":"013","description":"Validar el No cta enviada"},{"backendCode":"016","httpCode":400,"statusCode":"016","description":"Validar montos"},{"backendCode":"024","httpCode":403,"statusCode":"024","description":"Uso interno"},{"backendCode":"025","httpCode":403,"statusCode":"025","description":"Uso interno"},{"backendCode":"026","httpCode":401,"statusCode":"026","description":"Uso interno"},{"backendCode":"027","httpCode":401,"statusCode":"027","description":"Uso interno"},{"backendCode":"028","httpCode":401,"statusCode":"028","description":"Error en cabecera backend"},{"backendCode":"035","httpCode":400,"statusCode":"035","description":"Uso interno"},{"backendCode":"037","httpCode":400,"statusCode":"037","description":"LN037 - ID Cliente No Encontrada."},{"backendCode":"048","httpCode":401,"statusCode":"048","description":"Transaccion no puede ser ejecutada"},{"backendCode":"049","httpCode":400,"statusCode":"049","description":"El numero de telefono celular afiliado a la Banca digital es invalido. Le invitamos a realizar la actualizacion en la agencia de su preferencia"},{"backendCode":"072","httpCode":400,"statusCode":"072","description":"Validar parametros de entrada"},{"backendCode":"077","httpCode":400,"statusCode":"077","description":"Uso interno"},{"backendCode":"100","httpCode":400,"statusCode":"100","description":"Uso interno"},{"backendCode":"108","httpCode":400,"statusCode":"108","description":"Validar el No cta enviada"},{"backendCode":"109","httpCode":403,"statusCode":"109","description":"Uso interno"},{"backendCode":"199","httpCode":400,"statusCode":"199","description":"Uso interno"},{"backendCode":"240","httpCode":402,"statusCode":"240","description":"Uso interno"},{"backendCode":"249","httpCode":402,"statusCode":"249","description":"Error en cabecera backend"},{"backendCode":"257","httpCode":402,"statusCode":"257","description":"Validar configuracion montos y limites"},{"backendCode":"311","httpCode":403,"statusCode":"311","description":"Uso interno"},{"backendCode":"322","httpCode":403,"statusCode":"322","description":"Uso interno"},{"backendCode":"388","httpCode":403,"statusCode":"388","description":"AFPM388 - Registro no existente"},{"backendCode":"408","httpCode":403,"statusCode":"408","description":"Uso interno"},{"backendCode":"415","httpCode":400,"statusCode":"415","description":"Uso interno"},{"backendCode":"424","httpCode":424,"statusCode":"424","description":"Uso interno"},{"backendCode":"451","httpCode":403,"statusCode":"451","description":"Uso interno"},{"backendCode":"569","httpCode":400,"statusCode":"569","description":"LN569 - Error en cabecera backend"},{"backendCode":"607","httpCode":403,"statusCode":"607","description":"Uso interno"},{"backendCode":"609","httpCode":403,"statusCode":"609","description":"Error interno backend"},{"backendCode":"622","httpCode":204,"statusCode":"622","description":"Uso interno"},{"backendCode":"655","httpCode":400,"statusCode":"655","description":"Uso interno"},{"backendCode":"667","httpCode":400,"statusCode":"667","description":"Uso interno"},{"backendCode":"670","httpCode":404,"statusCode":"670","description":"Uso interno"},{"backendCode":"715","httpCode":715,"statusCode":"715","description":"Error en cabecera backend"},{"backendCode":"725","httpCode":400,"statusCode":"725","description":"Uso interno"},{"backendCode":"744","httpCode":403,"statusCode":"744","description":"Uso interno"},{"backendCode":"758","httpCode":401,"statusCode":"758","description":"Uso interno"},{"backendCode":"762","httpCode":403,"statusCode":"762","description":"Validar el No cta enviada"},{"backendCode":"763","httpCode":403,"statusCode":"763","description":"Validar el No cta enviada"},{"backendCode":"764","httpCode":403,"statusCode":"764","description":"Validar el No cta enviada"},{"backendCode":"765","httpCode":403,"statusCode":"765","description":"Validar el No cta enviada"},{"backendCode":"766","httpCode":403,"statusCode":"766","description":"Validar el No cta enviada"},{"backendCode":"770","httpCode":400,"statusCode":"770","description":"Uso interno"},{"backendCode":"823","httpCode":400,"statusCode":"823","description":"Uso interno"},{"backendCode":"826","httpCode":400,"statusCode":"826","description":"Uso interno"},{"backendCode":"918","httpCode":403,"statusCode":"918","description":"Error en cabecera backend"},{"backendCode":"924","httpCode":924,"statusCode":"924","description":"Error interno backend"},{"backendCode":"963","httpCode":963,"statusCode":"963","description":"Error interno backend"},{"backendCode":"965","httpCode":402,"statusCode":"965","description":"Validar configuracion montos y limites"},{"backendCode":"991","httpCode":403,"statusCode":"991","description":"Error interno backend"},{"backendCode":"992","httpCode":402,"statusCode":"992","description":"Validar configuracion montos y limites"},{"backendCode":"999","httpCode":403,"statusCode":"999","description":"LN999 - Error interno backend"},{"backendCode":"200","httpCode":200,"statusCode":"200","description":"Operacion exitosa"},{"backendCode":"OK","httpCode":200,"statusCode":"OK","description":"Operacion exitosa"},{"backendCode":"503","httpCode":503,"statusCode":"503","description":"Uso interno"},{"backendCode":"422","httpCode":422,"statusCode":"422","description":"Uso interno"},{"backendCode":"500","httpCode":503,"statusCode":"500","description":"Uso interno"},{"backendCode":"SERVICE_UNAVAILABLE","httpCode":500,"statusCode":"SERVICE_UNAVAILABLE","description":"Uso interno"},{"backendCode":"OSB-382505","httpCode":503,"statusCode":"OSB-382505","description":"Uso interno"},{"backendCode":"OSB-380002","httpCode":503,"statusCode":"OSB-380002","description":"Uso interno"},{"backendCode":"ERROR","httpCode":400,"statusCode":"ERROR","description":"Uso interno"},{"backendCode":"400","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"401","httpCode":401,"statusCode":"401","description":"Uso interno"},{"backendCode":"403","httpCode":403,"statusCode":"403","description":"Uso interno"},{"backendCode":"404","httpCode":404,"statusCode":"404","description":"Uso interno"},{"backendCode":"429","httpCode":429,"statusCode":"429","description":"Uso interno"},{"backendCode":"default","httpCode":409,"statusCode":"default","description":"Conflicto"},{"backendCode":"R404","httpCode":404,"statusCode":"404","description":"Datos de validacion no encontrado."},{"backendCode":"VDE01","httpCode":400,"statusCode":"VDE01","description":"VDE01 - Error en dato de entrada obligatorio: %s"},{"backendCode":"VDE02","httpCode":400,"statusCode":"VDE02","description":"VDE02 - Error en valor permitido para campo: %s"},{"backendCode":"VRN04","httpCode":503,"statusCode":"VRN04","description":"Servicio en horario de mantenimiento"}]' rest-client: dom-payment-initiation-request: '{"url":"http://localhost:8083/payment-initiation-request/initiate","timeout":{"connect":10000,"response":10000}}' security-trace: '{"url":"http://api-register-security-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/register-security/save","timeout":{"connect":10000,"response":10000},"request":{"sp":"spAPI_Traza","codEve":"P2PVUEL","codEve2":"P2PVUEL","codBan":"01","codMon":"BS"}}' - service-status: '{"url":"http://api-get-service-status-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/service/status","timeout":{"connect":10000,"response":10000},"request":{"applicationId": "","transactionId": "","bankService": {"bankCode": "01","serviceCode": "APIFI","eventCode": "P2PVUEL"}}}' \ No newline at end of file + service-status: '{"url":"http://api-get-service-status-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/service/status","timeout":{"connect":10000,"response":10000},"request":{"applicationId": "","transactionId": "","bankService": {"bankCode": "01","serviceCode": "APIFI","eventCode": "P2PVUEL"}}}' + black-list: '{"url":"http://api-validate-restriction-list-client-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/risk-rating/blacklist","timeout":{"connect":10000,"response":10000},"request":{"msgRqHdr":{"sourceChannelCode":"INT","operatorCode":"BAN1738M02","networkTrnInfo":[{"transactionCode":"8494","bankId":"01","channelUserId":"APIS"}],"applicantData":{"application":"APIMGMT"},"vbProtocol":{"transactionInd":false,"vbProtocolInd":true}},"domain":"osbp2p"}}' + get-affiliation: '{"url":"http://api-p2p-get-affiliation-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/p2p/get-affiliation","timeout":{"connect":10000,"response":10000},"request":{"msgRqHdr":{"sourceChannelCode":"APP","operatorCode":"BAN0591W01","networkTrnInfo":[{"transactionCode":"1799","bankId":"01","channelUserId":"API"}],"applicantData":{"application":"APIMGMT"},"vbProtocol":{"transactionInd":false,"vbProtocolInd":true}},"svcType":"P2P","affilType":"4","sourceChannelCode":"APP","domain":"osbp2p"}}' \ No newline at end of file diff --git a/src/main/resources/configmap.yaml b/src/main/resources/configmap.yaml index 3aabbd8..b30a81d 100644 --- a/src/main/resources/configmap.yaml +++ b/src/main/resources/configmap.yaml @@ -8,7 +8,7 @@ metadata: creationTimestamp: '2026-01-19T23:35:27Z' annotations: kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"api.allowed.app-id":"[{\"appId\":\"DANIAPP\",\"request\":{\"serviceType\":\"P2P\",\"limitType\":\"REC\",\"casheaIndicator\":\"NO\"}}]","api.bus-payment-initiation-request.messages.content":"[{\"backendCode\":\"200\",\"httpCode\":200,\"statusCode\":\"200\",\"description\":\"Operacion exitosa\"},{\"backendCode\":\"R404\",\"httpCode\":404,\"statusCode\":\"404\",\"description\":\"Datos de validacion no encontrado.\"},{\"backendCode\":\"503\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"Uso interno\"},{\"backendCode\":\"422\",\"httpCode\":422,\"statusCode\":\"422\",\"description\":\"Uso interno\"},{\"backendCode\":\"500\",\"httpCode\":500,\"statusCode\":\"500\",\"description\":\"Uso interno\"},{\"backendCode\":\"100\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"VDR13 - OSB Disponible\"},{\"backendCode\":\"OSB-382505\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"VDR13 - OSB Disponible\"},{\"backendCode\":\"OSB-380002\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"VDR13 - OSB Disponible\"},{\"backendCode\":\"ERROR\",\"httpCode\":400,\"statusCode\":\"400\",\"description\":\"Uso interno\"},{\"backendCode\":\"400\",\"httpCode\":400,\"statusCode\":\"400\",\"description\":\"Uso interno\"},{\"backendCode\":\"401\",\"httpCode\":401,\"statusCode\":\"401\",\"description\":\"Uso interno\"},{\"backendCode\":\"403\",\"httpCode\":403,\"statusCode\":\"403\",\"description\":\"Uso interno\"},{\"backendCode\":\"404\",\"httpCode\":404,\"statusCode\":\"404\",\"description\":\"Uso interno\"},{\"backendCode\":\"default\",\"httpCode\":409,\"statusCode\":\"409\",\"description\":\"Conflicto\"},{\"backendCode\":\"424\",\"httpCode\":424,\"statusCode\":\"424\",\"description\":\"Error de dependencia\"},{\"backendCode\":\"VDE01\",\"httpCode\":400,\"statusCode\":\"VDE01\",\"description\":\"VDE01 - Error en dato de entrada obligatorio: %s\"},{\"backendCode\":\"VDE02\",\"httpCode\":400,\"statusCode\":\"VDE02\",\"description\":\"VDE02 - Error en valor permitido para campo: %s\"},{\"backendCode\":\"VRN04\",\"httpCode\":\"503\",\"statusCode\":\"VRN04\",\"description\":\"Servicio en horario de mantenimiento\",\"status\":\"error\"},{\"backendCode\":\"204\",\"httpCode\":\"200\",\"statusCode\":\"200\",\"description\":\"Cliente sin productos\",\"status\":\"ok\"}]","api.bus-payment-initiation-request.messages.key":"bus-payment-initiation-request","api.read-messages.from-props":"true","api.rest-client.dom-payment-initiation-request":"{\"url\":\"http://dom-payment-initiation-request-route-proyecto-prueba-ja.apps.desplakur3.desintra.banesco.com/payment-initiation-request/provide\",\"timeout\":{\"connect\":10000,\"response\":10000}}","api.rest-client.security-trace":"{\"url\":\"http://api-register-security-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/register-security/save\",\"timeout\":{\"connect\":10000,\"response\":10000},\"request\":{\"sp\":\"spAPI_Traza\",\"codEve\":\"P2PVUEL\",\"codEve2\":\"P2PVUEL\",\"codBan\":\"01\",\"codMon\":\"BS\"}}","api.rest-client.service-status":"{\"url\":\"http://api-get-service-status-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/service/status\",\"timeout\":{\"connect\":10000,\"response\":10000},\"request\":{\"applicationId\": \"\",\"transactionId\": \"\",\"bankService\": {\"bankCode\": \"01\",\"serviceCode\": \"APIFI\",\"eventCode\": \"P2PVUEL\"}}}","api.source-id":"BDFAT","quarkus.application.name":"bus-payment-initiation-request","quarkus.application.version":"1.0.0","quarkus.debug.print-startup-times":"true","quarkus.debug.reflection":"false","quarkus.http.non-application-root-path":"actuator","quarkus.http.port":"8080","quarkus.log.consol.enable":"true","quarkus.log.consol.format":"%d{HH:mm:ss.SSS} %-5p [%t] [%X{requestId}] %c{1} - %s%e%n","quarkus.log.console.enable":"true","quarkus.log.console.format":"%d{HH:mm:ss.SSS} %-5p [%t] [%X{requestId}] %c{1} - %s%e%n","quarkus.log.level":"INFO","quarkus.profile":"dev","quarkus.smallrye-health.liveness-path":"/actuator/health/live","quarkus.smallrye-health.readiness-path":"/actuator/health/ready","quarkus.smallrye-health.root-path":"/actuator/health","quarkus.smallrye-health.ui.enable":"false","quarkus.smallrye-openapi.enable":"true","quarkus.smallrye-openapi.path":"/openapi","quarkus.swagger-ui.always-include":"true","quarkus.swagger-ui.path":"/swagger-ui"},"kind":"ConfigMap","metadata":{"annotations":{},"app":"bus-payment-initiation-request","labels":null,"name":"configmap-bus-payment-initiation-request","namespace":"proyecto-prueba-ja"}} + {"apiVersion":"v1","data":{"api.allowed.app-id":"[{\"appId\":\"DANIAPP\",\"request\":{\"serviceType\":\"P2P\",\"limitType\":\"REC\",\"casheaIndicator\":\"NO\"}}]","api.bus-payment-initiation-request.messages.content":"[{\"backendCode\":\"200\",\"httpCode\":200,\"statusCode\":\"200\",\"description\":\"Operacion exitosa\"},{\"backendCode\":\"R404\",\"httpCode\":404,\"statusCode\":\"404\",\"description\":\"Datos de validacion no encontrado.\"},{\"backendCode\":\"503\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"Uso interno\"},{\"backendCode\":\"422\",\"httpCode\":422,\"statusCode\":\"422\",\"description\":\"Uso interno\"},{\"backendCode\":\"500\",\"httpCode\":500,\"statusCode\":\"500\",\"description\":\"Uso interno\"},{\"backendCode\":\"100\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"VDR13 - OSB Disponible\"},{\"backendCode\":\"OSB-382505\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"VDR13 - OSB Disponible\"},{\"backendCode\":\"OSB-380002\",\"httpCode\":503,\"statusCode\":\"503\",\"description\":\"VDR13 - OSB Disponible\"},{\"backendCode\":\"ERROR\",\"httpCode\":400,\"statusCode\":\"400\",\"description\":\"Uso interno\"},{\"backendCode\":\"400\",\"httpCode\":400,\"statusCode\":\"400\",\"description\":\"Uso interno\"},{\"backendCode\":\"401\",\"httpCode\":401,\"statusCode\":\"401\",\"description\":\"Uso interno\"},{\"backendCode\":\"403\",\"httpCode\":403,\"statusCode\":\"403\",\"description\":\"Uso interno\"},{\"backendCode\":\"404\",\"httpCode\":404,\"statusCode\":\"404\",\"description\":\"Uso interno\"},{\"backendCode\":\"default\",\"httpCode\":409,\"statusCode\":\"409\",\"description\":\"Conflicto\"},{\"backendCode\":\"424\",\"httpCode\":424,\"statusCode\":\"424\",\"description\":\"Error de dependencia\"},{\"backendCode\":\"VDE01\",\"httpCode\":400,\"statusCode\":\"VDE01\",\"description\":\"VDE01 - Error en dato de entrada obligatorio: %s\"},{\"backendCode\":\"VDE02\",\"httpCode\":400,\"statusCode\":\"VDE02\",\"description\":\"VDE02 - Error en valor permitido para campo: %s\"},{\"backendCode\":\"VRN04\",\"httpCode\":\"503\",\"statusCode\":\"VRN04\",\"description\":\"Servicio en horario de mantenimiento\",\"status\":\"error\"},{\"backendCode\":\"204\",\"httpCode\":\"200\",\"statusCode\":\"200\",\"description\":\"Cliente sin productos\",\"status\":\"ok\"}]","api.bus-payment-initiation-request.messages.key":"bus-payment-initiation-request","api.read-messages.from-props":"true","api.rest-client.dom-payment-initiation-request":"{\"url\":\"http://dom-payment-initiation-request-route-proyecto-prueba-ja.apps.desplakur3.desintra.banesco.com/payment-initiation-request/provide\",\"timeout\":{\"connect\":10000,\"response\":10000}}","api.rest-client.security-trace":"{\"url\":\"http://api-register-security-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/register-security/save\",\"timeout\":{\"connect\":10000,\"response\":10000},\"request\":{\"sp\":\"spAPI_Traza\",\"codEve\":\"P2PVUEL\",\"codEve2\":\"P2PVUEL\",\"codBan\":\"01\",\"codMon\":\"BS\"}}","api.rest-client.service-status":"{\"url\":\"http://api-get-service-status-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/service/status\",\"timeout\":{\"connect\":10000,\"response\":10000},\"request\":{\"applicationId\": \"\",\"transactionId\": \"\",\"bankService\": {\"bankCode\": \"01\",\"serviceCode\": \"APIFI\",\"eventCode\": \"P2PVUEL\"}}}","api.source-id":"BPIR","quarkus.application.name":"bus-payment-initiation-request","quarkus.application.version":"1.0.0","quarkus.debug.print-startup-times":"true","quarkus.debug.reflection":"false","quarkus.http.non-application-root-path":"actuator","quarkus.http.port":"8080","quarkus.log.consol.enable":"true","quarkus.log.consol.format":"%d{HH:mm:ss.SSS} %-5p [%t] [%X{requestId}] %c{1} - %s%e%n","quarkus.log.console.enable":"true","quarkus.log.console.format":"%d{HH:mm:ss.SSS} %-5p [%t] [%X{requestId}] %c{1} - %s%e%n","quarkus.log.level":"INFO","quarkus.profile":"dev","quarkus.smallrye-health.liveness-path":"/actuator/health/live","quarkus.smallrye-health.readiness-path":"/actuator/health/ready","quarkus.smallrye-health.root-path":"/actuator/health","quarkus.smallrye-health.ui.enable":"false","quarkus.smallrye-openapi.enable":"true","quarkus.smallrye-openapi.path":"/openapi","quarkus.swagger-ui.always-include":"true","quarkus.swagger-ui.path":"/swagger-ui"},"kind":"ConfigMap","metadata":{"annotations":{},"app":"bus-payment-initiation-request","labels":null,"name":"configmap-bus-payment-initiation-request","namespace":"proyecto-prueba-ja"}} managedFields: - manager: kubectl-client-side-apply operation: Update @@ -54,7 +54,6 @@ data: quarkus.application.version: 1.0.0 quarkus.log.level: INFO quarkus.debug.reflection: 'false' - api.allowed.app-id: '[{"appId":"DANIAPP","request":{"serviceType":"P2P","limitType":"REC","casheaIndicator":"NO"}}]' quarkus.debug.print-startup-times: 'true' quarkus.swagger-ui.path: /swagger-ui quarkus.application.name: bus-payment-initiation-request @@ -63,15 +62,17 @@ data: quarkus.http.non-application-root-path: actuator api.rest-client.service-status: '{"url":"http://api-get-service-status-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/service/status","timeout":{"connect":10000,"response":10000},"request":{"applicationId": "","transactionId": "","bankService": {"bankCode": "01","serviceCode": "APIFI","eventCode": "P2PVUEL"}}}' api.rest-client.dom-payment-initiation-request: '{"url":"http://dom-payment-initiation-request-route-proyecto-prueba-ja.apps.desplakur3.desintra.banesco.com/payment-initiation-request/initiate","timeout":{"connect":10000,"response":10000}}' + api.rest-client.black-list: '{"url":"http://api-validate-restriction-list-client-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/risk-rating/blacklist","timeout":{"connect":10000,"response":10000},"request":{"msgRqHdr":{"sourceChannelCode":"INT","operatorCode":"BAN1738M02","networkTrnInfo":[{"transactionCode":"8494","bankId":"01","channelUserId":"APIS"}],"applicantData":{"application":"APIMGMT"},"vbProtocol":{"transactionInd":false,"vbProtocolInd":true}},"domain":"osbp2p"}}' + api.rest-client.get-affiliation: '{"url":"http://api-p2p-get-affiliation-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/p2p/get-affiliation","timeout":{"connect":10000,"response":10000},"request":{"msgRqHdr":{"sourceChannelCode":"APP","operatorCode":"BAN0591W01","networkTrnInfo":[{"transactionCode":"1799","bankId":"01","channelUserId":"API"}],"applicantData":{"application":"APIMGMT"},"vbProtocol":{"transactionInd":false,"vbProtocolInd":true}},"svcType":"P2P","affilType":"4","sourceChannelCode":"APP","domain":"osbp2p"}}' api.read-messages.from-props: 'true' quarkus.http.port: '8080' quarkus.profile: dev quarkus.log.console.format: '%d{HH:mm:ss.SSS} %-5p [%t] [%X{requestId}] %c{1} - %s%e%n' quarkus.log.consol.format: '%d{HH:mm:ss.SSS} %-5p [%t] [%X{requestId}] %c{1} - %s%e%n' - api.bus-payment-initiation-request.messages.content: '[{"backendCode":"200","httpCode":200,"statusCode":"200","description":"Operacion exitosa"},{"backendCode":"R404","httpCode":404,"statusCode":"404","description":"Datos de validacion no encontrado."},{"backendCode":"503","httpCode":503,"statusCode":"503","description":"Uso interno"},{"backendCode":"422","httpCode":422,"statusCode":"422","description":"Uso interno"},{"backendCode":"500","httpCode":500,"statusCode":"500","description":"Uso interno"},{"backendCode":"100","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-382505","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"OSB-380002","httpCode":503,"statusCode":"503","description":"VDR13 - OSB Disponible"},{"backendCode":"ERROR","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"400","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"401","httpCode":401,"statusCode":"401","description":"Uso interno"},{"backendCode":"403","httpCode":403,"statusCode":"403","description":"Uso interno"},{"backendCode":"404","httpCode":404,"statusCode":"404","description":"Uso interno"},{"backendCode":"default","httpCode":409,"statusCode":"409","description":"Conflicto"},{"backendCode":"424","httpCode":424,"statusCode":"424","description":"Error de dependencia"},{"backendCode":"VDE01","httpCode":400,"statusCode":"VDE01","description":"VDE01 - Error en dato de entrada obligatorio: %s"},{"backendCode":"VDE02","httpCode":400,"statusCode":"VDE02","description":"VDE02 - Error en valor permitido para campo: %s"},{"backendCode":"VRN04","httpCode":"503","statusCode":"VRN04","description":"Servicio en horario de mantenimiento","status":"error"},{"backendCode":"204","httpCode":"200","statusCode":"200","description":"Cliente sin productos","status":"ok"}]' + api.bus-payment-initiation-request.messages.content: '[{"backendCode":"001","httpCode":400,"statusCode":"001","description":"LN001 - Error en cabecera backend"},{"backendCode":"003","httpCode":409,"statusCode":"003","description":"Uso interno"},{"backendCode":"004","httpCode":400,"statusCode":"004","description":"Error en cabecera backend"},{"backendCode":"007","httpCode":400,"statusCode":"007","description":"Validar el No cta enviada"},{"backendCode":"010","httpCode":401,"statusCode":"010","description":"Uso interno"},{"backendCode":"011","httpCode":400,"statusCode":"011","description":"Validar montos"},{"backendCode":"012","httpCode":400,"statusCode":"012","description":"Uso interno"},{"backendCode":"013","httpCode":400,"statusCode":"013","description":"Validar el No cta enviada"},{"backendCode":"016","httpCode":400,"statusCode":"016","description":"Validar montos"},{"backendCode":"024","httpCode":403,"statusCode":"024","description":"Uso interno"},{"backendCode":"025","httpCode":403,"statusCode":"025","description":"Uso interno"},{"backendCode":"026","httpCode":401,"statusCode":"026","description":"Uso interno"},{"backendCode":"027","httpCode":401,"statusCode":"027","description":"Uso interno"},{"backendCode":"028","httpCode":401,"statusCode":"028","description":"Error en cabecera backend"},{"backendCode":"035","httpCode":400,"statusCode":"035","description":"Uso interno"},{"backendCode":"037","httpCode":400,"statusCode":"037","description":"LN037 - ID Cliente No Encontrada."},{"backendCode":"048","httpCode":401,"statusCode":"048","description":"Transaccion no puede ser ejecutada"},{"backendCode":"049","httpCode":400,"statusCode":"049","description":"El numero de telefono celular afiliado a la Banca digital es invalido. Le invitamos a realizar la actualizacion en la agencia de su preferencia"},{"backendCode":"072","httpCode":400,"statusCode":"072","description":"Validar parametros de entrada"},{"backendCode":"077","httpCode":400,"statusCode":"077","description":"Uso interno"},{"backendCode":"100","httpCode":400,"statusCode":"100","description":"Uso interno"},{"backendCode":"108","httpCode":400,"statusCode":"108","description":"Validar el No cta enviada"},{"backendCode":"109","httpCode":403,"statusCode":"109","description":"Uso interno"},{"backendCode":"199","httpCode":400,"statusCode":"199","description":"Uso interno"},{"backendCode":"240","httpCode":402,"statusCode":"240","description":"Uso interno"},{"backendCode":"249","httpCode":402,"statusCode":"249","description":"Error en cabecera backend"},{"backendCode":"257","httpCode":402,"statusCode":"257","description":"Validar configuracion montos y limites"},{"backendCode":"311","httpCode":403,"statusCode":"311","description":"Uso interno"},{"backendCode":"322","httpCode":403,"statusCode":"322","description":"Uso interno"},{"backendCode":"388","httpCode":403,"statusCode":"388","description":"AFPM388 - Registro no existente"},{"backendCode":"408","httpCode":403,"statusCode":"408","description":"Uso interno"},{"backendCode":"415","httpCode":400,"statusCode":"415","description":"Uso interno"},{"backendCode":"424","httpCode":424,"statusCode":"424","description":"Uso interno"},{"backendCode":"451","httpCode":403,"statusCode":"451","description":"Uso interno"},{"backendCode":"569","httpCode":400,"statusCode":"569","description":"LN569 - Error en cabecera backend"},{"backendCode":"607","httpCode":403,"statusCode":"607","description":"Uso interno"},{"backendCode":"609","httpCode":403,"statusCode":"609","description":"Error interno backend"},{"backendCode":"622","httpCode":204,"statusCode":"622","description":"Uso interno"},{"backendCode":"655","httpCode":400,"statusCode":"655","description":"Uso interno"},{"backendCode":"667","httpCode":400,"statusCode":"667","description":"Uso interno"},{"backendCode":"670","httpCode":404,"statusCode":"670","description":"Uso interno"},{"backendCode":"715","httpCode":715,"statusCode":"715","description":"Error en cabecera backend"},{"backendCode":"725","httpCode":400,"statusCode":"725","description":"Uso interno"},{"backendCode":"744","httpCode":403,"statusCode":"744","description":"Uso interno"},{"backendCode":"758","httpCode":401,"statusCode":"758","description":"Uso interno"},{"backendCode":"762","httpCode":403,"statusCode":"762","description":"Validar el No cta enviada"},{"backendCode":"763","httpCode":403,"statusCode":"763","description":"Validar el No cta enviada"},{"backendCode":"764","httpCode":403,"statusCode":"764","description":"Validar el No cta enviada"},{"backendCode":"765","httpCode":403,"statusCode":"765","description":"Validar el No cta enviada"},{"backendCode":"766","httpCode":403,"statusCode":"766","description":"Validar el No cta enviada"},{"backendCode":"770","httpCode":400,"statusCode":"770","description":"Uso interno"},{"backendCode":"823","httpCode":400,"statusCode":"823","description":"Uso interno"},{"backendCode":"826","httpCode":400,"statusCode":"826","description":"Uso interno"},{"backendCode":"918","httpCode":403,"statusCode":"918","description":"Error en cabecera backend"},{"backendCode":"924","httpCode":924,"statusCode":"924","description":"Error interno backend"},{"backendCode":"963","httpCode":963,"statusCode":"963","description":"Error interno backend"},{"backendCode":"965","httpCode":402,"statusCode":"965","description":"Validar configuracion montos y limites"},{"backendCode":"991","httpCode":403,"statusCode":"991","description":"Error interno backend"},{"backendCode":"992","httpCode":402,"statusCode":"992","description":"Validar configuracion montos y limites"},{"backendCode":"999","httpCode":403,"statusCode":"999","description":"LN999 - Error interno backend"},{"backendCode":"200","httpCode":200,"statusCode":"200","description":"Operacion exitosa"},{"backendCode":"OK","httpCode":200,"statusCode":"OK","description":"Operacion exitosa"},{"backendCode":"503","httpCode":503,"statusCode":"503","description":"Uso interno"},{"backendCode":"422","httpCode":422,"statusCode":"422","description":"Uso interno"},{"backendCode":"500","httpCode":503,"statusCode":"500","description":"Uso interno"},{"backendCode":"SERVICE_UNAVAILABLE","httpCode":500,"statusCode":"SERVICE_UNAVAILABLE","description":"Uso interno"},{"backendCode":"OSB-382505","httpCode":503,"statusCode":"OSB-382505","description":"Uso interno"},{"backendCode":"OSB-380002","httpCode":503,"statusCode":"OSB-380002","description":"Uso interno"},{"backendCode":"ERROR","httpCode":400,"statusCode":"ERROR","description":"Uso interno"},{"backendCode":"400","httpCode":400,"statusCode":"400","description":"Uso interno"},{"backendCode":"401","httpCode":401,"statusCode":"401","description":"Uso interno"},{"backendCode":"403","httpCode":403,"statusCode":"403","description":"Uso interno"},{"backendCode":"404","httpCode":404,"statusCode":"404","description":"Uso interno"},{"backendCode":"429","httpCode":429,"statusCode":"429","description":"Uso interno"},{"backendCode":"default","httpCode":409,"statusCode":"default","description":"Conflicto"},{"backendCode":"R404","httpCode":404,"statusCode":"404","description":"Datos de validacion no encontrado."},{"backendCode":"VDE01","httpCode":400,"statusCode":"VDE01","description":"VDE01 - Error en dato de entrada obligatorio: %s"},{"backendCode":"VDE02","httpCode":400,"statusCode":"VDE02","description":"VDE02 - Error en valor permitido para campo: %s"},{"backendCode":"VRN04","httpCode":503,"statusCode":"VRN04","description":"Servicio en horario de mantenimiento"}]' api.rest-client.security-trace: '{"url":"http://api-register-security-route-apis-banesco-dev.apps.desplakur3.desintra.banesco.com/register-security/save","timeout":{"connect":10000,"response":10000},"request":{"sp":"spAPI_Traza","codEve":"P2PVUEL","codEve2":"P2PVUEL","codBan":"01","codMon":"BS"}}' quarkus.smallrye-health.liveness-path: /actuator/health/live - api.source-id: BDFAT + api.source-id: BPIR quarkus.smallrye-health.root-path: /actuator/health api.bus-payment-initiation-request.messages.key: bus-payment-initiation-request quarkus.smallrye-openapi.enable: 'true'