From f5973c2ca00453239577b872beca72c22e22ae40 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 14:49:34 +0200 Subject: [PATCH 01/64] PAGOPA-2227 adding status rejected by ec --- .../repository/model/enumz/ReceiptStatusEnum.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java index 5d9a4b02..95f43766 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java @@ -5,5 +5,6 @@ public enum ReceiptStatusEnum { SENDING, SCHEDULED, SENT, - NOT_SENT + NOT_SENT, + SENT_REJECTED_BY_EC } \ No newline at end of file From e813c5074d0f00f20d7ba9f2af228cd27a25a817 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:50:42 +0200 Subject: [PATCH 02/64] PAGOPA-2227 setting up repository and entity --- .../ReceiptDeadLetterRepository.java | 10 +++++++ .../model/ReceiptDeadLetterEntity.java | 27 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java create mode 100644 src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java b/src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java new file mode 100644 index 00000000..49fff40d --- /dev/null +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java @@ -0,0 +1,10 @@ +package it.gov.pagopa.wispconverter.repository; + +import com.azure.spring.data.cosmos.repository.CosmosRepository; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; +import org.springframework.stereotype.Repository; + +@Repository +public interface ReceiptDeadLetterRepository extends CosmosRepository { + +} diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java new file mode 100644 index 00000000..a372f9bc --- /dev/null +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java @@ -0,0 +1,27 @@ +package it.gov.pagopa.wispconverter.repository.model; + +import com.azure.spring.data.cosmos.core.mapping.Container; +import com.azure.spring.data.cosmos.core.mapping.PartitionKey; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.data.annotation.Id; + +@Container(containerName = "receipt-dead-letter") +@Data +@ToString +@EqualsAndHashCode +@Builder(toBuilder = true) +public class ReceiptDeadLetterEntity { + + @Id + private String id; + + @PartitionKey + private String partitionKey; + + private String faultCode; + + private String payload; +} From 8d3ee8abe8b52348d281dedbbac1574b2fd4ef84 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:00:09 +0200 Subject: [PATCH 03/64] PAGOPA-2227 adding dead letter logic --- .../service/PaaInviaRTSenderService.java | 65 +++++++++++++------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 8b4fb092..53560a0f 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -5,6 +5,8 @@ import gov.telematici.pagamenti.ws.papernodo.PaaInviaRTRisposta; import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum; import it.gov.pagopa.wispconverter.exception.AppException; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; import it.gov.pagopa.wispconverter.repository.model.enumz.ClientEnum; import it.gov.pagopa.wispconverter.repository.model.enumz.InternalStepStatus; import it.gov.pagopa.wispconverter.repository.model.enumz.OutcomeEnum; @@ -43,8 +45,10 @@ public class PaaInviaRTSenderService { private final JaxbElementUtil jaxbElementUtil; - @Value("${wisp-converter.rt-send.avoid-scheduling-on-states}") - private Set avoidSchedulingOnStates; + private final ReceiptDeadLetterRepository receiptDeadLetterRepository; + + @Value("${wisp-converter.rt-send.no-dead-letter-on-states}") + private Set noDeadLetterOnStates; public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, List> headers, String payload, String domainId, String iuv, String ccp) { @@ -84,24 +88,38 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L // check the response and if the outcome is KO, throw an exception EsitoPaaInviaRT esitoPaaInviaRT = body.getPaaInviaRTRisposta(); - boolean avoidReScheduling = esitoPaaInviaRT.getFault() != null && avoidSchedulingOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode()); + boolean avoidReScheduling = Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); + + boolean isSavedDeadLetter = esitoPaaInviaRT.getFault() == null || + (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); // set the correct response regarding the creditor institution response if (avoidReScheduling) { - - generateREForAlreadySentRtToCreditorInstitution(); - - } else if (Constants.KO.equals(esitoPaaInviaRT.getEsito()) || !Constants.OK.equals(esitoPaaInviaRT.getEsito())) { - FaultBean fault = esitoPaaInviaRT.getFault(); - String faultCode = "ND"; - String faultString = "ND"; - String faultDescr = "ND"; - if (fault != null) { - faultCode = fault.getFaultCode(); - faultString = fault.getFaultString(); - faultDescr = fault.getDescription(); + if(Constants.KO.equals(esitoPaaInviaRT.getEsito())) { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); + if(isSavedDeadLetter) { + receiptDeadLetterRepository.save( + ReceiptDeadLetterEntity.builder() + .id(domainId + "_" + iuv + "_" + ccp) + .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") + .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().toString() : esitoPaaInviaRT.toString()) + .build() + ); + } + } else { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); } - + generateREForAlreadySentRtToCreditorInstitution(); + } else { + FaultBean fault = esitoPaaInviaRT.getFault(); + String faultCode = "ND"; + String faultString = "ND"; + String faultDescr = "ND"; + if (fault != null) { + faultCode = fault.getFaultCode(); + faultString = fault.getFaultString(); + faultDescr = fault.getDescription(); + } throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION, faultCode, faultString, faultDescr); } @@ -123,16 +141,13 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_GENERIC_ERROR, e.getMessage()); } - - - rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); } private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response, String rawBody) { // check the response received and, if is a 4xx or a 5xx HTTP error code throw an exception - if (response.getStatusCode().is4xxClientError() || response.getStatusCode().is5xxServerError()) { + if (!response.getStatusCode().is2xxSuccessful()) { throw new AppException(AppErrorCodeMessageEnum.CLIENT_PAAINVIART, "Error response: " + response.getStatusCode().value()); } // validating the response body and, if something is null, throw an exception @@ -148,6 +163,16 @@ private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response return body; } + private void saveDeadLetter (String id, String faultCode, String payload) { + receiptDeadLetterRepository.save( + ReceiptDeadLetterEntity.builder() + .id(id) + .faultCode(faultCode) + .payload(payload) + .build() + ); + } + private void generateREForRequestToCreditorInstitution(String uri, List> headers, String body) { From 75c152bdbf94f1207a8bfadf744aa5a9670b4d08 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:07:35 +0200 Subject: [PATCH 04/64] PAGOPA-2227 changing input var --- .../pagopa/wispconverter/service/PaaInviaRTSenderService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 53560a0f..910919fc 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -47,8 +47,8 @@ public class PaaInviaRTSenderService { private final ReceiptDeadLetterRepository receiptDeadLetterRepository; - @Value("${wisp-converter.rt-send.no-dead-letter-on-states}") - private Set noDeadLetterOnStates; + @Value("#{'${wisp-converter.rt-send.no-dead-letter-on-states}'.split(',')}") + private List noDeadLetterOnStates; public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, List> headers, String payload, String domainId, String iuv, String ccp) { From c093fd56b137b70f2ad8965835a04ea1b59274dd Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:07:44 +0200 Subject: [PATCH 05/64] PAGOPA-2227 update helm values --- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- src/main/resources/application.properties | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 3058fba6..b75be70d 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -98,7 +98,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '48' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '1' - RT_SEND_AVOID_SCHEDULING_ON_STATES: 'PAA_RT_DUPLICATA' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 700ade41..18ae963b 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -117,7 +117,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '48' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_AVOID_SCHEDULING_ON_STATES: 'PAA_RT_DUPLICATA' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 2e109d9f..3bb01787 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -98,7 +98,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '48' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_AVOID_SCHEDULING_ON_STATES: 'PAA_RT_DUPLICATA' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d856b7a6..6743ab84 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -135,7 +135,7 @@ wisp-converter.cached-requestid-mapping.ttl.minutes=${CACHED_REQUESTID_MAPPING_T wisp-converter.poste-italiane.abi-code=07601 wisp-converter.rt-send.max-retries=${RT_SEND_MAX_RETRIES:48} wisp-converter.rt-send.scheduling-time-in-minutes=${RT_SEND_SCHEDULING_TIME_IN_MINUTES:60} -wisp-converter.rt-send.avoid-scheduling-on-states=${RT_SEND_AVOID_SCHEDULING_ON_STATES:PAA_RT_DUPLICATA} +wisp-converter.rt-send.no-dead-letter-on-states=${RT_SEND_NO_DEAD_LETTER_ON_STATES:PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR} wisp-converter.idempotency.lock-validity-in-minutes=${IDEMPOTENCY_LOCK_VALIDITY_IN_MINUTES:30} wisp-converter.refresh.cache.cron=${CACHE_REFRESH_CRON:-} wisp-converter.rtMapper.ctRicevutaTelematica.versioneOggetto=6.2.0 From e2cd1a604b80218037a842e50758db8930e7862c Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:08:08 +0200 Subject: [PATCH 06/64] PAGOPA-2227 remove unused import --- .../pagopa/wispconverter/service/PaaInviaRTSenderService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 910919fc..6e5c5d68 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -30,7 +30,6 @@ import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.Set; @Service From ab8a049269c2f563f5102f7c1a333bd9d166577b Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:10:35 +0200 Subject: [PATCH 07/64] PAGOPA-2227 remove unused method --- .../service/PaaInviaRTSenderService.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 6e5c5d68..0502f2d7 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -162,17 +162,6 @@ private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response return body; } - private void saveDeadLetter (String id, String faultCode, String payload) { - receiptDeadLetterRepository.save( - ReceiptDeadLetterEntity.builder() - .id(id) - .faultCode(faultCode) - .payload(payload) - .build() - ); - } - - private void generateREForRequestToCreditorInstitution(String uri, List> headers, String body) { StringBuilder headerBuilder = new StringBuilder(); From 507f3ce86e1c92e3ab3a8bdc75c9671d09c58d52 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:35:28 +0200 Subject: [PATCH 08/64] PAGOPA-2227 fix junit --- .../wispconverter/service/PaaInviaRTSenderServiceTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java index 10003fb7..75069cca 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java @@ -4,6 +4,7 @@ import gov.telematici.pagamenti.ws.papernodo.FaultBean; import gov.telematici.pagamenti.ws.papernodo.PaaInviaRTRisposta; import it.gov.pagopa.wispconverter.exception.AppException; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.util.JaxbElementUtil; import org.junit.jupiter.api.Test; import org.springframework.data.util.Pair; @@ -28,6 +29,7 @@ void esitoOK() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); @@ -45,7 +47,7 @@ void esitoOK() { when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); org.springframework.test.util.ReflectionTestUtils.setField(p, "jaxbElementUtil", new JaxbElementUtil()); p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); assertTrue(true); @@ -57,6 +59,7 @@ void esitoKO() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); @@ -77,7 +80,7 @@ void esitoKO() { when(responseSpec.toEntity(PaaInviaRTRisposta.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); try { p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); fail(); From dba95f10ed9d7f47e4f8971ad8cb5c66fe0e3db1 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:55:27 +0200 Subject: [PATCH 09/64] PAGOPA-2227 fix junit --- openapi/openapi.json | 1459 ++++++++--------- openapi/openapi_redirect.json | 201 +-- .../it/gov/pagopa/wispconverter/HomeTest.java | 5 + .../wispconverter/OpenApiGenerationTest.java | 4 + .../wispconverter/endpoint/CarrelloTest.java | 3 + .../endpoint/ConfigurationControllerTest.java | 4 + .../wispconverter/endpoint/RptTest.java | 3 + .../service/ConfigurationServiceTest.java | 2 + 8 files changed, 792 insertions(+), 889 deletions(-) diff --git a/openapi/openapi.json b/openapi/openapi.json index 48b33319..d841eefb 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -1,1020 +1,921 @@ { - "openapi": "3.0.1", - "info": { - "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", - "termsOfService": "https://www.pagopa.gov.it/", - "title": "WISP Converter", - "version": "0.4.3" + "openapi" : "3.0.1", + "info" : { + "description" : "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", + "termsOfService" : "https://www.pagopa.gov.it/", + "title" : "WISP Converter", + "version" : "0.4.3" }, - "servers": [ - { - "url": "http://localhost", - "description": "Generated server url" - } - ], - "tags": [ - { - "description": "Application info APIs", - "name": "Home" - }, - { - "description": "Create and Delete payment token timer", - "name": "ReceiptTimer" - }, - { - "description": "ECs and Stations configuration", - "name": "Configuration" - }, - { - "description": "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", - "name": "Receipt" - }, - { - "description": "Create and Delete rpt timer", - "name": "RPTTimer" - }, - { - "description": "Conversion and redirection APIs", - "name": "Redirect" - }, - { - "description": "Recovery and reconciliation APIs", - "name": "Recovery" - } - ], - "paths": { - "/info": { - "get": { - "operationId": "healthCheck", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppInfoResponse" + "servers" : [ { + "url" : "http://localhost", + "description" : "Generated server url" + } ], + "tags" : [ { + "description" : "Application info APIs", + "name" : "Home" + }, { + "description" : "Create and Delete payment token timer", + "name" : "ReceiptTimer" + }, { + "description" : "ECs and Stations configuration", + "name" : "Configuration" + }, { + "description" : "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", + "name" : "Receipt" + }, { + "description" : "Create and Delete rpt timer", + "name" : "RPTTimer" + }, { + "description" : "Conversion and redirection APIs", + "name" : "Redirect" + }, { + "description" : "Recovery and reconciliation APIs", + "name" : "Recovery" + } ], + "paths" : { + "/info" : { + "get" : { + "operationId" : "healthCheck", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AppInfoResponse" } } }, - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return OK if application is started", - "tags": [ - "Home" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return OK if application is started", + "tags" : [ "Home" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/payments": { - "get": { - "operationId": "redirect", - "parameters": [ - { - "example": "identificativoIntermediarioPA_sessionId", - "in": "query", - "name": "idSession", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "302": { - "description": "Redirect to Checkout service.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/payments" : { + "get" : { + "operationId" : "redirect", + "parameters" : [ { + "example" : "identificativoIntermediarioPA_sessionId", + "in" : "query", + "name" : "idSession", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "302" : { + "description" : "Redirect to Checkout service.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Redirect" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Redirect" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/receipt": { - "get": { - "operationId": "receiptRetrieve", - "parameters": [ - { - "in": "query", - "name": "ci", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "ccp", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "iuv", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "type": "string" + "/receipt" : { + "get" : { + "operationId" : "receiptRetrieve", + "parameters" : [ { + "in" : "query", + "name" : "ci", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "ccp", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "iuv", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "type" : "string" } } }, - "description": "Receipt exists", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Receipt exists", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/receipt/ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/receipt/ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "receiptKo", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" + } ], + "post" : { + "operationId" : "receiptKo", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "string" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully forwarded negative paaInviaRT to EC", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully forwarded negative paaInviaRT to EC", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] } }, - "/receipt/ok": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/receipt/ok" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "receiptOk", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiptRequest" + } ], + "post" : { + "operationId" : "receiptOk", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ReceiptRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully forwarded positive paaInviaRT to EC", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully forwarded positive paaInviaRT to EC", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] } }, - "/receipt/timer": { - "delete": { - "description": "Delete a timer by paymentToken", - "operationId": "deleteTimer_1", - "parameters": [ - { - "in": "query", - "name": "paymentTokens", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully paymentToken expiration timer deleted", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/receipt/timer" : { + "delete" : { + "description" : "Delete a timer by paymentToken", + "operationId" : "deleteTimer_1", + "parameters" : [ { + "in" : "query", + "name" : "paymentTokens", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "Successfully paymentToken expiration timer deleted", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "deleteTimer", - "tags": [ - "ReceiptTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "deleteTimer", + "tags" : [ "ReceiptTimer" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Create a timer linked with paymentToken and receipt data", - "operationId": "createTimer_1", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiptTimerRequest" + } ], + "post" : { + "description" : "Create a timer linked with paymentToken and receipt data", + "operationId" : "createTimer_1", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ReceiptTimerRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully paymentToken expiration timer created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully paymentToken expiration timer created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "createTimer", - "tags": [ - "ReceiptTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "createTimer", + "tags" : [ "ReceiptTimer" ] } }, - "/recovery/proxy": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/proxy" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all receipts in the request, searching by passed identifier", - "operationId": "recoverReceiptToBeSentByProxy", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RecoveryProxyReceiptRequest" + } ], + "post" : { + "description" : "Execute reconciliation of all receipts in the request, searching by passed identifier", + "operationId" : "recoverReceiptToBeSentByProxy", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryProxyReceiptRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryProxyReceiptResponse" + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryProxyReceiptResponse" } } }, - "description": "Reconciliation completed", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Reconciliation completed", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute reconciliation for passed receipts.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute reconciliation for passed receipts.", + "tags" : [ "Recovery" ] } }, - "/recovery/{creditor_institution}/receipt-ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/{creditor_institution}/receipt-ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId": "recoverReceiptKOForCreditorInstitution", - "parameters": [ - { - "in": "path", - "name": "creditor_institution", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "dateFrom", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "dateTo", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptResponse" + } ], + "post" : { + "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId" : "recoverReceiptKOForCreditorInstitution", + "parameters" : [ { + "in" : "path", + "name" : "creditor_institution", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateFrom", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateTo", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" } } }, - "description": "Started reconciling IUVs with explicit RT send", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Started reconciling IUVs with explicit RT send", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute IUV reconciliation for certain creditor institution.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute IUV reconciliation for certain creditor institution.", + "tags" : [ "Recovery" ] } }, - "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId": "recoverReceiptKOForCreditorInstitutionAndIUV", - "parameters": [ - { - "in": "path", - "name": "creditor_institution", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,100}", - "type": "string" - } - }, - { - "in": "path", - "name": "iuv", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,100}", - "type": "string" - } - }, - { - "in": "query", - "name": "dateFrom", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,10}", - "type": "string" + } ], + "post" : { + "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId" : "recoverReceiptKOForCreditorInstitutionAndIUV", + "parameters" : [ { + "in" : "path", + "name" : "creditor_institution", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,100}", + "type" : "string" + } + }, { + "in" : "path", + "name" : "iuv", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,100}", + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateFrom", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,10}", + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateTo", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,10}", + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" + } + } + }, + "description" : "Completed IUV reconciliation with explicit RT submission", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" + } + } } }, - { - "in": "query", - "name": "dateTo", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,10}", - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "type": "string" + "400" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" } } }, - "description": "Started reconciling IUV with explicit RT send", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute IUV reconciliation for certain creditor institution.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute IUV reconciliation for certain creditor institution.", + "tags" : [ "Recovery" ] } }, - "/rpt/timer": { - "delete": { - "description": "Delete a timer by sessionId", - "operationId": "deleteTimer", - "parameters": [ - { - "in": "query", - "name": "sessionId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully rpt timer deleted", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/rpt/timer" : { + "delete" : { + "description" : "Delete a timer by sessionId", + "operationId" : "deleteTimer", + "parameters" : [ { + "in" : "query", + "name" : "sessionId", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "Successfully rpt timer deleted", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "deleteRPTTimer", - "tags": [ - "RPTTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "deleteRPTTimer", + "tags" : [ "RPTTimer" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Create a timer from sessionId data", - "operationId": "createTimer", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RPTTimerRequest" + } ], + "post" : { + "description" : "Create a timer from sessionId data", + "operationId" : "createTimer", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RPTTimerRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully rpt timer created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully rpt timer created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "createRPTTimer", - "tags": [ - "RPTTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "createRPTTimer", + "tags" : [ "RPTTimer" ] } }, - "/whitelist/cis": { - "get": { - "operationId": "getCreditorInstitutions", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "/whitelist/cis" : { + "get" : { + "operationId" : "getCreditorInstitutions", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for EC retrieved.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for EC retrieved.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "404" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for EC not found.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for EC not found.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return the string containing all creditor institutions for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return the string containing all creditor institutions for the wisp converter logic", + "tags" : [ "Configuration" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "createCreditorInstitutionsConfiguration", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + } ], + "post" : { + "operationId" : "createCreditorInstitutionsConfiguration", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "201": { - "description": "Created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "201" : { + "description" : "Created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Create the string containing all creditor institutions for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Create the string containing all creditor institutions for the wisp converter logic", + "tags" : [ "Configuration" ] } }, - "/whitelist/stations": { - "get": { - "operationId": "getStations", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "/whitelist/stations" : { + "get" : { + "operationId" : "getStations", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for Stations retrieved.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for Stations retrieved.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "404" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for Stations not found.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for Stations not found.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return the string containing all stations for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return the string containing all stations for the wisp converter logic", + "tags" : [ "Configuration" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "createStationsConfiguration", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + } ], + "post" : { + "operationId" : "createStationsConfiguration", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "201": { - "description": "Created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "201" : { + "description" : "Created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Create the string containing all stations for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Create the string containing all stations for the wisp converter logic", + "tags" : [ "Configuration" ] } } }, - "components": { - "schemas": { - "AppInfoResponse": { - "type": "object", - "properties": { - "environment": { - "type": "string" + "components" : { + "schemas" : { + "AppInfoResponse" : { + "type" : "object", + "properties" : { + "environment" : { + "type" : "string" }, - "name": { - "type": "string" + "name" : { + "type" : "string" }, - "version": { - "type": "string" + "version" : { + "type" : "string" } } }, - "ConfigurationModel": { - "type": "object", - "properties": { - "key": { - "type": "string" + "ConfigurationModel" : { + "type" : "object", + "properties" : { + "key" : { + "type" : "string" } } }, - "PairStringString": { - "type": "object", - "properties": { - "first": { - "type": "string" + "PairStringString" : { + "type" : "object", + "properties" : { + "first" : { + "type" : "string" }, - "second": { - "type": "string" + "second" : { + "type" : "string" } } }, - "RPTTimerRequest": { - "type": "object", - "properties": { - "sessionId": { - "type": "string" + "RPTTimerRequest" : { + "type" : "object", + "properties" : { + "sessionId" : { + "type" : "string" } } }, - "ReceiptRequest": { - "type": "object", - "properties": { - "content": { - "type": "string" + "ReceiptRequest" : { + "type" : "object", + "properties" : { + "content" : { + "type" : "string" } } }, - "ReceiptTimerRequest": { - "type": "object", - "properties": { - "expirationTime": { - "type": "integer", - "format": "int64" + "ReceiptTimerRequest" : { + "type" : "object", + "properties" : { + "expirationTime" : { + "type" : "integer", + "format" : "int64" }, - "fiscalCode": { - "pattern": "\\w*", - "type": "string" + "fiscalCode" : { + "pattern" : "\\w*", + "type" : "string" }, - "noticeNumber": { - "pattern": "\\d*", - "type": "string" + "noticeNumber" : { + "pattern" : "\\d*", + "type" : "string" }, - "paymentToken": { - "type": "string" + "paymentToken" : { + "type" : "string" } } }, - "RecoveryProxyReceiptRequest": { - "type": "object", - "properties": { - "receiptIds": { - "type": "array", - "items": { - "type": "string" + "RecoveryProxyReceiptRequest" : { + "type" : "object", + "properties" : { + "receiptIds" : { + "type" : "array", + "items" : { + "type" : "string" } } } }, - "RecoveryProxyReceiptResponse": { - "type": "object", - "properties": { - "receiptStatus": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PairStringString" + "RecoveryProxyReceiptResponse" : { + "type" : "object", + "properties" : { + "receiptStatus" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/PairStringString" } } } }, - "RecoveryReceiptPaymentResponse": { - "type": "object", - "properties": { - "ccp": { - "type": "string" + "RecoveryReceiptPaymentResponse" : { + "type" : "object", + "properties" : { + "ccp" : { + "type" : "string" }, - "ci": { - "type": "string" + "ci" : { + "type" : "string" }, - "iuv": { - "type": "string" + "iuv" : { + "type" : "string" } } }, - "RecoveryReceiptResponse": { - "type": "object", - "properties": { - "payments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RecoveryReceiptPaymentResponse" + "RecoveryReceiptResponse" : { + "type" : "object", + "properties" : { + "payments" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/RecoveryReceiptPaymentResponse" } } } } }, - "securitySchemes": { - "ApiKey": { - "description": "The API key to access this function app.", - "in": "header", - "name": "Ocp-Apim-Subscription-Key", - "type": "apiKey" + "securitySchemes" : { + "ApiKey" : { + "description" : "The API key to access this function app.", + "in" : "header", + "name" : "Ocp-Apim-Subscription-Key", + "type" : "apiKey" } } } -} +} \ No newline at end of file diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index a83a7e52..439ac667 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -1,142 +1,123 @@ { - "openapi": "3.0.1", - "info": { - "title": "WISP-Converter-redirect", - "version": "0.4.3" + "openapi" : "3.0.1", + "info" : { + "title" : "WISP-Converter-redirect", + "version" : "0.4.3" }, - "servers": [ - { - "url": "http://localhost", - "description": "Generated server url" - } - ], - "tags": [ - { - "description": "Application info APIs", - "name": "Home" - }, - { - "description": "Conversion and redirection APIs", - "name": "Redirect" - } - ], - "paths": { - "/info": { - "get": { - "operationId": "healthCheck", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppInfoResponse" + "servers" : [ { + "url" : "http://localhost", + "description" : "Generated server url" + } ], + "tags" : [ { + "description" : "Application info APIs", + "name" : "Home" + }, { + "description" : "Conversion and redirection APIs", + "name" : "Redirect" + } ], + "paths" : { + "/info" : { + "get" : { + "operationId" : "healthCheck", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AppInfoResponse" } } }, - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return OK if application is started", - "tags": [ - "Home" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return OK if application is started", + "tags" : [ "Home" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/payments": { - "get": { - "operationId": "redirect", - "parameters": [ - { - "example": "identificativoIntermediarioPA_sessionId", - "in": "query", - "name": "idSession", - "required": true, - "schema": { - "type": "string" - } + "/payments" : { + "get" : { + "operationId" : "redirect", + "parameters" : [ { + "example" : "identificativoIntermediarioPA_sessionId", + "in" : "query", + "name" : "idSession", + "required" : true, + "schema" : { + "type" : "string" } - ], - "responses": { - "302": { - "description": "Redirect to Checkout service.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + } ], + "responses" : { + "302" : { + "description" : "Redirect to Checkout service.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Redirect" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Redirect" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] } }, - "components": { - "schemas": { - "AppInfoResponse": { - "type": "object", - "properties": { - "environment": { - "type": "string" + "components" : { + "schemas" : { + "AppInfoResponse" : { + "type" : "object", + "properties" : { + "environment" : { + "type" : "string" }, - "name": { - "type": "string" + "name" : { + "type" : "string" }, - "version": { - "type": "string" + "version" : { + "type" : "string" } } } }, - "securitySchemes": { - "ApiKey": { - "description": "The API key to access this function app.", - "in": "header", - "name": "Ocp-Apim-Subscription-Key", - "type": "apiKey" + "securitySchemes" : { + "ApiKey" : { + "description" : "The API key to access this function app.", + "in" : "header", + "name" : "Ocp-Apim-Subscription-Key", + "type" : "apiKey" } } } -} +} \ No newline at end of file diff --git a/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java b/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java index 1dea3e96..3128bce9 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.controller.model.AppInfoResponse; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; @@ -40,6 +41,10 @@ class HomeTest { @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; + + @Test void slash() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)) diff --git a/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java b/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java index ff2fa926..ce9b80f3 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.controller.RedirectController; import it.gov.pagopa.wispconverter.repository.*; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; @@ -50,6 +51,9 @@ class OpenApiGenerationTest { @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; + @Test void swaggerSpringPlugin() throws Exception { saveOpenAPI("/v3/api-docs", "openapi.json"); diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java index 14430f3f..6cfe3179 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java @@ -7,6 +7,7 @@ import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import it.gov.pagopa.wispconverter.utils.TestUtils; @@ -69,6 +70,8 @@ class CarrelloTest { private ReceiptService receiptService; @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; @Test void success() throws Exception { diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java index 822e2dd0..a0cb07a1 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java @@ -4,6 +4,7 @@ import it.gov.pagopa.wispconverter.Application; import it.gov.pagopa.wispconverter.controller.model.ConfigurationModel; import it.gov.pagopa.wispconverter.service.ConfigurationService; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +29,9 @@ class ConfigurationControllerTest { @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; + @Autowired private MockMvc mvc; diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java index 7fa245e2..92c434d5 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java @@ -10,6 +10,7 @@ import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import it.gov.pagopa.wispconverter.service.model.re.ReEventDto; @@ -79,6 +80,8 @@ class RptTest { private ReceiptService receiptService; @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; private void setConfigCacheStoredData(String servicePath, int primitiveVersion) { StationCreditorInstitutionDto stationCreditorInstitutionDto = new StationCreditorInstitutionDto(); diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java index ac62c2f2..bd4e7f7c 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java @@ -28,6 +28,8 @@ class ConfigurationServiceTest { ConfigurationRepository configurationRepository; @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; @Autowired @InjectMocks From 13c175297c3153a8d2848f11296cdb235a109463 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:38:58 +0200 Subject: [PATCH 10/64] PAGOPA-2227 extending coverage --- .../service/PaaInviaRTSenderService.java | 2 +- .../service/PaaInviaRTSenderServiceTest.java | 99 ++++++++++++++++--- 2 files changed, 84 insertions(+), 17 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 0502f2d7..af3eab09 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -101,7 +101,7 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L ReceiptDeadLetterEntity.builder() .id(domainId + "_" + iuv + "_" + ccp) .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") - .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().toString() : esitoPaaInviaRT.toString()) + .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getDescription() : "NO_FAULT_FIELDS_PRESENT") .build() ); } diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java index 75069cca..b5629921 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java @@ -1,25 +1,28 @@ package it.gov.pagopa.wispconverter.service; -import gov.telematici.pagamenti.ws.papernodo.EsitoPaaInviaRT; -import gov.telematici.pagamenti.ws.papernodo.FaultBean; -import gov.telematici.pagamenti.ws.papernodo.PaaInviaRTRisposta; import it.gov.pagopa.wispconverter.exception.AppException; import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; +import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptStatusEnum; import it.gov.pagopa.wispconverter.util.JaxbElementUtil; import org.junit.jupiter.api.Test; import org.springframework.data.util.Pair; import org.springframework.http.ResponseEntity; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.client.RestClient; import java.net.URI; +import java.time.temporal.ChronoUnit; +import java.util.Arrays; import java.util.List; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; +import static org.mockito.Mockito.times; class PaaInviaRTSenderServiceTest { @@ -27,7 +30,7 @@ class PaaInviaRTSenderServiceTest { void esitoOK() { RestClient.Builder builder = mock(RestClient.Builder.class); ReService reService = mock(ReService.class); - JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); @@ -51,13 +54,14 @@ void esitoOK() { org.springframework.test.util.ReflectionTestUtils.setField(p, "jaxbElementUtil", new JaxbElementUtil()); p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); assertTrue(true); + verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT)); } @Test - void esitoKO() { + void esitoKONoDeadLetter() { RestClient.Builder builder = mock(RestClient.Builder.class); ReService reService = mock(ReService.class); - JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); @@ -69,23 +73,86 @@ void esitoKO() { when(requestBodySpec.body(anyString())).thenReturn(requestBodySpec); RestClient.ResponseSpec responseSpec = mock(RestClient.ResponseSpec.class); + + when(requestBodySpec.retrieve()).thenReturn(responseSpec); + + String paaInviaRTRisposta = "KOPAA_RT_DUPLICATA"; + when(responseSpec.toEntity(String.class)) + .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); + + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); + ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); + p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "12345678910", "02345678998765432", "CCP_TEST"); + assertTrue(true); + verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT_REJECTED_BY_EC)); + verify(receiptDeadLetterRepository, times(0)).save(any(ReceiptDeadLetterEntity.class)); + } + + @Test + void esitoKODeadLetter() { + RestClient.Builder builder = mock(RestClient.Builder.class); + ReService reService = mock(ReService.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); + RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); + RestClient client = mock(RestClient.class); + when(builder.build()).thenReturn(client); + RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); + when(client.post()).thenReturn(requestBodyUriSpec); + RestClient.RequestBodySpec requestBodySpec = mock(RestClient.RequestBodySpec.class); + when(requestBodyUriSpec.uri(any(URI.class))).thenReturn(requestBodySpec); + when(requestBodySpec.body(anyString())).thenReturn(requestBodySpec); + + RestClient.ResponseSpec responseSpec = mock(RestClient.ResponseSpec.class); + when(requestBodySpec.retrieve()).thenReturn(responseSpec); - FaultBean faultBean = new FaultBean(); - EsitoPaaInviaRT esitoPaaInviaRT = new EsitoPaaInviaRT(); - esitoPaaInviaRT.setEsito("KO"); - esitoPaaInviaRT.setFault(faultBean); - PaaInviaRTRisposta paaInviaRTRisposta = new PaaInviaRTRisposta(); - paaInviaRTRisposta.setPaaInviaRTRisposta(esitoPaaInviaRT); - when(responseSpec.toEntity(PaaInviaRTRisposta.class)) + String paaInviaRTRisposta = "KOPAA_STATO_SCONOSCIUTO"; + when(responseSpec.toEntity(String.class)) + .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); + + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); + ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); + p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); + assertTrue(true); + verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT_REJECTED_BY_EC)); + verify(receiptDeadLetterRepository, times(1)).save(any(ReceiptDeadLetterEntity.class)); + } + + @Test + void esitoKORescheduled() { + RestClient.Builder builder = mock(RestClient.Builder.class); + ReService reService = mock(ReService.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); + RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); + RestClient client = mock(RestClient.class); + when(builder.build()).thenReturn(client); + RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); + when(client.post()).thenReturn(requestBodyUriSpec); + RestClient.RequestBodySpec requestBodySpec = mock(RestClient.RequestBodySpec.class); + when(requestBodyUriSpec.uri(any(URI.class))).thenReturn(requestBodySpec); + when(requestBodySpec.body(anyString())).thenReturn(requestBodySpec); + + RestClient.ResponseSpec responseSpec = mock(RestClient.ResponseSpec.class); + + when(requestBodySpec.retrieve()).thenReturn(responseSpec); + + String paaInviaRTRisposta = "WRONG_BODY"; + when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); + ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); try { p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); fail(); - } catch (AppException e) { + } catch (AppException e){ assertTrue(true); } + verify(receiptDeadLetterRepository, times(0)).save(any(ReceiptDeadLetterEntity.class)); } } From 2ea6d20a356959f3a65702231c39243e03fd0738 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:53:27 +0200 Subject: [PATCH 11/64] PAGOPA-2227 solving issues --- .../service/PaaInviaRTSenderService.java | 37 ++++++++++++++----- .../service/PaaInviaRTSenderServiceTest.java | 1 - 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index af3eab09..a40cbbbd 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -29,6 +29,8 @@ import java.net.InetSocketAddress; import java.net.URI; import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.util.List; @@ -54,13 +56,7 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L try { // Generating the REST client, setting proxy specification if needed - RestClient client; - if (proxyAddress != null) { - client = RestClient.builder(ProxyUtility.getProxiedClient(proxyAddress)) - .build(); - } else { - client = restClientBuilder.build(); - } + RestClient client = generateClient(proxyAddress); // Send the passed request payload to the passed URL RestClient.RequestBodySpec bodySpec = client.post() @@ -87,10 +83,10 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L // check the response and if the outcome is KO, throw an exception EsitoPaaInviaRT esitoPaaInviaRT = body.getPaaInviaRTRisposta(); - boolean avoidReScheduling = Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); + boolean avoidReScheduling = checkIfAvoidRescheduling(esitoPaaInviaRT); - boolean isSavedDeadLetter = esitoPaaInviaRT.getFault() == null || - (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); + // check the response if the dead letter sending is needed + boolean isSavedDeadLetter = checkIfSendDeadLetter(esitoPaaInviaRT); // set the correct response regarding the creditor institution response if (avoidReScheduling) { @@ -142,6 +138,27 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L } } + private boolean checkIfAvoidRescheduling (EsitoPaaInviaRT esitoPaaInviaRT) { + return Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); + } + + private boolean checkIfSendDeadLetter (EsitoPaaInviaRT esitoPaaInviaRT) { + return esitoPaaInviaRT.getFault() == null || + (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); + } + + private RestClient generateClient(InetSocketAddress proxyAddress) throws NoSuchAlgorithmException, KeyManagementException { + // Generating the REST client, setting proxy specification if needed + RestClient client; + if (proxyAddress != null) { + client = RestClient.builder(ProxyUtility.getProxiedClient(proxyAddress)) + .build(); + } else { + client = restClientBuilder.build(); + } + return client; + } + private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response, String rawBody) { diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java index b5629921..bfca7cc2 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java @@ -12,7 +12,6 @@ import org.springframework.web.client.RestClient; import java.net.URI; -import java.time.temporal.ChronoUnit; import java.util.Arrays; import java.util.List; From bc6f5687a15499037d35507c9a08bd32a2436cb0 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 4 Oct 2024 12:10:09 +0200 Subject: [PATCH 12/64] PAGOPA-2227 reducing cognitive complexity --- .../service/PaaInviaRTSenderService.java | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index a40cbbbd..e579d1b5 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -83,28 +83,25 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L // check the response and if the outcome is KO, throw an exception EsitoPaaInviaRT esitoPaaInviaRT = body.getPaaInviaRTRisposta(); - boolean avoidReScheduling = checkIfAvoidRescheduling(esitoPaaInviaRT); - // check the response if the dead letter sending is needed boolean isSavedDeadLetter = checkIfSendDeadLetter(esitoPaaInviaRT); // set the correct response regarding the creditor institution response - if (avoidReScheduling) { - if(Constants.KO.equals(esitoPaaInviaRT.getEsito())) { - rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); - if(isSavedDeadLetter) { - receiptDeadLetterRepository.save( - ReceiptDeadLetterEntity.builder() - .id(domainId + "_" + iuv + "_" + ccp) - .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") - .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getDescription() : "NO_FAULT_FIELDS_PRESENT") - .build() - ); - } - } else { - rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); + if (Constants.KO.equals(esitoPaaInviaRT.getEsito())) { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); + if (isSavedDeadLetter) { + receiptDeadLetterRepository.save( + ReceiptDeadLetterEntity.builder() + .id(domainId + "_" + iuv + "_" + ccp) + .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") + .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getDescription() : "NO_FAULT_FIELDS_PRESENT") + .build() + ); } generateREForAlreadySentRtToCreditorInstitution(); + } else if (Constants.OK.equals(esitoPaaInviaRT.getEsito())) { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); + generateREForAlreadySentRtToCreditorInstitution(); } else { FaultBean fault = esitoPaaInviaRT.getFault(); String faultCode = "ND"; @@ -138,10 +135,6 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L } } - private boolean checkIfAvoidRescheduling (EsitoPaaInviaRT esitoPaaInviaRT) { - return Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); - } - private boolean checkIfSendDeadLetter (EsitoPaaInviaRT esitoPaaInviaRT) { return esitoPaaInviaRT.getFault() == null || (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); From e2a692bc10802b5b2936dd2491908abd9de2b0d6 Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Tue, 8 Oct 2024 14:51:05 +0000 Subject: [PATCH 13/64] Bump to version 0.4.4-1-PAGOPA-2227 [skip ci] --- helm/Chart.yaml | 4 +- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 1457 ++++++++++++++++++--------------- openapi/openapi_redirect.json | 195 +++-- pom.xml | 2 +- 7 files changed, 900 insertions(+), 764 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 88b28e7d..fd51d201 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.222.0 -appVersion: 0.4.4 +version: 0.223.0 +appVersion: 0.4.4-1-PAGOPA-2227 dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index d3b3db94..373f16a9 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4" + tag: "0.4.4-1-PAGOPA-2227" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 0cd83a2c..e4999011 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4" + tag: "0.4.4-1-PAGOPA-2227" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index a0b072e9..3f2a3cd8 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4" + tag: "0.4.4-1-PAGOPA-2227" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 92686411..50604817 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,918 +4,1035 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.4" + "version": "0.4.4-1-PAGOPA-2227" }, - "servers" : [ { - "url" : "http://localhost", - "description" : "Generated server url" - } ], - "tags" : [ { - "description" : "Application info APIs", - "name" : "Home" - }, { - "description" : "Create and Delete payment token timer", - "name" : "ReceiptTimer" - }, { - "description" : "ECs and Stations configuration", - "name" : "Configuration" - }, { - "description" : "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", - "name" : "Receipt" - }, { - "description" : "Create and Delete rpt timer", - "name" : "RPTTimer" - }, { - "description" : "Conversion and redirection APIs", - "name" : "Redirect" - }, { - "description" : "Recovery and reconciliation APIs", - "name" : "Recovery" - } ], - "paths" : { - "/info" : { - "get" : { - "operationId" : "healthCheck", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AppInfoResponse" + "servers": [ + { + "url": "http://localhost", + "description": "Generated server url" + } + ], + "tags": [ + { + "description": "Application info APIs", + "name": "Home" + }, + { + "description": "Create and Delete payment token timer", + "name": "ReceiptTimer" + }, + { + "description": "ECs and Stations configuration", + "name": "Configuration" + }, + { + "description": "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", + "name": "Receipt" + }, + { + "description": "Create and Delete rpt timer", + "name": "RPTTimer" + }, + { + "description": "Conversion and redirection APIs", + "name": "Redirect" + }, + { + "description": "Recovery and reconciliation APIs", + "name": "Recovery" + } + ], + "paths": { + "/info": { + "get": { + "operationId": "healthCheck", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppInfoResponse" } } }, - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return OK if application is started", - "tags" : [ "Home" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return OK if application is started", + "tags": [ + "Home" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/payments" : { - "get" : { - "operationId" : "redirect", - "parameters" : [ { - "example" : "identificativoIntermediarioPA_sessionId", - "in" : "query", - "name" : "idSession", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "302" : { - "description" : "Redirect to Checkout service.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/payments": { + "get": { + "operationId": "redirect", + "parameters": [ + { + "example": "identificativoIntermediarioPA_sessionId", + "in": "query", + "name": "idSession", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "302": { + "description": "Redirect to Checkout service.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Redirect" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Redirect" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/receipt" : { - "get" : { - "operationId" : "receiptRetrieve", - "parameters" : [ { - "in" : "query", - "name" : "ci", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "ccp", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "iuv", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "type" : "string" + "/receipt": { + "get": { + "operationId": "receiptRetrieve", + "parameters": [ + { + "in": "query", + "name": "ci", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "ccp", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "iuv", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "type": "string" } } }, - "description" : "Receipt exists", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Receipt exists", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/receipt/ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/receipt/ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "receiptKo", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "string" + ], + "post": { + "operationId": "receiptKo", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully forwarded negative paaInviaRT to EC", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully forwarded negative paaInviaRT to EC", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] } }, - "/receipt/ok" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/receipt/ok": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "receiptOk", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ReceiptRequest" + ], + "post": { + "operationId": "receiptOk", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReceiptRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully forwarded positive paaInviaRT to EC", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully forwarded positive paaInviaRT to EC", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] } }, - "/receipt/timer" : { - "delete" : { - "description" : "Delete a timer by paymentToken", - "operationId" : "deleteTimer_1", - "parameters" : [ { - "in" : "query", - "name" : "paymentTokens", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "Successfully paymentToken expiration timer deleted", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/receipt/timer": { + "delete": { + "description": "Delete a timer by paymentToken", + "operationId": "deleteTimer_1", + "parameters": [ + { + "in": "query", + "name": "paymentTokens", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully paymentToken expiration timer deleted", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "deleteTimer", - "tags" : [ "ReceiptTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "deleteTimer", + "tags": [ + "ReceiptTimer" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Create a timer linked with paymentToken and receipt data", - "operationId" : "createTimer_1", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ReceiptTimerRequest" + ], + "post": { + "description": "Create a timer linked with paymentToken and receipt data", + "operationId": "createTimer_1", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReceiptTimerRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully paymentToken expiration timer created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully paymentToken expiration timer created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "createTimer", - "tags" : [ "ReceiptTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "createTimer", + "tags": [ + "ReceiptTimer" + ] } }, - "/recovery/proxy" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/proxy": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all receipts in the request, searching by passed identifier", - "operationId" : "recoverReceiptToBeSentByProxy", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryProxyReceiptRequest" + ], + "post": { + "description": "Execute reconciliation of all receipts in the request, searching by passed identifier", + "operationId": "recoverReceiptToBeSentByProxy", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecoveryProxyReceiptRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryProxyReceiptResponse" + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryProxyReceiptResponse" } } }, - "description" : "Reconciliation completed", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Reconciliation completed", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute reconciliation for passed receipts.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute reconciliation for passed receipts.", + "tags": [ + "Recovery" + ] } }, - "/recovery/{creditor_institution}/receipt-ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/{creditor_institution}/receipt-ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId" : "recoverReceiptKOForCreditorInstitution", - "parameters" : [ { - "in" : "path", - "name" : "creditor_institution", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateFrom", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateTo", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + ], + "post": { + "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId": "recoverReceiptKOForCreditorInstitution", + "parameters": [ + { + "in": "path", + "name": "creditor_institution", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "dateFrom", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "dateTo", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "Started reconciling IUVs with explicit RT send", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Started reconciling IUVs with explicit RT send", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute IUV reconciliation for certain creditor institution.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute IUV reconciliation for certain creditor institution.", + "tags": [ + "Recovery" + ] } }, - "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId" : "recoverReceiptKOForCreditorInstitutionAndIUV", - "parameters" : [ { - "in" : "path", - "name" : "creditor_institution", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,100}", - "type" : "string" - } - }, { - "in" : "path", - "name" : "iuv", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,100}", - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateFrom", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,10}", - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateTo", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,10}", - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + ], + "post": { + "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId": "recoverReceiptKOForCreditorInstitutionAndIUV", + "parameters": [ + { + "in": "path", + "name": "creditor_institution", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,100}", + "type": "string" + } + }, + { + "in": "path", + "name": "iuv", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,100}", + "type": "string" + } + }, + { + "in": "query", + "name": "dateFrom", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,10}", + "type": "string" + } + }, + { + "in": "query", + "name": "dateTo", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,10}", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "Completed IUV reconciliation with explicit RT submission", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Completed IUV reconciliation with explicit RT submission", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "400" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute IUV reconciliation for certain creditor institution.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute IUV reconciliation for certain creditor institution.", + "tags": [ + "Recovery" + ] } }, - "/rpt/timer" : { - "delete" : { - "description" : "Delete a timer by sessionId", - "operationId" : "deleteTimer", - "parameters" : [ { - "in" : "query", - "name" : "sessionId", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "Successfully rpt timer deleted", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/rpt/timer": { + "delete": { + "description": "Delete a timer by sessionId", + "operationId": "deleteTimer", + "parameters": [ + { + "in": "query", + "name": "sessionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully rpt timer deleted", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "deleteRPTTimer", - "tags" : [ "RPTTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "deleteRPTTimer", + "tags": [ + "RPTTimer" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Create a timer from sessionId data", - "operationId" : "createTimer", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RPTTimerRequest" + ], + "post": { + "description": "Create a timer from sessionId data", + "operationId": "createTimer", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RPTTimerRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully rpt timer created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully rpt timer created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "createRPTTimer", - "tags" : [ "RPTTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "createRPTTimer", + "tags": [ + "RPTTimer" + ] } }, - "/whitelist/cis" : { - "get" : { - "operationId" : "getCreditorInstitutions", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "/whitelist/cis": { + "get": { + "operationId": "getCreditorInstitutions", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for EC retrieved.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for EC retrieved.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "404" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "404": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for EC not found.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for EC not found.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return the string containing all creditor institutions for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return the string containing all creditor institutions for the wisp converter logic", + "tags": [ + "Configuration" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "createCreditorInstitutionsConfiguration", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + ], + "post": { + "operationId": "createCreditorInstitutionsConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "201" : { - "description" : "Created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "201": { + "description": "Created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Create the string containing all creditor institutions for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Create the string containing all creditor institutions for the wisp converter logic", + "tags": [ + "Configuration" + ] } }, - "/whitelist/stations" : { - "get" : { - "operationId" : "getStations", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "/whitelist/stations": { + "get": { + "operationId": "getStations", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for Stations retrieved.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for Stations retrieved.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "404" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "404": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for Stations not found.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for Stations not found.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return the string containing all stations for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return the string containing all stations for the wisp converter logic", + "tags": [ + "Configuration" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "createStationsConfiguration", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + ], + "post": { + "operationId": "createStationsConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "201" : { - "description" : "Created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "201": { + "description": "Created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Create the string containing all stations for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Create the string containing all stations for the wisp converter logic", + "tags": [ + "Configuration" + ] } } }, - "components" : { - "schemas" : { - "AppInfoResponse" : { - "type" : "object", - "properties" : { - "environment" : { - "type" : "string" + "components": { + "schemas": { + "AppInfoResponse": { + "type": "object", + "properties": { + "environment": { + "type": "string" }, - "name" : { - "type" : "string" + "name": { + "type": "string" }, - "version" : { - "type" : "string" + "version": { + "type": "string" } } }, - "ConfigurationModel" : { - "type" : "object", - "properties" : { - "key" : { - "type" : "string" + "ConfigurationModel": { + "type": "object", + "properties": { + "key": { + "type": "string" } } }, - "PairStringString" : { - "type" : "object", - "properties" : { - "first" : { - "type" : "string" + "PairStringString": { + "type": "object", + "properties": { + "first": { + "type": "string" }, - "second" : { - "type" : "string" + "second": { + "type": "string" } } }, - "RPTTimerRequest" : { - "type" : "object", - "properties" : { - "sessionId" : { - "type" : "string" + "RPTTimerRequest": { + "type": "object", + "properties": { + "sessionId": { + "type": "string" } } }, - "ReceiptRequest" : { - "type" : "object", - "properties" : { - "content" : { - "type" : "string" + "ReceiptRequest": { + "type": "object", + "properties": { + "content": { + "type": "string" } } }, - "ReceiptTimerRequest" : { - "type" : "object", - "properties" : { - "expirationTime" : { - "type" : "integer", - "format" : "int64" + "ReceiptTimerRequest": { + "type": "object", + "properties": { + "expirationTime": { + "type": "integer", + "format": "int64" }, - "fiscalCode" : { - "pattern" : "\\w*", - "type" : "string" + "fiscalCode": { + "pattern": "\\w*", + "type": "string" }, - "noticeNumber" : { - "pattern" : "\\d*", - "type" : "string" + "noticeNumber": { + "pattern": "\\d*", + "type": "string" }, - "paymentToken" : { - "type" : "string" + "paymentToken": { + "type": "string" } } }, - "RecoveryProxyReceiptRequest" : { - "type" : "object", - "properties" : { - "receiptIds" : { - "type" : "array", - "items" : { - "type" : "string" + "RecoveryProxyReceiptRequest": { + "type": "object", + "properties": { + "receiptIds": { + "type": "array", + "items": { + "type": "string" } } } }, - "RecoveryProxyReceiptResponse" : { - "type" : "object", - "properties" : { - "receiptStatus" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/PairStringString" + "RecoveryProxyReceiptResponse": { + "type": "object", + "properties": { + "receiptStatus": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PairStringString" } } } }, - "RecoveryReceiptPaymentResponse" : { - "type" : "object", - "properties" : { - "ccp" : { - "type" : "string" + "RecoveryReceiptPaymentResponse": { + "type": "object", + "properties": { + "ccp": { + "type": "string" }, - "ci" : { - "type" : "string" + "ci": { + "type": "string" }, - "iuv" : { - "type" : "string" + "iuv": { + "type": "string" } } }, - "RecoveryReceiptResponse" : { - "type" : "object", - "properties" : { - "payments" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/RecoveryReceiptPaymentResponse" + "RecoveryReceiptResponse": { + "type": "object", + "properties": { + "payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RecoveryReceiptPaymentResponse" } } } } }, - "securitySchemes" : { - "ApiKey" : { - "description" : "The API key to access this function app.", - "in" : "header", - "name" : "Ocp-Apim-Subscription-Key", - "type" : "apiKey" + "securitySchemes": { + "ApiKey": { + "description": "The API key to access this function app.", + "in": "header", + "name": "Ocp-Apim-Subscription-Key", + "type": "apiKey" } } } -} \ No newline at end of file +} diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 17133960..4debfc53 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,122 +2,141 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.4" + "version": "0.4.4-1-PAGOPA-2227" }, - "servers" : [ { - "url" : "http://localhost", - "description" : "Generated server url" - } ], - "tags" : [ { - "description" : "Application info APIs", - "name" : "Home" - }, { - "description" : "Conversion and redirection APIs", - "name" : "Redirect" - } ], - "paths" : { - "/info" : { - "get" : { - "operationId" : "healthCheck", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AppInfoResponse" + "servers": [ + { + "url": "http://localhost", + "description": "Generated server url" + } + ], + "tags": [ + { + "description": "Application info APIs", + "name": "Home" + }, + { + "description": "Conversion and redirection APIs", + "name": "Redirect" + } + ], + "paths": { + "/info": { + "get": { + "operationId": "healthCheck", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppInfoResponse" } } }, - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return OK if application is started", - "tags" : [ "Home" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return OK if application is started", + "tags": [ + "Home" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/payments" : { - "get" : { - "operationId" : "redirect", - "parameters" : [ { - "example" : "identificativoIntermediarioPA_sessionId", - "in" : "query", - "name" : "idSession", - "required" : true, - "schema" : { - "type" : "string" + "/payments": { + "get": { + "operationId": "redirect", + "parameters": [ + { + "example": "identificativoIntermediarioPA_sessionId", + "in": "query", + "name": "idSession", + "required": true, + "schema": { + "type": "string" + } } - } ], - "responses" : { - "302" : { - "description" : "Redirect to Checkout service.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + ], + "responses": { + "302": { + "description": "Redirect to Checkout service.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Redirect" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Redirect" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] } }, - "components" : { - "schemas" : { - "AppInfoResponse" : { - "type" : "object", - "properties" : { - "environment" : { - "type" : "string" + "components": { + "schemas": { + "AppInfoResponse": { + "type": "object", + "properties": { + "environment": { + "type": "string" }, - "name" : { - "type" : "string" + "name": { + "type": "string" }, - "version" : { - "type" : "string" + "version": { + "type": "string" } } } }, - "securitySchemes" : { - "ApiKey" : { - "description" : "The API key to access this function app.", - "in" : "header", - "name" : "Ocp-Apim-Subscription-Key", - "type" : "apiKey" + "securitySchemes": { + "ApiKey": { + "description": "The API key to access this function app.", + "in": "header", + "name": "Ocp-Apim-Subscription-Key", + "type": "apiKey" } } } -} \ No newline at end of file +} diff --git a/pom.xml b/pom.xml index 0e83a1b7..4baa9b83 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4 + 0.4.4-1-PAGOPA-2227 pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 7306cf59fa8a02e402b975b623ed781880b67013 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 14:49:34 +0200 Subject: [PATCH 14/64] PAGOPA-2227 adding status rejected by ec --- .../repository/model/enumz/ReceiptStatusEnum.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java index 5d9a4b02..95f43766 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/ReceiptStatusEnum.java @@ -5,5 +5,6 @@ public enum ReceiptStatusEnum { SENDING, SCHEDULED, SENT, - NOT_SENT + NOT_SENT, + SENT_REJECTED_BY_EC } \ No newline at end of file From f700fc3385ae4a05a7e46918e4e1cde9f2194cbd Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:50:42 +0200 Subject: [PATCH 15/64] PAGOPA-2227 setting up repository and entity --- .../ReceiptDeadLetterRepository.java | 10 +++++++ .../model/ReceiptDeadLetterEntity.java | 27 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java create mode 100644 src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java b/src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java new file mode 100644 index 00000000..49fff40d --- /dev/null +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/ReceiptDeadLetterRepository.java @@ -0,0 +1,10 @@ +package it.gov.pagopa.wispconverter.repository; + +import com.azure.spring.data.cosmos.repository.CosmosRepository; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; +import org.springframework.stereotype.Repository; + +@Repository +public interface ReceiptDeadLetterRepository extends CosmosRepository { + +} diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java new file mode 100644 index 00000000..a372f9bc --- /dev/null +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java @@ -0,0 +1,27 @@ +package it.gov.pagopa.wispconverter.repository.model; + +import com.azure.spring.data.cosmos.core.mapping.Container; +import com.azure.spring.data.cosmos.core.mapping.PartitionKey; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.data.annotation.Id; + +@Container(containerName = "receipt-dead-letter") +@Data +@ToString +@EqualsAndHashCode +@Builder(toBuilder = true) +public class ReceiptDeadLetterEntity { + + @Id + private String id; + + @PartitionKey + private String partitionKey; + + private String faultCode; + + private String payload; +} From 131c6468477c74d6446c26bb54f47743f18fb2aa Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:00:09 +0200 Subject: [PATCH 16/64] PAGOPA-2227 adding dead letter logic --- .../service/PaaInviaRTSenderService.java | 65 +++++++++++++------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 8b4fb092..53560a0f 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -5,6 +5,8 @@ import gov.telematici.pagamenti.ws.papernodo.PaaInviaRTRisposta; import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum; import it.gov.pagopa.wispconverter.exception.AppException; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; import it.gov.pagopa.wispconverter.repository.model.enumz.ClientEnum; import it.gov.pagopa.wispconverter.repository.model.enumz.InternalStepStatus; import it.gov.pagopa.wispconverter.repository.model.enumz.OutcomeEnum; @@ -43,8 +45,10 @@ public class PaaInviaRTSenderService { private final JaxbElementUtil jaxbElementUtil; - @Value("${wisp-converter.rt-send.avoid-scheduling-on-states}") - private Set avoidSchedulingOnStates; + private final ReceiptDeadLetterRepository receiptDeadLetterRepository; + + @Value("${wisp-converter.rt-send.no-dead-letter-on-states}") + private Set noDeadLetterOnStates; public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, List> headers, String payload, String domainId, String iuv, String ccp) { @@ -84,24 +88,38 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L // check the response and if the outcome is KO, throw an exception EsitoPaaInviaRT esitoPaaInviaRT = body.getPaaInviaRTRisposta(); - boolean avoidReScheduling = esitoPaaInviaRT.getFault() != null && avoidSchedulingOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode()); + boolean avoidReScheduling = Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); + + boolean isSavedDeadLetter = esitoPaaInviaRT.getFault() == null || + (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); // set the correct response regarding the creditor institution response if (avoidReScheduling) { - - generateREForAlreadySentRtToCreditorInstitution(); - - } else if (Constants.KO.equals(esitoPaaInviaRT.getEsito()) || !Constants.OK.equals(esitoPaaInviaRT.getEsito())) { - FaultBean fault = esitoPaaInviaRT.getFault(); - String faultCode = "ND"; - String faultString = "ND"; - String faultDescr = "ND"; - if (fault != null) { - faultCode = fault.getFaultCode(); - faultString = fault.getFaultString(); - faultDescr = fault.getDescription(); + if(Constants.KO.equals(esitoPaaInviaRT.getEsito())) { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); + if(isSavedDeadLetter) { + receiptDeadLetterRepository.save( + ReceiptDeadLetterEntity.builder() + .id(domainId + "_" + iuv + "_" + ccp) + .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") + .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().toString() : esitoPaaInviaRT.toString()) + .build() + ); + } + } else { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); } - + generateREForAlreadySentRtToCreditorInstitution(); + } else { + FaultBean fault = esitoPaaInviaRT.getFault(); + String faultCode = "ND"; + String faultString = "ND"; + String faultDescr = "ND"; + if (fault != null) { + faultCode = fault.getFaultCode(); + faultString = fault.getFaultString(); + faultDescr = fault.getDescription(); + } throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION, faultCode, faultString, faultDescr); } @@ -123,16 +141,13 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_GENERIC_ERROR, e.getMessage()); } - - - rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); } private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response, String rawBody) { // check the response received and, if is a 4xx or a 5xx HTTP error code throw an exception - if (response.getStatusCode().is4xxClientError() || response.getStatusCode().is5xxServerError()) { + if (!response.getStatusCode().is2xxSuccessful()) { throw new AppException(AppErrorCodeMessageEnum.CLIENT_PAAINVIART, "Error response: " + response.getStatusCode().value()); } // validating the response body and, if something is null, throw an exception @@ -148,6 +163,16 @@ private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response return body; } + private void saveDeadLetter (String id, String faultCode, String payload) { + receiptDeadLetterRepository.save( + ReceiptDeadLetterEntity.builder() + .id(id) + .faultCode(faultCode) + .payload(payload) + .build() + ); + } + private void generateREForRequestToCreditorInstitution(String uri, List> headers, String body) { From 7b046054178394924aa7cebbed36c8c7da402e9b Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:07:35 +0200 Subject: [PATCH 17/64] PAGOPA-2227 changing input var --- .../pagopa/wispconverter/service/PaaInviaRTSenderService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 53560a0f..910919fc 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -47,8 +47,8 @@ public class PaaInviaRTSenderService { private final ReceiptDeadLetterRepository receiptDeadLetterRepository; - @Value("${wisp-converter.rt-send.no-dead-letter-on-states}") - private Set noDeadLetterOnStates; + @Value("#{'${wisp-converter.rt-send.no-dead-letter-on-states}'.split(',')}") + private List noDeadLetterOnStates; public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, List> headers, String payload, String domainId, String iuv, String ccp) { From 2568fe708f9ba9102130a00c376e370b69be864e Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:07:44 +0200 Subject: [PATCH 18/64] PAGOPA-2227 update helm values --- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- src/main/resources/application.properties | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index a7eb0c4a..36568701 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -98,7 +98,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '1' - RT_SEND_AVOID_SCHEDULING_ON_STATES: 'PAA_RT_DUPLICATA' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 0880d9da..3c945617 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -117,7 +117,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_AVOID_SCHEDULING_ON_STATES: 'PAA_RT_DUPLICATA' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 8fd097db..4ba02dc2 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -98,7 +98,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_AVOID_SCHEDULING_ON_STATES: 'PAA_RT_DUPLICATA' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fce93a9e..0b2d176f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -136,7 +136,7 @@ wisp-converter.cached-requestid-mapping.ttl.minutes=${CACHED_REQUESTID_MAPPING_T wisp-converter.poste-italiane.abi-code=07601 wisp-converter.rt-send.max-retries=${RT_SEND_MAX_RETRIES:48} wisp-converter.rt-send.scheduling-time-in-minutes=${RT_SEND_SCHEDULING_TIME_IN_MINUTES:60} -wisp-converter.rt-send.avoid-scheduling-on-states=${RT_SEND_AVOID_SCHEDULING_ON_STATES:PAA_RT_DUPLICATA} +wisp-converter.rt-send.no-dead-letter-on-states=${RT_SEND_NO_DEAD_LETTER_ON_STATES:PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR} wisp-converter.idempotency.lock-validity-in-minutes=${IDEMPOTENCY_LOCK_VALIDITY_IN_MINUTES:30} wisp-converter.refresh.cache.cron=${CACHE_REFRESH_CRON:-} wisp-converter.rtMapper.ctRicevutaTelematica.versioneOggetto=6.2.0 From 554d21e80e2bab513d950fbc3c08ab61415ac360 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:08:08 +0200 Subject: [PATCH 19/64] PAGOPA-2227 remove unused import --- .../pagopa/wispconverter/service/PaaInviaRTSenderService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 910919fc..6e5c5d68 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -30,7 +30,6 @@ import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.Set; @Service From bc806e65a1381788a6d50a2a4cb19662256bc70a Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:10:35 +0200 Subject: [PATCH 20/64] PAGOPA-2227 remove unused method --- .../service/PaaInviaRTSenderService.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 6e5c5d68..0502f2d7 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -162,17 +162,6 @@ private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response return body; } - private void saveDeadLetter (String id, String faultCode, String payload) { - receiptDeadLetterRepository.save( - ReceiptDeadLetterEntity.builder() - .id(id) - .faultCode(faultCode) - .payload(payload) - .build() - ); - } - - private void generateREForRequestToCreditorInstitution(String uri, List> headers, String body) { StringBuilder headerBuilder = new StringBuilder(); From 8f7d4464d11acebc6f078ee2d487ba775ffc2628 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:35:28 +0200 Subject: [PATCH 21/64] PAGOPA-2227 fix junit --- .../wispconverter/service/PaaInviaRTSenderServiceTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java index 10003fb7..75069cca 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java @@ -4,6 +4,7 @@ import gov.telematici.pagamenti.ws.papernodo.FaultBean; import gov.telematici.pagamenti.ws.papernodo.PaaInviaRTRisposta; import it.gov.pagopa.wispconverter.exception.AppException; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.util.JaxbElementUtil; import org.junit.jupiter.api.Test; import org.springframework.data.util.Pair; @@ -28,6 +29,7 @@ void esitoOK() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); @@ -45,7 +47,7 @@ void esitoOK() { when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); org.springframework.test.util.ReflectionTestUtils.setField(p, "jaxbElementUtil", new JaxbElementUtil()); p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); assertTrue(true); @@ -57,6 +59,7 @@ void esitoKO() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); @@ -77,7 +80,7 @@ void esitoKO() { when(responseSpec.toEntity(PaaInviaRTRisposta.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); try { p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); fail(); From ae541bacfe24b2b915de68a2c901f3dcf72b6c44 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 3 Oct 2024 17:55:27 +0200 Subject: [PATCH 22/64] PAGOPA-2227 fix junit --- src/test/java/it/gov/pagopa/wispconverter/HomeTest.java | 5 +++++ .../it/gov/pagopa/wispconverter/OpenApiGenerationTest.java | 4 ++++ .../it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java | 3 +++ .../wispconverter/endpoint/ConfigurationControllerTest.java | 4 ++++ .../java/it/gov/pagopa/wispconverter/endpoint/RptTest.java | 3 +++ .../wispconverter/service/ConfigurationServiceTest.java | 2 ++ 6 files changed, 21 insertions(+) diff --git a/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java b/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java index 1dea3e96..3128bce9 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.controller.model.AppInfoResponse; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; @@ -40,6 +41,10 @@ class HomeTest { @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; + + @Test void slash() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)) diff --git a/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java b/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java index ff2fa926..ce9b80f3 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.controller.RedirectController; import it.gov.pagopa.wispconverter.repository.*; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; @@ -50,6 +51,9 @@ class OpenApiGenerationTest { @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; + @Test void swaggerSpringPlugin() throws Exception { saveOpenAPI("/v3/api-docs", "openapi.json"); diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java index 14430f3f..6cfe3179 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java @@ -7,6 +7,7 @@ import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import it.gov.pagopa.wispconverter.utils.TestUtils; @@ -69,6 +70,8 @@ class CarrelloTest { private ReceiptService receiptService; @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; @Test void success() throws Exception { diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java index 822e2dd0..a0cb07a1 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java @@ -4,6 +4,7 @@ import it.gov.pagopa.wispconverter.Application; import it.gov.pagopa.wispconverter.controller.model.ConfigurationModel; import it.gov.pagopa.wispconverter.service.ConfigurationService; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -28,6 +29,9 @@ class ConfigurationControllerTest { @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; + @Autowired private MockMvc mvc; diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java index 7fa245e2..92c434d5 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java @@ -10,6 +10,7 @@ import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; +import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import it.gov.pagopa.wispconverter.service.model.re.ReEventDto; @@ -79,6 +80,8 @@ class RptTest { private ReceiptService receiptService; @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; private void setConfigCacheStoredData(String servicePath, int primitiveVersion) { StationCreditorInstitutionDto stationCreditorInstitutionDto = new StationCreditorInstitutionDto(); diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java index ac62c2f2..bd4e7f7c 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java @@ -28,6 +28,8 @@ class ConfigurationServiceTest { ConfigurationRepository configurationRepository; @MockBean private RecoveryService recoveryService; + @MockBean + private PaaInviaRTSenderService paaInviaRTSenderService; @Autowired @InjectMocks From 645a16251dd3d796c7824ea7b71e4595bda1ba23 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:38:58 +0200 Subject: [PATCH 23/64] PAGOPA-2227 extending coverage --- .../service/PaaInviaRTSenderService.java | 2 +- .../service/PaaInviaRTSenderServiceTest.java | 99 ++++++++++++++++--- 2 files changed, 84 insertions(+), 17 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 0502f2d7..af3eab09 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -101,7 +101,7 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L ReceiptDeadLetterEntity.builder() .id(domainId + "_" + iuv + "_" + ccp) .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") - .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().toString() : esitoPaaInviaRT.toString()) + .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getDescription() : "NO_FAULT_FIELDS_PRESENT") .build() ); } diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java index 75069cca..b5629921 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java @@ -1,25 +1,28 @@ package it.gov.pagopa.wispconverter.service; -import gov.telematici.pagamenti.ws.papernodo.EsitoPaaInviaRT; -import gov.telematici.pagamenti.ws.papernodo.FaultBean; -import gov.telematici.pagamenti.ws.papernodo.PaaInviaRTRisposta; import it.gov.pagopa.wispconverter.exception.AppException; import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; +import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptStatusEnum; import it.gov.pagopa.wispconverter.util.JaxbElementUtil; import org.junit.jupiter.api.Test; import org.springframework.data.util.Pair; import org.springframework.http.ResponseEntity; +import org.springframework.test.util.ReflectionTestUtils; import org.springframework.web.client.RestClient; import java.net.URI; +import java.time.temporal.ChronoUnit; +import java.util.Arrays; import java.util.List; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; +import static org.mockito.Mockito.times; class PaaInviaRTSenderServiceTest { @@ -27,7 +30,7 @@ class PaaInviaRTSenderServiceTest { void esitoOK() { RestClient.Builder builder = mock(RestClient.Builder.class); ReService reService = mock(ReService.class); - JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); @@ -51,13 +54,14 @@ void esitoOK() { org.springframework.test.util.ReflectionTestUtils.setField(p, "jaxbElementUtil", new JaxbElementUtil()); p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); assertTrue(true); + verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT)); } @Test - void esitoKO() { + void esitoKONoDeadLetter() { RestClient.Builder builder = mock(RestClient.Builder.class); ReService reService = mock(ReService.class); - JaxbElementUtil jaxbElementUtil = mock(JaxbElementUtil.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); @@ -69,23 +73,86 @@ void esitoKO() { when(requestBodySpec.body(anyString())).thenReturn(requestBodySpec); RestClient.ResponseSpec responseSpec = mock(RestClient.ResponseSpec.class); + + when(requestBodySpec.retrieve()).thenReturn(responseSpec); + + String paaInviaRTRisposta = "KOPAA_RT_DUPLICATA"; + when(responseSpec.toEntity(String.class)) + .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); + + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); + ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); + p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "12345678910", "02345678998765432", "CCP_TEST"); + assertTrue(true); + verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT_REJECTED_BY_EC)); + verify(receiptDeadLetterRepository, times(0)).save(any(ReceiptDeadLetterEntity.class)); + } + + @Test + void esitoKODeadLetter() { + RestClient.Builder builder = mock(RestClient.Builder.class); + ReService reService = mock(ReService.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); + RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); + RestClient client = mock(RestClient.class); + when(builder.build()).thenReturn(client); + RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); + when(client.post()).thenReturn(requestBodyUriSpec); + RestClient.RequestBodySpec requestBodySpec = mock(RestClient.RequestBodySpec.class); + when(requestBodyUriSpec.uri(any(URI.class))).thenReturn(requestBodySpec); + when(requestBodySpec.body(anyString())).thenReturn(requestBodySpec); + + RestClient.ResponseSpec responseSpec = mock(RestClient.ResponseSpec.class); + when(requestBodySpec.retrieve()).thenReturn(responseSpec); - FaultBean faultBean = new FaultBean(); - EsitoPaaInviaRT esitoPaaInviaRT = new EsitoPaaInviaRT(); - esitoPaaInviaRT.setEsito("KO"); - esitoPaaInviaRT.setFault(faultBean); - PaaInviaRTRisposta paaInviaRTRisposta = new PaaInviaRTRisposta(); - paaInviaRTRisposta.setPaaInviaRTRisposta(esitoPaaInviaRT); - when(responseSpec.toEntity(PaaInviaRTRisposta.class)) + String paaInviaRTRisposta = "KOPAA_STATO_SCONOSCIUTO"; + when(responseSpec.toEntity(String.class)) + .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); + + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); + ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); + p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); + assertTrue(true); + verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT_REJECTED_BY_EC)); + verify(receiptDeadLetterRepository, times(1)).save(any(ReceiptDeadLetterEntity.class)); + } + + @Test + void esitoKORescheduled() { + RestClient.Builder builder = mock(RestClient.Builder.class); + ReService reService = mock(ReService.class); + JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); + RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); + ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); + RestClient client = mock(RestClient.class); + when(builder.build()).thenReturn(client); + RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); + when(client.post()).thenReturn(requestBodyUriSpec); + RestClient.RequestBodySpec requestBodySpec = mock(RestClient.RequestBodySpec.class); + when(requestBodyUriSpec.uri(any(URI.class))).thenReturn(requestBodySpec); + when(requestBodySpec.body(anyString())).thenReturn(requestBodySpec); + + RestClient.ResponseSpec responseSpec = mock(RestClient.ResponseSpec.class); + + when(requestBodySpec.retrieve()).thenReturn(responseSpec); + + String paaInviaRTRisposta = "WRONG_BODY"; + when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); + ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); try { p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); fail(); - } catch (AppException e) { + } catch (AppException e){ assertTrue(true); } + verify(receiptDeadLetterRepository, times(0)).save(any(ReceiptDeadLetterEntity.class)); } } From 61635b51b21a8bcc49468a53c2c57eceb682f7de Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:53:27 +0200 Subject: [PATCH 24/64] PAGOPA-2227 solving issues --- .../service/PaaInviaRTSenderService.java | 37 ++++++++++++++----- .../service/PaaInviaRTSenderServiceTest.java | 1 - 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index af3eab09..a40cbbbd 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -29,6 +29,8 @@ import java.net.InetSocketAddress; import java.net.URI; import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; import java.util.List; @@ -54,13 +56,7 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L try { // Generating the REST client, setting proxy specification if needed - RestClient client; - if (proxyAddress != null) { - client = RestClient.builder(ProxyUtility.getProxiedClient(proxyAddress)) - .build(); - } else { - client = restClientBuilder.build(); - } + RestClient client = generateClient(proxyAddress); // Send the passed request payload to the passed URL RestClient.RequestBodySpec bodySpec = client.post() @@ -87,10 +83,10 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L // check the response and if the outcome is KO, throw an exception EsitoPaaInviaRT esitoPaaInviaRT = body.getPaaInviaRTRisposta(); - boolean avoidReScheduling = Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); + boolean avoidReScheduling = checkIfAvoidRescheduling(esitoPaaInviaRT); - boolean isSavedDeadLetter = esitoPaaInviaRT.getFault() == null || - (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); + // check the response if the dead letter sending is needed + boolean isSavedDeadLetter = checkIfSendDeadLetter(esitoPaaInviaRT); // set the correct response regarding the creditor institution response if (avoidReScheduling) { @@ -142,6 +138,27 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L } } + private boolean checkIfAvoidRescheduling (EsitoPaaInviaRT esitoPaaInviaRT) { + return Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); + } + + private boolean checkIfSendDeadLetter (EsitoPaaInviaRT esitoPaaInviaRT) { + return esitoPaaInviaRT.getFault() == null || + (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); + } + + private RestClient generateClient(InetSocketAddress proxyAddress) throws NoSuchAlgorithmException, KeyManagementException { + // Generating the REST client, setting proxy specification if needed + RestClient client; + if (proxyAddress != null) { + client = RestClient.builder(ProxyUtility.getProxiedClient(proxyAddress)) + .build(); + } else { + client = restClientBuilder.build(); + } + return client; + } + private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response, String rawBody) { diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java index b5629921..bfca7cc2 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java @@ -12,7 +12,6 @@ import org.springframework.web.client.RestClient; import java.net.URI; -import java.time.temporal.ChronoUnit; import java.util.Arrays; import java.util.List; From f30a027d73cdf030b5a488186909cbfd089be7b2 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 4 Oct 2024 12:10:09 +0200 Subject: [PATCH 25/64] PAGOPA-2227 reducing cognitive complexity --- .../service/PaaInviaRTSenderService.java | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index a40cbbbd..e579d1b5 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -83,28 +83,25 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L // check the response and if the outcome is KO, throw an exception EsitoPaaInviaRT esitoPaaInviaRT = body.getPaaInviaRTRisposta(); - boolean avoidReScheduling = checkIfAvoidRescheduling(esitoPaaInviaRT); - // check the response if the dead letter sending is needed boolean isSavedDeadLetter = checkIfSendDeadLetter(esitoPaaInviaRT); // set the correct response regarding the creditor institution response - if (avoidReScheduling) { - if(Constants.KO.equals(esitoPaaInviaRT.getEsito())) { - rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); - if(isSavedDeadLetter) { - receiptDeadLetterRepository.save( - ReceiptDeadLetterEntity.builder() - .id(domainId + "_" + iuv + "_" + ccp) - .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") - .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getDescription() : "NO_FAULT_FIELDS_PRESENT") - .build() - ); - } - } else { - rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); + if (Constants.KO.equals(esitoPaaInviaRT.getEsito())) { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); + if (isSavedDeadLetter) { + receiptDeadLetterRepository.save( + ReceiptDeadLetterEntity.builder() + .id(domainId + "_" + iuv + "_" + ccp) + .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") + .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getDescription() : "NO_FAULT_FIELDS_PRESENT") + .build() + ); } generateREForAlreadySentRtToCreditorInstitution(); + } else if (Constants.OK.equals(esitoPaaInviaRT.getEsito())) { + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); + generateREForAlreadySentRtToCreditorInstitution(); } else { FaultBean fault = esitoPaaInviaRT.getFault(); String faultCode = "ND"; @@ -138,10 +135,6 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L } } - private boolean checkIfAvoidRescheduling (EsitoPaaInviaRT esitoPaaInviaRT) { - return Constants.KO.equals(esitoPaaInviaRT.getEsito()) || Constants.OK.equals(esitoPaaInviaRT.getEsito()); - } - private boolean checkIfSendDeadLetter (EsitoPaaInviaRT esitoPaaInviaRT) { return esitoPaaInviaRT.getFault() == null || (esitoPaaInviaRT.getFault() != null && !noDeadLetterOnStates.contains(esitoPaaInviaRT.getFault().getFaultCode())); From b927fe4bc8492a8038022598bf9df10741936665 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:28:49 +0200 Subject: [PATCH 26/64] PAGOPA-2227 fix log injection warning --- .../it/gov/pagopa/wispconverter/service/RPTTimerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java b/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java index 6499f8a0..36ad8129 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java @@ -111,7 +111,7 @@ public void sendMessage(RPTTimerRequest message) { serviceBusSenderClient.cancelScheduledMessage(sequenceNumber); // log event - log.debug("Timer not set due to an exception for rpt_timer_key: {} and sessionId: {}", key, sanitizeInput(sessionId)); + log.debug("Timer not set due to an exception for rpt_timer_key: {} and sessionId: {}", sanitizeInput(key), sanitizeInput(sessionId)); generateRE(InternalStepStatus.RPT_TIMER_NOT_SET, "Exception timer not set: [" + sequenceNumber + "] for sessionId: [" + sessionId + "]"); } } From 31cb3fd29e9a6ce55bf052078834602418b4ea91 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:41:38 +0200 Subject: [PATCH 27/64] PAGOPA-2227 extending coverage --- .../service/RPTTimerServiceTest.java | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/test/java/it/gov/pagopa/wispconverter/service/RPTTimerServiceTest.java diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/RPTTimerServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/RPTTimerServiceTest.java new file mode 100644 index 00000000..10a226f0 --- /dev/null +++ b/src/test/java/it/gov/pagopa/wispconverter/service/RPTTimerServiceTest.java @@ -0,0 +1,105 @@ +package it.gov.pagopa.wispconverter.service; + +import com.azure.messaging.servicebus.ServiceBusMessage; +import com.azure.messaging.servicebus.ServiceBusSenderClient; +import it.gov.pagopa.wispconverter.controller.model.RPTTimerRequest; +import it.gov.pagopa.wispconverter.repository.CacheRepository; +import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; +import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; +import it.gov.pagopa.wispconverter.service.model.ECommerceHangTimeoutMessage; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.*; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class RPTTimerServiceTest { + + public static final String SESSION_ID = "12345678-1234-1234-123456781234"; + public static final Long SEQUENCE_NUMBER = 1111L; + + + @Mock + private ReService reService; + + @Mock + private ServiceBusSenderClient serviceBusSenderClient; + + @Mock + private CacheRepository cacheRepository; + + @Mock + private RPTRequestRepository rptRequestRepository; + + @InjectMocks + @Spy + private RPTTimerService rptTimerService; + + @Captor + ArgumentCaptor messageArgumentCaptor; + + @BeforeEach + void setUp() { + ReflectionTestUtils.setField(rptTimerService, "connectionString", "-"); + ReflectionTestUtils.setField(rptTimerService, "queueName", "your-queue-name"); + ReflectionTestUtils.setField(rptTimerService, "serviceBusSenderClient", serviceBusSenderClient); + ReflectionTestUtils.setField(rptTimerService, "expirationTime", 1800); + ReflectionTestUtils.setField(rptTimerService, "reService", reService); + ReflectionTestUtils.setField(rptTimerService, "cacheRepository", cacheRepository); + } + + @Test + void sendMessage_ok() { + RPTTimerRequest message = RPTTimerRequest.builder() + .sessionId(SESSION_ID) + .build(); + RPTRequestEntity rptRequestEntity = RPTRequestEntity.builder() + .id(SESSION_ID) + .build(); + when(rptRequestRepository.findById(SESSION_ID)).thenReturn(Optional.of(rptRequestEntity)); + rptTimerService.sendMessage(message); + verify(cacheRepository, times(1)).hasKey(eq("wisp_timer_rpt_" + SESSION_ID)); + verify(serviceBusSenderClient, times(1)).scheduleMessage(messageArgumentCaptor.capture(), any()); + assertEquals("{\"sessionId\":\"" + SESSION_ID+ "\"}", + messageArgumentCaptor.getValue().getBody().toString()); + } + + @Test + void sendMessage_messageDuplicated() { + RPTTimerRequest message = RPTTimerRequest.builder() + .sessionId(SESSION_ID) + .build(); + RPTRequestEntity rptRequestEntity = RPTRequestEntity.builder() + .id(SESSION_ID) + .build(); + when(rptRequestRepository.findById(SESSION_ID)).thenReturn(Optional.of(rptRequestEntity)); + when(cacheRepository.hasKey(anyString())).thenReturn(Boolean.TRUE); + when(cacheRepository.read(any(), any())).thenReturn(SEQUENCE_NUMBER.toString()); + + rptTimerService.sendMessage(message); + + verify(cacheRepository, times(1)).delete(eq("wisp_timer_rpt_" + SESSION_ID)); + verify(serviceBusSenderClient, times(1)).cancelScheduledMessage(SEQUENCE_NUMBER); + verify(cacheRepository, times(1)).hasKey(eq("wisp_timer_rpt_" + SESSION_ID)); + verify(serviceBusSenderClient, times(1)).scheduleMessage(messageArgumentCaptor.capture(), any()); + } + + @Test + void cancelScheduledMessage_ok() { + when(cacheRepository.read(any(), any())).thenReturn(SEQUENCE_NUMBER.toString()); + + rptTimerService.cancelScheduledMessage(SESSION_ID); + + verify(cacheRepository, times(1)).delete(eq("wisp_timer_rpt_" + SESSION_ID)); + verify(serviceBusSenderClient, times(1)).cancelScheduledMessage(SEQUENCE_NUMBER); + + } +} \ No newline at end of file From ae05a8d674bc7d6e9c509ac477db57e2125c9da2 Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Thu, 10 Oct 2024 11:29:31 +0200 Subject: [PATCH 28/64] chore: Add station to receipt (#143) --- .../pagopa/wispconverter/repository/model/RTRequestEntity.java | 2 ++ .../it/gov/pagopa/wispconverter/service/ReceiptService.java | 1 + 2 files changed, 3 insertions(+) diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java index dcc1ee33..e6aebd18 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java @@ -47,4 +47,6 @@ public class RTRequestEntity { private Integer retry; private String idempotencyKey; + + private String station; } diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java index d284ada1..f2694dd0 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java @@ -609,6 +609,7 @@ public void scheduleRTSend(SessionDataDTO sessionData, URI uri, InetSocketAddres .retry(0) .idempotencyKey(idempotencyKey) .receiptType(receiptType) + .station(station.getStationCode()) .build(); rtRetryComosService.saveRTRequestEntity(rtRequestEntity); From 091a72281147a48205dce01c7040c25554ba1afc Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Thu, 10 Oct 2024 09:30:38 +0000 Subject: [PATCH 29/64] Bump to version 0.4.4-4-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index d2ee3cd2..723d26d9 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.225.0 -appVersion: 0.4.4-3-release-v0.4.x +version: 0.226.0 +appVersion: 0.4.4-4-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 13c13a42..d15eb832 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-3-release-v0.4.x" + tag: "0.4.4-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 5c684054..30c1f57a 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-3-release-v0.4.x" + tag: "0.4.4-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 307db31f..c9325ae1 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-3-release-v0.4.x" + tag: "0.4.4-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 8d476032..df26dde2 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.4-3-release-v0.4.x" + "version": "0.4.4-4-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 91c90ee1..a6a3668a 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.4-3-release-v0.4.x" + "version": "0.4.4-4-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index e4f8b801..fb6d8338 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4-3-release-v0.4.x + 0.4.4-4-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From e99b5c2b8418be4a4c70b9dd67e90cade0bf433a Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 10 Oct 2024 14:42:37 +0200 Subject: [PATCH 30/64] PAGOPA-2227 temp fix uat apim path --- helm/values-uat.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 8b9061e4..d4494a38 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -82,7 +82,7 @@ microservice-chart: RECEIPT_TIMER_QUEUE_NAME: "nodo_wisp_payment_timeout_queue" ECOMMERCE_HANG_TIMER_QUEUE_NAME: "nodo_wisp_ecommerce_hang_timeout_queue" ECOMMERCE_HANG_TIMEOUT: '1800' - APIM_PATH: 'api.uat.platform.pagopa.it' + APIM_PATH: 'platform.pagopa.it' CACHED_REQUESTID_MAPPING_TTL_MINUTES: "1440" CACHE_REFRESH_CRON: "0 */60 * * * *" CLIENT_GPD_READ_TIMEOUT: '5000' From 8f395061166253ab822562617f4cc1cdb61aecfa Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:28:38 +0200 Subject: [PATCH 31/64] PAGOPA-2227 update logic for dead letter wip --- .../exception/AppErrorCodeMessageEnum.java | 1 + .../model/ReceiptDeadLetterEntity.java | 25 +++++- .../model/enumz/InternalStepStatus.java | 2 + .../service/PaaInviaRTSenderService.java | 47 ++++------ .../wispconverter/service/ReceiptService.java | 86 +++++++++++++------ .../wispconverter/servicebus/RTConsumer.java | 2 + 6 files changed, 105 insertions(+), 58 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/exception/AppErrorCodeMessageEnum.java b/src/main/java/it/gov/pagopa/wispconverter/exception/AppErrorCodeMessageEnum.java index 81049072..bd412614 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/exception/AppErrorCodeMessageEnum.java +++ b/src/main/java/it/gov/pagopa/wispconverter/exception/AppErrorCodeMessageEnum.java @@ -46,6 +46,7 @@ public enum AppErrorCodeMessageEnum { RECEIPT_GENERATION_ANOMALY_ON_PROCESSING(1408, "Anomaly on receipt generation", "Error while generating receipt. The receipt, related to idempotency key [{0}], is of type [{1}] but the invoked endpoint require the send of a [{2}] receipt.", HttpStatus.CONFLICT, "An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error."), RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED(1409, "KO Receipt not generated", "Error while generating KO receipt. It is not possible to generate the receipt and it could be scheduled for a next send.", HttpStatus.UNPROCESSABLE_ENTITY, "An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs."), RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED(1410, "OK Receipt not generated", "Error while generating OK receipt. It is not possible to generate the receipt and it could be scheduled for a next send.", HttpStatus.UNPROCESSABLE_ENTITY, "An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs."), + RECEIPT_GENERATION_ERROR_DEAD_LETTER(1411, "Receipt generation not completed", "Error while generating receipt. The creditor institution sent an error response related to the sent RT: [Outcome: {0}, Fault code: {1}, Fault string: {2}, Fault description: {3}].", HttpStatus.UNPROCESSABLE_ENTITY, "An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container."), // --- DB and storage interaction errors --- PERSISTENCE_SAVING_RE_ERROR(2000, "Impossible to save event", "Error while trying to store an event in Registro Eventi. Impossible to store event: {0}.", HttpStatus.INTERNAL_SERVER_ERROR, "An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc)."), PERSISTENCE_RPT_NOT_FOUND(2001, "RPT not found", "Error while retrieving RPT. RPT with sessionId [{0}] not found.", HttpStatus.NOT_FOUND, "An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded."), diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java index a372f9bc..00097f4d 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java @@ -2,12 +2,15 @@ import com.azure.spring.data.cosmos.core.mapping.Container; import com.azure.spring.data.cosmos.core.mapping.PartitionKey; +import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptTypeEnum; import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import org.springframework.data.annotation.Id; +import java.util.List; + @Container(containerName = "receipt-dead-letter") @Data @ToString @@ -21,7 +24,27 @@ public class ReceiptDeadLetterEntity { @PartitionKey private String partitionKey; - private String faultCode; + private String domainId; + + private String iuv; + + private String ccp; + + private String sessionId; + + private String primitive; private String payload; + + private ReceiptTypeEnum receiptType; + + private String url; + + private String proxyAddress; + + private List headers; + + private Integer retry; + + private String idempotencyKey; } diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/InternalStepStatus.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/InternalStepStatus.java index df83bce5..62d0931d 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/InternalStepStatus.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/enumz/InternalStepStatus.java @@ -30,6 +30,8 @@ public enum InternalStepStatus { RT_SEND_RESCHEDULING_SUCCESS, RT_START_RECONCILIATION_PROCESS, RT_END_RECONCILIATION_PROCESS, + RT_DEAD_LETTER_SAVED, + RT_DEAD_LETTER_FAILED, RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND, RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER, RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND, diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index e579d1b5..ce55b89e 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -6,7 +6,6 @@ import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum; import it.gov.pagopa.wispconverter.exception.AppException; import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; -import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; import it.gov.pagopa.wispconverter.repository.model.enumz.ClientEnum; import it.gov.pagopa.wispconverter.repository.model.enumz.InternalStepStatus; import it.gov.pagopa.wispconverter.repository.model.enumz.OutcomeEnum; @@ -46,8 +45,6 @@ public class PaaInviaRTSenderService { private final JaxbElementUtil jaxbElementUtil; - private final ReceiptDeadLetterRepository receiptDeadLetterRepository; - @Value("#{'${wisp-converter.rt-send.no-dead-letter-on-states}'.split(',')}") private List noDeadLetterOnStates; @@ -71,7 +68,7 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L // Save an RE event in order to track the communication with creditor institution generateREForRequestToCreditorInstitution(uri.toString(), headers, payload); - // Communicating with creditor institution sending the paaInviaRT request + // Retrieving response from creditor institution paaInviaRT response ResponseEntity response = bodySpec.retrieve().toEntity(String.class); String bodyPayload = response.getBody(); @@ -82,36 +79,28 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L PaaInviaRTRisposta body = checkResponseValidity(response, bodyPayload); // check the response and if the outcome is KO, throw an exception - EsitoPaaInviaRT esitoPaaInviaRT = body.getPaaInviaRTRisposta(); + EsitoPaaInviaRT paaInviaRTRisposta = body.getPaaInviaRTRisposta(); // check the response if the dead letter sending is needed - boolean isSavedDeadLetter = checkIfSendDeadLetter(esitoPaaInviaRT); + boolean isSavedDeadLetter = checkIfSendDeadLetter(paaInviaRTRisposta); // set the correct response regarding the creditor institution response - if (Constants.KO.equals(esitoPaaInviaRT.getEsito())) { - rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); - if (isSavedDeadLetter) { - receiptDeadLetterRepository.save( - ReceiptDeadLetterEntity.builder() - .id(domainId + "_" + iuv + "_" + ccp) - .faultCode(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getFaultCode() : "ND") - .payload(esitoPaaInviaRT.getFault() != null ? esitoPaaInviaRT.getFault().getDescription() : "NO_FAULT_FIELDS_PRESENT") - .build() - ); - } - generateREForAlreadySentRtToCreditorInstitution(); - } else if (Constants.OK.equals(esitoPaaInviaRT.getEsito())) { + if (Constants.OK.equals(paaInviaRTRisposta.getEsito())) { rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT); generateREForAlreadySentRtToCreditorInstitution(); } else { - FaultBean fault = esitoPaaInviaRT.getFault(); - String faultCode = "ND"; - String faultString = "ND"; - String faultDescr = "ND"; - if (fault != null) { - faultCode = fault.getFaultCode(); - faultString = fault.getFaultString(); - faultDescr = fault.getDescription(); - } + rtReceiptCosmosService.updateReceiptStatus(domainId, iuv, ccp, ReceiptStatusEnum.SENT_REJECTED_BY_EC); + FaultBean fault = paaInviaRTRisposta.getFault(); + String faultCode = "ND"; + String faultString = "ND"; + String faultDescr = "ND"; + if (fault != null) { + faultCode = fault.getFaultCode(); + faultString = fault.getFaultString(); + faultDescr = fault.getDescription(); + } + if(isSavedDeadLetter) { + throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER, paaInviaRTRisposta.getEsito(), faultCode, faultString, faultDescr); + } throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION, faultCode, faultString, faultDescr); } @@ -155,7 +144,7 @@ private RestClient generateClient(InetSocketAddress proxyAddress) throws NoSuchA private PaaInviaRTRisposta checkResponseValidity(ResponseEntity response, String rawBody) { - // check the response received and, if is a 4xx or a 5xx HTTP error code throw an exception + // check the response received and, if the status code is not a 2xx code, it throws an exception if (!response.getStatusCode().is2xxSuccessful()) { throw new AppException(AppErrorCodeMessageEnum.CLIENT_PAAINVIART, "Error response: " + response.getStatusCode().value()); } diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java index d284ada1..0d6f5719 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java @@ -16,8 +16,10 @@ import it.gov.pagopa.gen.wispconverter.client.cache.model.StationDto; import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum; import it.gov.pagopa.wispconverter.exception.AppException; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.repository.model.RTRequestEntity; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; import it.gov.pagopa.wispconverter.repository.model.enumz.IdempotencyStatusEnum; import it.gov.pagopa.wispconverter.repository.model.enumz.InternalStepStatus; import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptStatusEnum; @@ -42,6 +44,8 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; +import java.io.DataInput; +import java.io.IOException; import java.math.BigDecimal; import java.net.InetSocketAddress; import java.net.URI; @@ -86,6 +90,8 @@ public class ReceiptService { private final ServiceBusService serviceBusService; + private final ReceiptDeadLetterRepository receiptDeadLetterRepository; + private final it.gov.pagopa.gen.wispconverter.client.decouplercaching.invoker.ApiClient decouplerCachingClient; private final ObjectMapper mapper; @@ -437,6 +443,14 @@ From station identifier (the common one defined, not the payment reference), ret String message = e.getMessage(); if (e instanceof AppException appException) { message = appException.getError().getDetail(); + if(appException.getError().equals(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER)) { + try { + RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, idempotencyKey, receiptType); + receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); + } catch (Exception ex) { + generateREForNotSavedDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_FAILED, receipt.toString()); + } + } } log.error("Exception: " + AppErrorCodeMessageEnum.RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED.getDetail()); @@ -582,34 +596,8 @@ public void scheduleRTSend(SessionDataDTO sessionData, URI uri, InetSocketAddres StationDto station, RPTContentDTO rpt, String noticeNumber, String idempotencyKey, ReceiptTypeEnum receiptType) { try { - - List formattedHeaders = new LinkedList<>(); - for (Pair header : headers) { - formattedHeaders.add(header.getFirst() + ":" + header.getSecond()); - } - - String proxy = null; - if (proxyAddress != null) { - proxy = String.format("%s:%s", proxyAddress.getHostString(), proxyAddress.getPort()); - } - // generate the RT to be persisted in storage, then save in the same storage - RTRequestEntity rtRequestEntity = RTRequestEntity.builder() - .id(station.getBrokerCode() + "_" + UUID.randomUUID()) - .domainId(rpt.getRpt().getDomain().getDomainId()) - .iuv(rpt.getIuv()) - .ccp(rpt.getCcp()) - .sessionId(sessionData.getCommonFields().getSessionId()) - .primitive(PAA_INVIA_RT) - .partitionKey(LocalDate.ofInstant(Instant.now(), ZoneId.systemDefault()).toString()) - .payload(AppBase64Util.base64Encode(ZipUtil.zip(payload))) - .url(uri.toString()) - .proxyAddress(proxy) - .headers(formattedHeaders) - .retry(0) - .idempotencyKey(idempotencyKey) - .receiptType(receiptType) - .build(); + RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionData, uri, proxyAddress, headers, payload, station, rpt, idempotencyKey, receiptType); rtRetryComosService.saveRTRequestEntity(rtRequestEntity); // after the RT persist, send a message on the service bus @@ -702,6 +690,15 @@ private void generateREForSendRTProcess(RPTContentDTO rptContent, String iuv, St generateRE(status, iuv, noticeNumber, rptContent.getCcp(), psp, info); } + private void generateREForNotSavedDeadLetter(RPTContentDTO rptContent, String noticeNumber, InternalStepStatus status, String info) { + + // extract psp on which the payment will be sent + String psp = rptContent.getRpt().getPayeeInstitution().getSubjectUniqueIdentifier().getCode(); + + // creating event to be persisted for RE + generateRE(status, rptContent.getIuv(), noticeNumber, rptContent.getCcp(), psp, info); + } + private void generateRE(InternalStepStatus status, String iuv, String noticeNumber, String ccp, String psp, String otherInfo) { // setting data in MDC for next use @@ -782,6 +779,8 @@ public void sendRTKoFromSessionId(String sessionId, InternalStepStatus internalS } catch (Exception e) { + //TODO: catch custom exception for dead letter, in case generate rt entity and put it in dead letter, otherwise it goes through + // generate a new event in RE for store the unsuccessful sending of the receipt String messageException = e.getMessage(); if (e instanceof AppException appException) { @@ -793,7 +792,7 @@ public void sendRTKoFromSessionId(String sessionId, InternalStepStatus internalS // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt scheduleRTSend(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, null, idempotencyKey, ReceiptTypeEnum.KO); - idempotencyStatus = IdempotencyStatusEnum.FAILED; + idempotencyStatus = IdempotencyStatusEnum.FAILED; // TODO: Maintain only this line for dead letter } try { @@ -805,4 +804,35 @@ public void sendRTKoFromSessionId(String sessionId, InternalStepStatus internalS } MDC.clear(); } + + private RTRequestEntity generateRTRequestEntity(SessionDataDTO sessionData, URI uri, InetSocketAddress proxyAddress, List> headers, String payload, + StationDto station, RPTContentDTO rpt, String idempotencyKey, ReceiptTypeEnum receiptType) throws IOException { + List formattedHeaders = new LinkedList<>(); + for (Pair header : headers) { + formattedHeaders.add(header.getFirst() + ":" + header.getSecond()); + } + + String proxy = null; + if (proxyAddress != null) { + proxy = String.format("%s:%s", proxyAddress.getHostString(), proxyAddress.getPort()); + } + + // generate the RT + return RTRequestEntity.builder() + .id(station.getBrokerCode() + "_" + UUID.randomUUID()) + .domainId(rpt.getRpt().getDomain().getDomainId()) + .iuv(rpt.getIuv()) + .ccp(rpt.getCcp()) + .sessionId(sessionData.getCommonFields().getSessionId()) + .primitive(PAA_INVIA_RT) + .partitionKey(LocalDate.ofInstant(Instant.now(), ZoneId.systemDefault()).toString()) + .payload(AppBase64Util.base64Encode(ZipUtil.zip(payload))) + .url(uri.toString()) + .proxyAddress(proxy) + .headers(formattedHeaders) + .retry(0) + .idempotencyKey(idempotencyKey) + .receiptType(receiptType) + .build(); + } } diff --git a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java index 081e7d3f..207ae68b 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java +++ b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java @@ -188,6 +188,8 @@ private boolean resendRTToCreditorInstitution(String receiptId, RTRequestEntity } catch (AppException e) { + //TODO: in case of dead letter catch custom excpetion and delete the item in the receipt collection like at line 182 + // generate a new event in RE for store the unsuccessful re-sending of the receipt generateREForNotSentRT(e); From 1125b94d47e58489b09e90e474b86a7c74d18fa9 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:50:46 +0200 Subject: [PATCH 32/64] PAGOPA-2227 dead letter wip --- .../wispconverter/service/ReceiptService.java | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java index 0d6f5719..4cb68fbe 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java @@ -1,6 +1,5 @@ package it.gov.pagopa.wispconverter.service; -import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import gov.telematici.pagamenti.ws.nodoperpa.ppthead.IntestazionePPT; @@ -43,8 +42,6 @@ import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; -import java.io.DataInput; import java.io.IOException; import java.math.BigDecimal; import java.net.InetSocketAddress; @@ -59,7 +56,6 @@ import java.util.UUID; import static it.gov.pagopa.wispconverter.util.Constants.PAA_INVIA_RT; -import static it.gov.pagopa.wispconverter.util.Constants.PPT_HEAD; @Service @Slf4j @@ -439,7 +435,6 @@ From station identifier (the common one defined, not the payment reference), ret } catch (Exception e) { - // generate a new event in RE for store the unsuccessful sending of the receipt String message = e.getMessage(); if (e instanceof AppException appException) { message = appException.getError().getDetail(); @@ -447,17 +442,22 @@ From station identifier (the common one defined, not the payment reference), ret try { RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, idempotencyKey, receiptType); receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); + generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_SAVED, receipt.toString()); } catch (Exception ex) { - generateREForNotSavedDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_FAILED, receipt.toString()); + generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_FAILED, receipt.toString()); } + } else { + // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt + scheduleRTSend(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, noticeNumber, idempotencyKey, receiptType); } + } else { + // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt + scheduleRTSend(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, noticeNumber, idempotencyKey, receiptType); } - + // generate a new event in RE for store the unsuccessful sending of the receipt log.error("Exception: " + AppErrorCodeMessageEnum.RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED.getDetail()); generateREForNotSentRT(rpt, iuv, noticeNumber, message); - // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt - scheduleRTSend(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, noticeNumber, idempotencyKey, receiptType); idempotencyStatus = IdempotencyStatusEnum.FAILED; } @@ -690,7 +690,7 @@ private void generateREForSendRTProcess(RPTContentDTO rptContent, String iuv, St generateRE(status, iuv, noticeNumber, rptContent.getCcp(), psp, info); } - private void generateREForNotSavedDeadLetter(RPTContentDTO rptContent, String noticeNumber, InternalStepStatus status, String info) { + private void generateREDeadLetter(RPTContentDTO rptContent, String noticeNumber, InternalStepStatus status, String info) { // extract psp on which the payment will be sent String psp = rptContent.getRpt().getPayeeInstitution().getSubjectUniqueIdentifier().getCode(); @@ -779,20 +779,32 @@ public void sendRTKoFromSessionId(String sessionId, InternalStepStatus internalS } catch (Exception e) { - //TODO: catch custom exception for dead letter, in case generate rt entity and put it in dead letter, otherwise it goes through - // generate a new event in RE for store the unsuccessful sending of the receipt - String messageException = e.getMessage(); + String message = e.getMessage(); if (e instanceof AppException appException) { - messageException = appException.getError().getDetail(); + message = appException.getError().getDetail(); + if(appException.getError().equals(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER)) { + try { + // generate element to be put in dead letter container + RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, idempotencyKey, ReceiptTypeEnum.KO); + receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); + generateREDeadLetter(rpt, null, InternalStepStatus.RT_DEAD_LETTER_SAVED, null); + } catch (Exception ex) { + generateREDeadLetter(rpt, null, InternalStepStatus.RT_DEAD_LETTER_FAILED, null); + } + } else { + // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt + scheduleRTSend(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, null, idempotencyKey, ReceiptTypeEnum.KO); + } + } else { + // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt + scheduleRTSend(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, null, idempotencyKey, ReceiptTypeEnum.KO); } log.error("Exception: " + AppErrorCodeMessageEnum.RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED.getDetail()); - generateREForNotSentRT(rpt, rpt.getIuv(), null, messageException); + generateREForNotSentRT(rpt, rpt.getIuv(), null, message); - // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt - scheduleRTSend(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, null, idempotencyKey, ReceiptTypeEnum.KO); - idempotencyStatus = IdempotencyStatusEnum.FAILED; // TODO: Maintain only this line for dead letter + idempotencyStatus = IdempotencyStatusEnum.FAILED; } try { From affd430c9774640fe05ad2bf73d0a219a057b7a7 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:12:19 +0200 Subject: [PATCH 33/64] PAGOPA-2227 dead letter final logic --- .../wispconverter/service/ReceiptService.java | 75 ++++++++++--------- .../wispconverter/servicebus/RTConsumer.java | 19 ++++- 2 files changed, 57 insertions(+), 37 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java index 4cb68fbe..2f0bc4b9 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java @@ -432,28 +432,30 @@ From station identifier (the common one defined, not the payment reference), ret generateREForSentRT(rpt, iuv, noticeNumber); idempotencyStatus = IdempotencyStatusEnum.SUCCESS; isSuccessful = true; - - } catch (Exception e) { - - String message = e.getMessage(); - if (e instanceof AppException appException) { - message = appException.getError().getDetail(); - if(appException.getError().equals(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER)) { - try { - RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, idempotencyKey, receiptType); - receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); - generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_SAVED, receipt.toString()); - } catch (Exception ex) { - generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_FAILED, receipt.toString()); - } - } else { - // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt - scheduleRTSend(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, noticeNumber, idempotencyKey, receiptType); + } catch (AppException e) { + String message = e.getError().getDetail(); + if(e.getError().equals(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER)) { + try { + RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, idempotencyKey, receiptType); + receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); + generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_SAVED, receipt.toString()); + } catch (IOException ex) { + generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_FAILED, receipt.toString()); } } else { // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt scheduleRTSend(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, noticeNumber, idempotencyKey, receiptType); + log.error("Exception: " + AppErrorCodeMessageEnum.RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED.getDetail()); + generateREForNotSentRT(rpt, iuv, noticeNumber, message); } + idempotencyStatus = IdempotencyStatusEnum.FAILED; + } catch (Exception e) { + + String message = e.getMessage(); + + // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt + scheduleRTSend(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, noticeNumber, idempotencyKey, receiptType); + // generate a new event in RE for store the unsuccessful sending of the receipt log.error("Exception: " + AppErrorCodeMessageEnum.RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED.getDetail()); generateREForNotSentRT(rpt, iuv, noticeNumber, message); @@ -776,30 +778,31 @@ public void sendRTKoFromSessionId(String sessionId, InternalStepStatus internalS // generate a new event in RE for store the successful sending of the receipt generateREForSentRT(rpt, rpt.getIuv(), null); idempotencyStatus = IdempotencyStatusEnum.SUCCESS; - - } catch (Exception e) { - - // generate a new event in RE for store the unsuccessful sending of the receipt - String message = e.getMessage(); - if (e instanceof AppException appException) { - message = appException.getError().getDetail(); - if(appException.getError().equals(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER)) { - try { - // generate element to be put in dead letter container - RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, idempotencyKey, ReceiptTypeEnum.KO); - receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); - generateREDeadLetter(rpt, null, InternalStepStatus.RT_DEAD_LETTER_SAVED, null); - } catch (Exception ex) { - generateREDeadLetter(rpt, null, InternalStepStatus.RT_DEAD_LETTER_FAILED, null); - } - } else { - // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt - scheduleRTSend(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, null, idempotencyKey, ReceiptTypeEnum.KO); + } catch (AppException e) { + String message = e.getError().getDetail(); + if(e.getError().equals(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER)) { + try { + RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionDataDTO, uri, proxyAddress, headers,rtRawPayload, station, rpt, idempotencyKey, ReceiptTypeEnum.KO); + receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); + generateREDeadLetter(rpt, null, InternalStepStatus.RT_DEAD_LETTER_SAVED, null); + } catch (IOException ex) { + generateREDeadLetter(rpt, null, InternalStepStatus.RT_DEAD_LETTER_FAILED, null); } } else { // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt scheduleRTSend(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, null, idempotencyKey, ReceiptTypeEnum.KO); + log.error("Exception: " + AppErrorCodeMessageEnum.RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED.getDetail()); + generateREForNotSentRT(rpt, iuv, null, message); } + idempotencyStatus = IdempotencyStatusEnum.FAILED; + + } catch (Exception e) { + + // generate a new event in RE for store the unsuccessful sending of the receipt + String message = e.getMessage(); + + // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt + scheduleRTSend(sessionDataDTO, uri, proxyAddress, headers, rtRawPayload, station, rpt, null, idempotencyKey, ReceiptTypeEnum.KO); log.error("Exception: " + AppErrorCodeMessageEnum.RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED.getDetail()); generateREForNotSentRT(rpt, rpt.getIuv(), null, message); diff --git a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java index 207ae68b..40d60efe 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java +++ b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java @@ -2,10 +2,13 @@ import com.azure.messaging.servicebus.ServiceBusReceivedMessage; import com.azure.messaging.servicebus.ServiceBusReceivedMessageContext; +import com.fasterxml.jackson.databind.ObjectMapper; import gov.telematici.pagamenti.ws.nodoperpa.ppthead.IntestazionePPT; import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum; import it.gov.pagopa.wispconverter.exception.AppException; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.RTRequestEntity; +import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; import it.gov.pagopa.wispconverter.repository.model.enumz.IdempotencyStatusEnum; import it.gov.pagopa.wispconverter.repository.model.enumz.InternalStepStatus; import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptStatusEnum; @@ -45,6 +48,8 @@ public class RTConsumer extends SBConsumer { @Value("${azure.sb.paaInviaRT.name}") private String queueName; + private final ObjectMapper mapper = new ObjectMapper(); + @Autowired private RtRetryComosService rtRetryComosService; @@ -60,6 +65,9 @@ public class RTConsumer extends SBConsumer { @Autowired private ServiceBusService serviceBusService; + @Autowired + private ReceiptDeadLetterRepository receiptDeadLetterRepository; + @Autowired private JaxbElementUtil jaxbElementUtil; @@ -188,7 +196,11 @@ private boolean resendRTToCreditorInstitution(String receiptId, RTRequestEntity } catch (AppException e) { - //TODO: in case of dead letter catch custom excpetion and delete the item in the receipt collection like at line 182 + if(e.getError().equals(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER)) { + // Sending dead letter in case of unknown status + receiptDeadLetterRepository.save(mapper.convertValue(receipt, ReceiptDeadLetterEntity.class)); + generateREForDeadLetter(receipt); + } // generate a new event in RE for store the unsuccessful re-sending of the receipt generateREForNotSentRT(e); @@ -277,4 +289,9 @@ private void generateREForMaxRetriesOnReschedulingSentRT(int retries) { generateRE(InternalStepStatus.RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES, "Reached max retries: [" + retries + "]."); } + private void generateREForDeadLetter(RTRequestEntity rtRequestEntity) { + + generateRE(InternalStepStatus.RT_DEAD_LETTER_SAVED, "Saved dead letter for receipt with iuv: " + rtRequestEntity.getIuv()+ ", domainId: " + rtRequestEntity.getDomainId() + ", ccp: " + rtRequestEntity.getCcp()); + } + } From af873a2bd7c1a636f9ee703b51b267e34ecfa524 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:23:57 +0200 Subject: [PATCH 34/64] PAGOPA-2227 fix junit tests --- openapi/openapi.json | 1473 ++++++++--------- openapi/openapi_redirect.json | 201 +-- .../service/PaaInviaRTSenderService.java | 1 - .../it/gov/pagopa/wispconverter/HomeTest.java | 4 +- .../wispconverter/OpenApiGenerationTest.java | 3 +- .../wispconverter/endpoint/CarrelloTest.java | 3 + .../endpoint/ConfigurationControllerTest.java | 4 +- .../wispconverter/endpoint/ReceiptTest.java | 3 + .../endpoint/ReceiptTimerTest.java | 3 + .../wispconverter/endpoint/RecoveryTest.java | 3 + .../wispconverter/endpoint/RptTest.java | 3 +- .../endpoint/StaticPagesTest.java | 3 + .../service/ConfigurationServiceTest.java | 3 +- .../service/PaaInviaRTSenderServiceTest.java | 39 +- 14 files changed, 811 insertions(+), 935 deletions(-) diff --git a/openapi/openapi.json b/openapi/openapi.json index 50604817..9b12ba39 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -1,1038 +1,921 @@ { - "openapi": "3.0.1", - "info": { - "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", - "termsOfService": "https://www.pagopa.gov.it/", - "title": "WISP Converter", - "version": "0.4.4-1-PAGOPA-2227" + "openapi" : "3.0.1", + "info" : { + "description" : "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", + "termsOfService" : "https://www.pagopa.gov.it/", + "title" : "WISP Converter", + "version" : "0.4.4-1-PAGOPA-2227" }, - "servers": [ - { - "url": "http://localhost", - "description": "Generated server url" - } - ], - "tags": [ - { - "description": "Application info APIs", - "name": "Home" - }, - { - "description": "Create and Delete payment token timer", - "name": "ReceiptTimer" - }, - { - "description": "ECs and Stations configuration", - "name": "Configuration" - }, - { - "description": "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", - "name": "Receipt" - }, - { - "description": "Create and Delete rpt timer", - "name": "RPTTimer" - }, - { - "description": "Conversion and redirection APIs", - "name": "Redirect" - }, - { - "description": "Recovery and reconciliation APIs", - "name": "Recovery" - } - ], - "paths": { - "/info": { - "get": { - "operationId": "healthCheck", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppInfoResponse" + "servers" : [ { + "url" : "http://localhost", + "description" : "Generated server url" + } ], + "tags" : [ { + "description" : "Application info APIs", + "name" : "Home" + }, { + "description" : "Create and Delete payment token timer", + "name" : "ReceiptTimer" + }, { + "description" : "ECs and Stations configuration", + "name" : "Configuration" + }, { + "description" : "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", + "name" : "Receipt" + }, { + "description" : "Create and Delete rpt timer", + "name" : "RPTTimer" + }, { + "description" : "Conversion and redirection APIs", + "name" : "Redirect" + }, { + "description" : "Recovery and reconciliation APIs", + "name" : "Recovery" + } ], + "paths" : { + "/info" : { + "get" : { + "operationId" : "healthCheck", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AppInfoResponse" } } }, - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return OK if application is started", - "tags": [ - "Home" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return OK if application is started", + "tags" : [ "Home" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/payments": { - "get": { - "operationId": "redirect", - "parameters": [ - { - "example": "identificativoIntermediarioPA_sessionId", - "in": "query", - "name": "idSession", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "302": { - "description": "Redirect to Checkout service.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/payments" : { + "get" : { + "operationId" : "redirect", + "parameters" : [ { + "example" : "identificativoIntermediarioPA_sessionId", + "in" : "query", + "name" : "idSession", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "302" : { + "description" : "Redirect to Checkout service.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Redirect" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Redirect" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/receipt": { - "get": { - "operationId": "receiptRetrieve", - "parameters": [ - { - "in": "query", - "name": "ci", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "ccp", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "iuv", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "type": "string" + "/receipt" : { + "get" : { + "operationId" : "receiptRetrieve", + "parameters" : [ { + "in" : "query", + "name" : "ci", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "ccp", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "iuv", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "type" : "string" } } }, - "description": "Receipt exists", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Receipt exists", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/receipt/ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/receipt/ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "receiptKo", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" + } ], + "post" : { + "operationId" : "receiptKo", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "string" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully forwarded negative paaInviaRT to EC", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully forwarded negative paaInviaRT to EC", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] } }, - "/receipt/ok": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/receipt/ok" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "receiptOk", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiptRequest" + } ], + "post" : { + "operationId" : "receiptOk", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ReceiptRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully forwarded positive paaInviaRT to EC", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully forwarded positive paaInviaRT to EC", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] } }, - "/receipt/timer": { - "delete": { - "description": "Delete a timer by paymentToken", - "operationId": "deleteTimer_1", - "parameters": [ - { - "in": "query", - "name": "paymentTokens", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully paymentToken expiration timer deleted", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/receipt/timer" : { + "delete" : { + "description" : "Delete a timer by paymentToken", + "operationId" : "deleteTimer_1", + "parameters" : [ { + "in" : "query", + "name" : "paymentTokens", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "Successfully paymentToken expiration timer deleted", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "deleteTimer", - "tags": [ - "ReceiptTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "deleteTimer", + "tags" : [ "ReceiptTimer" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Create a timer linked with paymentToken and receipt data", - "operationId": "createTimer_1", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiptTimerRequest" + } ], + "post" : { + "description" : "Create a timer linked with paymentToken and receipt data", + "operationId" : "createTimer_1", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ReceiptTimerRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully paymentToken expiration timer created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully paymentToken expiration timer created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "createTimer", - "tags": [ - "ReceiptTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "createTimer", + "tags" : [ "ReceiptTimer" ] } }, - "/recovery/proxy": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/receipts" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all receipts in the request, searching by passed identifier", - "operationId": "recoverReceiptToBeSentByProxy", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RecoveryProxyReceiptRequest" + } ], + "post" : { + "description" : "Execute reconciliation of all receipts in the request, searching by passed identifier", + "operationId" : "recoverReceiptToBeReSent", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryProxyReceiptResponse" + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptReportResponse" } } }, - "description": "Reconciliation completed", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Reconciliation completed", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute reconciliation for passed receipts.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute reconciliation for passed receipts.", + "tags" : [ "Recovery" ] } }, - "/recovery/{creditor_institution}/receipt-ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/{creditor_institution}/receipt-ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId": "recoverReceiptKOForCreditorInstitution", - "parameters": [ - { - "in": "path", - "name": "creditor_institution", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "dateFrom", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "dateTo", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptResponse" + } ], + "post" : { + "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId" : "recoverReceiptKOForCreditorInstitution", + "parameters" : [ { + "in" : "path", + "name" : "creditor_institution", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateFrom", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateTo", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" } } }, - "description": "Started reconciling IUVs with explicit RT send", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Started reconciling IUVs with explicit RT send", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute IUV reconciliation for certain creditor institution.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute IUV reconciliation for certain creditor institution.", + "tags" : [ "Recovery" ] } }, - "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId": "recoverReceiptKOForCreditorInstitutionAndIUV", - "parameters": [ - { - "in": "path", - "name": "creditor_institution", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,100}", - "type": "string" - } - }, - { - "in": "path", - "name": "iuv", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,100}", - "type": "string" - } - }, - { - "in": "query", - "name": "dateFrom", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,10}", - "type": "string" - } - }, - { - "in": "query", - "name": "dateTo", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,10}", - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptResponse" + } ], + "post" : { + "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId" : "recoverReceiptKOForCreditorInstitutionAndIUV", + "parameters" : [ { + "in" : "path", + "name" : "creditor_institution", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,100}", + "type" : "string" + } + }, { + "in" : "path", + "name" : "iuv", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,100}", + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateFrom", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,10}", + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateTo", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,10}", + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" } } }, - "description": "Completed IUV reconciliation with explicit RT submission", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Completed IUV reconciliation with explicit RT submission", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "400": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptResponse" + "400" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" } } }, - "description": "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute IUV reconciliation for certain creditor institution.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute IUV reconciliation for certain creditor institution.", + "tags" : [ "Recovery" ] } }, - "/rpt/timer": { - "delete": { - "description": "Delete a timer by sessionId", - "operationId": "deleteTimer", - "parameters": [ - { - "in": "query", - "name": "sessionId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully rpt timer deleted", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/rpt/timer" : { + "delete" : { + "description" : "Delete a timer by sessionId", + "operationId" : "deleteTimer", + "parameters" : [ { + "in" : "query", + "name" : "sessionId", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "Successfully rpt timer deleted", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "deleteRPTTimer", - "tags": [ - "RPTTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "deleteRPTTimer", + "tags" : [ "RPTTimer" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Create a timer from sessionId data", - "operationId": "createTimer", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RPTTimerRequest" + } ], + "post" : { + "description" : "Create a timer from sessionId data", + "operationId" : "createTimer", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RPTTimerRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully rpt timer created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully rpt timer created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "createRPTTimer", - "tags": [ - "RPTTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "createRPTTimer", + "tags" : [ "RPTTimer" ] } }, - "/whitelist/cis": { - "get": { - "operationId": "getCreditorInstitutions", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "/whitelist/cis" : { + "get" : { + "operationId" : "getCreditorInstitutions", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for EC retrieved.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for EC retrieved.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "404" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for EC not found.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for EC not found.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return the string containing all creditor institutions for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return the string containing all creditor institutions for the wisp converter logic", + "tags" : [ "Configuration" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "createCreditorInstitutionsConfiguration", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + } ], + "post" : { + "operationId" : "createCreditorInstitutionsConfiguration", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "201": { - "description": "Created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "201" : { + "description" : "Created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Create the string containing all creditor institutions for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Create the string containing all creditor institutions for the wisp converter logic", + "tags" : [ "Configuration" ] } }, - "/whitelist/stations": { - "get": { - "operationId": "getStations", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "/whitelist/stations" : { + "get" : { + "operationId" : "getStations", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for Stations retrieved.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for Stations retrieved.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "404" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for Stations not found.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for Stations not found.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return the string containing all stations for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return the string containing all stations for the wisp converter logic", + "tags" : [ "Configuration" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "createStationsConfiguration", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + } ], + "post" : { + "operationId" : "createStationsConfiguration", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "201": { - "description": "Created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "201" : { + "description" : "Created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Create the string containing all stations for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Create the string containing all stations for the wisp converter logic", + "tags" : [ "Configuration" ] } } }, - "components": { - "schemas": { - "AppInfoResponse": { - "type": "object", - "properties": { - "environment": { - "type": "string" + "components" : { + "schemas" : { + "AppInfoResponse" : { + "type" : "object", + "properties" : { + "environment" : { + "type" : "string" }, - "name": { - "type": "string" + "name" : { + "type" : "string" }, - "version": { - "type": "string" + "version" : { + "type" : "string" } } }, - "ConfigurationModel": { - "type": "object", - "properties": { - "key": { - "type": "string" + "ConfigurationModel" : { + "type" : "object", + "properties" : { + "key" : { + "type" : "string" } } }, - "PairStringString": { - "type": "object", - "properties": { - "first": { - "type": "string" + "PairStringString" : { + "type" : "object", + "properties" : { + "first" : { + "type" : "string" }, - "second": { - "type": "string" + "second" : { + "type" : "string" } } }, - "RPTTimerRequest": { - "type": "object", - "properties": { - "sessionId": { - "type": "string" + "RPTTimerRequest" : { + "type" : "object", + "properties" : { + "sessionId" : { + "type" : "string" } } }, - "ReceiptRequest": { - "type": "object", - "properties": { - "content": { - "type": "string" + "ReceiptRequest" : { + "type" : "object", + "properties" : { + "content" : { + "type" : "string" } } }, - "ReceiptTimerRequest": { - "type": "object", - "properties": { - "expirationTime": { - "type": "integer", - "format": "int64" + "ReceiptTimerRequest" : { + "type" : "object", + "properties" : { + "expirationTime" : { + "type" : "integer", + "format" : "int64" }, - "fiscalCode": { - "pattern": "\\w*", - "type": "string" + "fiscalCode" : { + "pattern" : "\\w*", + "type" : "string" }, - "noticeNumber": { - "pattern": "\\d*", - "type": "string" + "noticeNumber" : { + "pattern" : "\\d*", + "type" : "string" }, - "paymentToken": { - "type": "string" + "paymentToken" : { + "type" : "string" } } }, - "RecoveryProxyReceiptRequest": { - "type": "object", - "properties": { - "receiptIds": { - "type": "array", - "items": { - "type": "string" - } + "RecoveryReceiptPaymentResponse" : { + "type" : "object", + "properties" : { + "ccp" : { + "type" : "string" + }, + "ci" : { + "type" : "string" + }, + "iuv" : { + "type" : "string" } } }, - "RecoveryProxyReceiptResponse": { - "type": "object", - "properties": { - "receiptStatus": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PairStringString" + "RecoveryReceiptReportResponse" : { + "type" : "object", + "properties" : { + "receiptStatus" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/PairStringString" } } } }, - "RecoveryReceiptPaymentResponse": { - "type": "object", - "properties": { - "ccp": { - "type": "string" - }, - "ci": { - "type": "string" - }, - "iuv": { - "type": "string" + "RecoveryReceiptRequest" : { + "type" : "object", + "properties" : { + "receiptIds" : { + "type" : "array", + "items" : { + "type" : "string" + } } } }, - "RecoveryReceiptResponse": { - "type": "object", - "properties": { - "payments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RecoveryReceiptPaymentResponse" + "RecoveryReceiptResponse" : { + "type" : "object", + "properties" : { + "payments" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/RecoveryReceiptPaymentResponse" } } } } }, - "securitySchemes": { - "ApiKey": { - "description": "The API key to access this function app.", - "in": "header", - "name": "Ocp-Apim-Subscription-Key", - "type": "apiKey" + "securitySchemes" : { + "ApiKey" : { + "description" : "The API key to access this function app.", + "in" : "header", + "name" : "Ocp-Apim-Subscription-Key", + "type" : "apiKey" } } } -} +} \ No newline at end of file diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 4debfc53..8943e685 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -1,142 +1,123 @@ { - "openapi": "3.0.1", - "info": { - "title": "WISP-Converter-redirect", - "version": "0.4.4-1-PAGOPA-2227" + "openapi" : "3.0.1", + "info" : { + "title" : "WISP-Converter-redirect", + "version" : "0.4.4-1-PAGOPA-2227" }, - "servers": [ - { - "url": "http://localhost", - "description": "Generated server url" - } - ], - "tags": [ - { - "description": "Application info APIs", - "name": "Home" - }, - { - "description": "Conversion and redirection APIs", - "name": "Redirect" - } - ], - "paths": { - "/info": { - "get": { - "operationId": "healthCheck", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppInfoResponse" + "servers" : [ { + "url" : "http://localhost", + "description" : "Generated server url" + } ], + "tags" : [ { + "description" : "Application info APIs", + "name" : "Home" + }, { + "description" : "Conversion and redirection APIs", + "name" : "Redirect" + } ], + "paths" : { + "/info" : { + "get" : { + "operationId" : "healthCheck", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AppInfoResponse" } } }, - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return OK if application is started", - "tags": [ - "Home" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return OK if application is started", + "tags" : [ "Home" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/payments": { - "get": { - "operationId": "redirect", - "parameters": [ - { - "example": "identificativoIntermediarioPA_sessionId", - "in": "query", - "name": "idSession", - "required": true, - "schema": { - "type": "string" - } + "/payments" : { + "get" : { + "operationId" : "redirect", + "parameters" : [ { + "example" : "identificativoIntermediarioPA_sessionId", + "in" : "query", + "name" : "idSession", + "required" : true, + "schema" : { + "type" : "string" } - ], - "responses": { - "302": { - "description": "Redirect to Checkout service.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + } ], + "responses" : { + "302" : { + "description" : "Redirect to Checkout service.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Redirect" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Redirect" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] } }, - "components": { - "schemas": { - "AppInfoResponse": { - "type": "object", - "properties": { - "environment": { - "type": "string" + "components" : { + "schemas" : { + "AppInfoResponse" : { + "type" : "object", + "properties" : { + "environment" : { + "type" : "string" }, - "name": { - "type": "string" + "name" : { + "type" : "string" }, - "version": { - "type": "string" + "version" : { + "type" : "string" } } } }, - "securitySchemes": { - "ApiKey": { - "description": "The API key to access this function app.", - "in": "header", - "name": "Ocp-Apim-Subscription-Key", - "type": "apiKey" + "securitySchemes" : { + "ApiKey" : { + "description" : "The API key to access this function app.", + "in" : "header", + "name" : "Ocp-Apim-Subscription-Key", + "type" : "apiKey" } } } -} +} \ No newline at end of file diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index ce55b89e..0fdcec00 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -5,7 +5,6 @@ import gov.telematici.pagamenti.ws.papernodo.PaaInviaRTRisposta; import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum; import it.gov.pagopa.wispconverter.exception.AppException; -import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.enumz.ClientEnum; import it.gov.pagopa.wispconverter.repository.model.enumz.InternalStepStatus; import it.gov.pagopa.wispconverter.repository.model.enumz.OutcomeEnum; diff --git a/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java b/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java index 3128bce9..25c14b49 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/HomeTest.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.controller.model.AppInfoResponse; -import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; @@ -42,7 +42,7 @@ class HomeTest { private RecoveryService recoveryService; @MockBean - private PaaInviaRTSenderService paaInviaRTSenderService; + private ReceiptDeadLetterRepository receiptDeadLetterRepository; @Test diff --git a/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java b/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java index ce9b80f3..8b883270 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/OpenApiGenerationTest.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.controller.RedirectController; import it.gov.pagopa.wispconverter.repository.*; -import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; @@ -52,7 +51,7 @@ class OpenApiGenerationTest { private RecoveryService recoveryService; @MockBean - private PaaInviaRTSenderService paaInviaRTSenderService; + private ReceiptDeadLetterRepository receiptDeadLetterRepository; @Test void swaggerSpringPlugin() throws Exception { diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java index 6cfe3179..55f0b8b7 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/CarrelloTest.java @@ -5,6 +5,7 @@ import it.gov.pagopa.gen.wispconverter.client.iuvgenerator.model.IUVGenerationResponseDto; import it.gov.pagopa.wispconverter.Application; import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; @@ -72,6 +73,8 @@ class CarrelloTest { private RecoveryService recoveryService; @MockBean private PaaInviaRTSenderService paaInviaRTSenderService; + @MockBean + private ReceiptDeadLetterRepository receiptDeadLetterRepository; @Test void success() throws Exception { diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java index a0cb07a1..41a5dd28 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ConfigurationControllerTest.java @@ -3,8 +3,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.Application; import it.gov.pagopa.wispconverter.controller.model.ConfigurationModel; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.service.ConfigurationService; -import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.RecoveryService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -30,7 +30,7 @@ class ConfigurationControllerTest { private RecoveryService recoveryService; @MockBean - private PaaInviaRTSenderService paaInviaRTSenderService; + private ReceiptDeadLetterRepository receiptDeadLetterRepository; @Autowired private MockMvc mvc; diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java index a7bbec70..faad6d18 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java @@ -8,6 +8,7 @@ import it.gov.pagopa.wispconverter.exception.AppException; import it.gov.pagopa.wispconverter.repository.CacheRepository; import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; @@ -59,6 +60,8 @@ class ReceiptTest { private CacheRepository cacheRepository; @MockBean RecoveryService recoveryService; + @MockBean + ReceiptDeadLetterRepository receiptDeadLetterRepository; private String getPaSendRTPayload() { return TestUtils.loadFileContent("/requests/paSendRTV2.xml"); diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTimerTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTimerTest.java index cbada2a3..c62bceb0 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTimerTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTimerTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.Application; import it.gov.pagopa.wispconverter.controller.model.ReceiptTimerRequest; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.service.*; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -46,6 +47,8 @@ public class ReceiptTimerTest { private ReceiptService receiptService; @MockBean private RecoveryService recoveryService; + @MockBean + private ReceiptDeadLetterRepository receiptDeadLetterRepository; /* * CREATE receipt/timer diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RecoveryTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RecoveryTest.java index f1f5bff7..e90af8b2 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RecoveryTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RecoveryTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.Application; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.service.*; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; @@ -40,6 +41,8 @@ class RecoveryTest { private RecoveryService recoveryService; @MockBean private ReceiptService receiptService; + @MockBean + private ReceiptDeadLetterRepository receiptDeadLetterRepository; @Test void testRecoverReceiptKOForCreditorInstitution() throws Exception { diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java index 92c434d5..be10ea47 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java @@ -8,6 +8,7 @@ import it.gov.pagopa.wispconverter.Application; import it.gov.pagopa.wispconverter.repository.CacheRepository; import it.gov.pagopa.wispconverter.repository.RPTRequestRepository; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; @@ -81,7 +82,7 @@ class RptTest { @MockBean private RecoveryService recoveryService; @MockBean - private PaaInviaRTSenderService paaInviaRTSenderService; + private ReceiptDeadLetterRepository receiptDeadLetterRepository; private void setConfigCacheStoredData(String servicePath, int primitiveVersion) { StationCreditorInstitutionDto stationCreditorInstitutionDto = new StationCreditorInstitutionDto(); diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/StaticPagesTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/StaticPagesTest.java index 7edb027f..ecd5fb94 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/StaticPagesTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/StaticPagesTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import it.gov.pagopa.wispconverter.Application; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.service.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +36,8 @@ public class StaticPagesTest { private RecoveryService recoveryService; @MockBean private ReceiptService receiptService; + @MockBean + private ReceiptDeadLetterRepository receiptDeadLetterRepository; /* * GET static/error diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java index bd4e7f7c..70ec141f 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/ConfigurationServiceTest.java @@ -2,6 +2,7 @@ import it.gov.pagopa.wispconverter.controller.model.ConfigurationModel; import it.gov.pagopa.wispconverter.repository.ConfigurationRepository; +import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.ConfigurationEntity; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -29,7 +30,7 @@ class ConfigurationServiceTest { @MockBean private RecoveryService recoveryService; @MockBean - private PaaInviaRTSenderService paaInviaRTSenderService; + private ReceiptDeadLetterRepository receiptDeadLetterRepository; @Autowired @InjectMocks diff --git a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java index bfca7cc2..17322f90 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderServiceTest.java @@ -1,8 +1,7 @@ package it.gov.pagopa.wispconverter.service; +import it.gov.pagopa.wispconverter.exception.AppErrorCodeMessageEnum; import it.gov.pagopa.wispconverter.exception.AppException; -import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; -import it.gov.pagopa.wispconverter.repository.model.ReceiptDeadLetterEntity; import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptStatusEnum; import it.gov.pagopa.wispconverter.util.JaxbElementUtil; import org.junit.jupiter.api.Test; @@ -15,8 +14,7 @@ import java.util.Arrays; import java.util.List; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -31,7 +29,6 @@ void esitoOK() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); - ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); @@ -49,7 +46,7 @@ void esitoOK() { when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); org.springframework.test.util.ReflectionTestUtils.setField(p, "jaxbElementUtil", new JaxbElementUtil()); p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); assertTrue(true); @@ -62,7 +59,6 @@ void esitoKONoDeadLetter() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); - ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); @@ -79,13 +75,15 @@ void esitoKONoDeadLetter() { when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); - p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "12345678910", "02345678998765432", "CCP_TEST"); - assertTrue(true); - verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT_REJECTED_BY_EC)); - verify(receiptDeadLetterRepository, times(0)).save(any(ReceiptDeadLetterEntity.class)); + try { + p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); + fail(); + } catch (AppException e){ + assertEquals(e.getError(), AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION); + } } @Test @@ -94,7 +92,6 @@ void esitoKODeadLetter() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); - ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); @@ -111,13 +108,15 @@ void esitoKODeadLetter() { when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); - p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); - assertTrue(true); - verify(rtReceiptCosmosService, times(1)).updateReceiptStatus(any(String.class), any(String.class), any(String.class), eq(ReceiptStatusEnum.SENT_REJECTED_BY_EC)); - verify(receiptDeadLetterRepository, times(1)).save(any(ReceiptDeadLetterEntity.class)); + try { + p.sendToCreditorInstitution(URI.create("http://pagopa.mock.dev/"), null, List.of(Pair.of("soapaction", "paaInviaRT")), "", "", "", ""); + fail(); + } catch (AppException e){ + assertEquals(e.getError(), AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER); + } } @Test @@ -126,7 +125,6 @@ void esitoKORescheduled() { ReService reService = mock(ReService.class); JaxbElementUtil jaxbElementUtil = new JaxbElementUtil(); RtReceiptCosmosService rtReceiptCosmosService = mock(RtReceiptCosmosService.class); - ReceiptDeadLetterRepository receiptDeadLetterRepository = mock(ReceiptDeadLetterRepository.class); RestClient client = mock(RestClient.class); when(builder.build()).thenReturn(client); RestClient.RequestBodyUriSpec requestBodyUriSpec = mock(RestClient.RequestBodyUriSpec.class); @@ -143,7 +141,7 @@ void esitoKORescheduled() { when(responseSpec.toEntity(String.class)) .thenReturn(ResponseEntity.ok().body(paaInviaRTRisposta)); - PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil, receiptDeadLetterRepository); + PaaInviaRTSenderService p = new PaaInviaRTSenderService(builder, reService, rtReceiptCosmosService, jaxbElementUtil); List noDeadLetterOnStates = Arrays.stream("PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR".split(",")).toList(); ReflectionTestUtils.setField(p, "noDeadLetterOnStates", noDeadLetterOnStates); try { @@ -152,6 +150,5 @@ void esitoKORescheduled() { } catch (AppException e){ assertTrue(true); } - verify(receiptDeadLetterRepository, times(0)).save(any(ReceiptDeadLetterEntity.class)); } } From 5f9c433502041a369c548617cad5630e65a6a51c Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Thu, 10 Oct 2024 16:24:42 +0200 Subject: [PATCH 35/64] PAGOPA-2227 removing unused import --- src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java index be10ea47..b60790c1 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/RptTest.java @@ -11,7 +11,6 @@ import it.gov.pagopa.wispconverter.repository.ReceiptDeadLetterRepository; import it.gov.pagopa.wispconverter.repository.model.RPTRequestEntity; import it.gov.pagopa.wispconverter.service.ConfigCacheService; -import it.gov.pagopa.wispconverter.service.PaaInviaRTSenderService; import it.gov.pagopa.wispconverter.service.ReceiptService; import it.gov.pagopa.wispconverter.service.RecoveryService; import it.gov.pagopa.wispconverter.service.model.re.ReEventDto; From 12570b79505948cd36a7e69414f663dba080a5fb Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 11 Oct 2024 09:50:48 +0200 Subject: [PATCH 36/64] PAGOPA-2227 fixing comments --- .../repository/model/RTRequestEntity.java | 4 +- .../model/ReceiptDeadLetterEntity.java | 42 ++----------------- .../service/PaaInviaRTSenderService.java | 1 + .../wispconverter/service/ReceiptService.java | 5 ++- 4 files changed, 10 insertions(+), 42 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java index e6aebd18..619a21b8 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java @@ -3,10 +3,10 @@ import com.azure.spring.data.cosmos.core.mapping.Container; import com.azure.spring.data.cosmos.core.mapping.PartitionKey; import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptTypeEnum; -import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import lombok.experimental.SuperBuilder; import org.springframework.data.annotation.Id; import java.util.List; @@ -15,7 +15,7 @@ @Data @ToString(exclude = "payload") @EqualsAndHashCode(exclude = "payload") -@Builder(toBuilder = true) +@SuperBuilder(toBuilder = true) public class RTRequestEntity { @Id diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java index 00097f4d..4bca4f0d 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java @@ -1,50 +1,16 @@ package it.gov.pagopa.wispconverter.repository.model; import com.azure.spring.data.cosmos.core.mapping.Container; -import com.azure.spring.data.cosmos.core.mapping.PartitionKey; -import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptTypeEnum; -import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; -import org.springframework.data.annotation.Id; - -import java.util.List; +import lombok.experimental.SuperBuilder; @Container(containerName = "receipt-dead-letter") @Data @ToString -@EqualsAndHashCode -@Builder(toBuilder = true) -public class ReceiptDeadLetterEntity { - - @Id - private String id; - - @PartitionKey - private String partitionKey; - - private String domainId; - - private String iuv; - - private String ccp; - - private String sessionId; - - private String primitive; - - private String payload; - - private ReceiptTypeEnum receiptType; - - private String url; - - private String proxyAddress; - - private List headers; - - private Integer retry; +@EqualsAndHashCode(callSuper=false) +@SuperBuilder(toBuilder = true) +public class ReceiptDeadLetterEntity extends RTRequestEntity { - private String idempotencyKey; } diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java index 0fdcec00..046ffb87 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/PaaInviaRTSenderService.java @@ -98,6 +98,7 @@ public void sendToCreditorInstitution(URI uri, InetSocketAddress proxyAddress, L faultDescr = fault.getDescription(); } if(isSavedDeadLetter) { + // throw to move receipt to dead letter container throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_DEAD_LETTER, paaInviaRTRisposta.getEsito(), faultCode, faultString, faultDescr); } throw new AppException(AppErrorCodeMessageEnum.RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION, faultCode, faultString, faultDescr); diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java index 2f0bc4b9..cdc9c0aa 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java @@ -438,9 +438,9 @@ From station identifier (the common one defined, not the payment reference), ret try { RTRequestEntity rtRequestEntity = generateRTRequestEntity(sessionData, uri, proxyAddress, headers, receiptContentDTO.getPaaInviaRTPayload(), station, rpt, idempotencyKey, receiptType); receiptDeadLetterRepository.save(mapper.convertValue(rtRequestEntity, ReceiptDeadLetterEntity.class)); - generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_SAVED, receipt.toString()); + generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_SAVED, null); } catch (IOException ex) { - generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_FAILED, receipt.toString()); + generateREDeadLetter(rpt, noticeNumber, InternalStepStatus.RT_DEAD_LETTER_FAILED, ex.getMessage()); } } else { // because of the not sent receipt, it is necessary to schedule a retry of the sending process for this receipt @@ -848,6 +848,7 @@ private RTRequestEntity generateRTRequestEntity(SessionDataDTO sessionData, URI .retry(0) .idempotencyKey(idempotencyKey) .receiptType(receiptType) + .station(station.getStationCode()) .build(); } } From 71afe75c7fa79331acbe2ec2ec857e30e4621d4c Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:04:36 +0200 Subject: [PATCH 37/64] PAGOPA-2227 removing duplicate from helm string --- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 3a17ce64..9771d804 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -98,7 +98,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '1' - RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index a2bd29f4..4e8b2338 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -117,7 +117,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index d4494a38..81c48199 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -98,7 +98,7 @@ microservice-chart: STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day From e557e9754a45c5317e1de69d1c67817ab1cd4cde Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 08:09:34 +0000 Subject: [PATCH 38/64] Bump to version 0.4.4-2-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 +- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 1467 ++++++++++++++++++--------------- openapi/openapi_redirect.json | 201 +++-- pom.xml | 2 +- 7 files changed, 908 insertions(+), 772 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index fd51d201..448df6af 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.223.0 -appVersion: 0.4.4-1-PAGOPA-2227 +version: 0.224.0 +appVersion: 0.4.4-2-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 9771d804..0da2ccb7 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-1-PAGOPA-2227" + tag: "0.4.4-2-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 4e8b2338..f7f6defb 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-1-PAGOPA-2227" + tag: "0.4.4-2-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 81c48199..e1b52de3 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-1-PAGOPA-2227" + tag: "0.4.4-2-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 9b12ba39..d29f52c1 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -1,921 +1,1038 @@ { - "openapi" : "3.0.1", - "info" : { - "description" : "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", - "termsOfService" : "https://www.pagopa.gov.it/", - "title" : "WISP Converter", - "version" : "0.4.4-1-PAGOPA-2227" + "openapi": "3.0.1", + "info": { + "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", + "termsOfService": "https://www.pagopa.gov.it/", + "title": "WISP Converter", + "version": "0.4.4-2-release-v0.4.x" }, - "servers" : [ { - "url" : "http://localhost", - "description" : "Generated server url" - } ], - "tags" : [ { - "description" : "Application info APIs", - "name" : "Home" - }, { - "description" : "Create and Delete payment token timer", - "name" : "ReceiptTimer" - }, { - "description" : "ECs and Stations configuration", - "name" : "Configuration" - }, { - "description" : "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", - "name" : "Receipt" - }, { - "description" : "Create and Delete rpt timer", - "name" : "RPTTimer" - }, { - "description" : "Conversion and redirection APIs", - "name" : "Redirect" - }, { - "description" : "Recovery and reconciliation APIs", - "name" : "Recovery" - } ], - "paths" : { - "/info" : { - "get" : { - "operationId" : "healthCheck", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AppInfoResponse" + "servers": [ + { + "url": "http://localhost", + "description": "Generated server url" + } + ], + "tags": [ + { + "description": "Application info APIs", + "name": "Home" + }, + { + "description": "Create and Delete payment token timer", + "name": "ReceiptTimer" + }, + { + "description": "ECs and Stations configuration", + "name": "Configuration" + }, + { + "description": "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", + "name": "Receipt" + }, + { + "description": "Create and Delete rpt timer", + "name": "RPTTimer" + }, + { + "description": "Conversion and redirection APIs", + "name": "Redirect" + }, + { + "description": "Recovery and reconciliation APIs", + "name": "Recovery" + } + ], + "paths": { + "/info": { + "get": { + "operationId": "healthCheck", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppInfoResponse" } } }, - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return OK if application is started", - "tags" : [ "Home" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return OK if application is started", + "tags": [ + "Home" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/payments" : { - "get" : { - "operationId" : "redirect", - "parameters" : [ { - "example" : "identificativoIntermediarioPA_sessionId", - "in" : "query", - "name" : "idSession", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "302" : { - "description" : "Redirect to Checkout service.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/payments": { + "get": { + "operationId": "redirect", + "parameters": [ + { + "example": "identificativoIntermediarioPA_sessionId", + "in": "query", + "name": "idSession", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "302": { + "description": "Redirect to Checkout service.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Redirect" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Redirect" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/receipt" : { - "get" : { - "operationId" : "receiptRetrieve", - "parameters" : [ { - "in" : "query", - "name" : "ci", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "ccp", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "iuv", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "type" : "string" + "/receipt": { + "get": { + "operationId": "receiptRetrieve", + "parameters": [ + { + "in": "query", + "name": "ci", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "ccp", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "iuv", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "type": "string" } } }, - "description" : "Receipt exists", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Receipt exists", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/receipt/ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/receipt/ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "receiptKo", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "string" + ], + "post": { + "operationId": "receiptKo", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully forwarded negative paaInviaRT to EC", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully forwarded negative paaInviaRT to EC", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] } }, - "/receipt/ok" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/receipt/ok": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "receiptOk", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ReceiptRequest" + ], + "post": { + "operationId": "receiptOk", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReceiptRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully forwarded positive paaInviaRT to EC", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully forwarded positive paaInviaRT to EC", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] } }, - "/receipt/timer" : { - "delete" : { - "description" : "Delete a timer by paymentToken", - "operationId" : "deleteTimer_1", - "parameters" : [ { - "in" : "query", - "name" : "paymentTokens", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "Successfully paymentToken expiration timer deleted", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/receipt/timer": { + "delete": { + "description": "Delete a timer by paymentToken", + "operationId": "deleteTimer_1", + "parameters": [ + { + "in": "query", + "name": "paymentTokens", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully paymentToken expiration timer deleted", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "deleteTimer", - "tags" : [ "ReceiptTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "deleteTimer", + "tags": [ + "ReceiptTimer" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Create a timer linked with paymentToken and receipt data", - "operationId" : "createTimer_1", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ReceiptTimerRequest" + ], + "post": { + "description": "Create a timer linked with paymentToken and receipt data", + "operationId": "createTimer_1", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReceiptTimerRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully paymentToken expiration timer created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully paymentToken expiration timer created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "createTimer", - "tags" : [ "ReceiptTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "createTimer", + "tags": [ + "ReceiptTimer" + ] } }, - "/recovery/receipts" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/receipts": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all receipts in the request, searching by passed identifier", - "operationId" : "recoverReceiptToBeReSent", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptRequest" + ], + "post": { + "description": "Execute reconciliation of all receipts in the request, searching by passed identifier", + "operationId": "recoverReceiptToBeReSent", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptReportResponse" + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptReportResponse" } } }, - "description" : "Reconciliation completed", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Reconciliation completed", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute reconciliation for passed receipts.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute reconciliation for passed receipts.", + "tags": [ + "Recovery" + ] } }, - "/recovery/{creditor_institution}/receipt-ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/{creditor_institution}/receipt-ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId" : "recoverReceiptKOForCreditorInstitution", - "parameters" : [ { - "in" : "path", - "name" : "creditor_institution", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateFrom", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateTo", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + ], + "post": { + "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId": "recoverReceiptKOForCreditorInstitution", + "parameters": [ + { + "in": "path", + "name": "creditor_institution", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "dateFrom", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "dateTo", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "Started reconciling IUVs with explicit RT send", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Started reconciling IUVs with explicit RT send", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute IUV reconciliation for certain creditor institution.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute IUV reconciliation for certain creditor institution.", + "tags": [ + "Recovery" + ] } }, - "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId" : "recoverReceiptKOForCreditorInstitutionAndIUV", - "parameters" : [ { - "in" : "path", - "name" : "creditor_institution", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,100}", - "type" : "string" - } - }, { - "in" : "path", - "name" : "iuv", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,100}", - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateFrom", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,10}", - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateTo", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,10}", - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + ], + "post": { + "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId": "recoverReceiptKOForCreditorInstitutionAndIUV", + "parameters": [ + { + "in": "path", + "name": "creditor_institution", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,100}", + "type": "string" + } + }, + { + "in": "path", + "name": "iuv", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,100}", + "type": "string" + } + }, + { + "in": "query", + "name": "dateFrom", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,10}", + "type": "string" + } + }, + { + "in": "query", + "name": "dateTo", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,10}", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "Completed IUV reconciliation with explicit RT submission", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Completed IUV reconciliation with explicit RT submission", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "400" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute IUV reconciliation for certain creditor institution.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute IUV reconciliation for certain creditor institution.", + "tags": [ + "Recovery" + ] } }, - "/rpt/timer" : { - "delete" : { - "description" : "Delete a timer by sessionId", - "operationId" : "deleteTimer", - "parameters" : [ { - "in" : "query", - "name" : "sessionId", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "Successfully rpt timer deleted", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/rpt/timer": { + "delete": { + "description": "Delete a timer by sessionId", + "operationId": "deleteTimer", + "parameters": [ + { + "in": "query", + "name": "sessionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully rpt timer deleted", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "deleteRPTTimer", - "tags" : [ "RPTTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "deleteRPTTimer", + "tags": [ + "RPTTimer" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Create a timer from sessionId data", - "operationId" : "createTimer", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RPTTimerRequest" + ], + "post": { + "description": "Create a timer from sessionId data", + "operationId": "createTimer", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RPTTimerRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully rpt timer created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully rpt timer created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "createRPTTimer", - "tags" : [ "RPTTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "createRPTTimer", + "tags": [ + "RPTTimer" + ] } }, - "/whitelist/cis" : { - "get" : { - "operationId" : "getCreditorInstitutions", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "/whitelist/cis": { + "get": { + "operationId": "getCreditorInstitutions", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for EC retrieved.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for EC retrieved.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "404" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "404": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for EC not found.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for EC not found.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return the string containing all creditor institutions for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return the string containing all creditor institutions for the wisp converter logic", + "tags": [ + "Configuration" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "createCreditorInstitutionsConfiguration", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + ], + "post": { + "operationId": "createCreditorInstitutionsConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "201" : { - "description" : "Created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "201": { + "description": "Created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Create the string containing all creditor institutions for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Create the string containing all creditor institutions for the wisp converter logic", + "tags": [ + "Configuration" + ] } }, - "/whitelist/stations" : { - "get" : { - "operationId" : "getStations", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "/whitelist/stations": { + "get": { + "operationId": "getStations", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for Stations retrieved.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for Stations retrieved.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "404" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "404": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for Stations not found.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for Stations not found.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return the string containing all stations for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return the string containing all stations for the wisp converter logic", + "tags": [ + "Configuration" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "createStationsConfiguration", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + ], + "post": { + "operationId": "createStationsConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "201" : { - "description" : "Created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "201": { + "description": "Created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Create the string containing all stations for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Create the string containing all stations for the wisp converter logic", + "tags": [ + "Configuration" + ] } } }, - "components" : { - "schemas" : { - "AppInfoResponse" : { - "type" : "object", - "properties" : { - "environment" : { - "type" : "string" + "components": { + "schemas": { + "AppInfoResponse": { + "type": "object", + "properties": { + "environment": { + "type": "string" }, - "name" : { - "type" : "string" + "name": { + "type": "string" }, - "version" : { - "type" : "string" + "version": { + "type": "string" } } }, - "ConfigurationModel" : { - "type" : "object", - "properties" : { - "key" : { - "type" : "string" + "ConfigurationModel": { + "type": "object", + "properties": { + "key": { + "type": "string" } } }, - "PairStringString" : { - "type" : "object", - "properties" : { - "first" : { - "type" : "string" + "PairStringString": { + "type": "object", + "properties": { + "first": { + "type": "string" }, - "second" : { - "type" : "string" + "second": { + "type": "string" } } }, - "RPTTimerRequest" : { - "type" : "object", - "properties" : { - "sessionId" : { - "type" : "string" + "RPTTimerRequest": { + "type": "object", + "properties": { + "sessionId": { + "type": "string" } } }, - "ReceiptRequest" : { - "type" : "object", - "properties" : { - "content" : { - "type" : "string" + "ReceiptRequest": { + "type": "object", + "properties": { + "content": { + "type": "string" } } }, - "ReceiptTimerRequest" : { - "type" : "object", - "properties" : { - "expirationTime" : { - "type" : "integer", - "format" : "int64" + "ReceiptTimerRequest": { + "type": "object", + "properties": { + "expirationTime": { + "type": "integer", + "format": "int64" }, - "fiscalCode" : { - "pattern" : "\\w*", - "type" : "string" + "fiscalCode": { + "pattern": "\\w*", + "type": "string" }, - "noticeNumber" : { - "pattern" : "\\d*", - "type" : "string" + "noticeNumber": { + "pattern": "\\d*", + "type": "string" }, - "paymentToken" : { - "type" : "string" + "paymentToken": { + "type": "string" } } }, - "RecoveryReceiptPaymentResponse" : { - "type" : "object", - "properties" : { - "ccp" : { - "type" : "string" + "RecoveryReceiptPaymentResponse": { + "type": "object", + "properties": { + "ccp": { + "type": "string" }, - "ci" : { - "type" : "string" + "ci": { + "type": "string" }, - "iuv" : { - "type" : "string" + "iuv": { + "type": "string" } } }, - "RecoveryReceiptReportResponse" : { - "type" : "object", - "properties" : { - "receiptStatus" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/PairStringString" + "RecoveryReceiptReportResponse": { + "type": "object", + "properties": { + "receiptStatus": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PairStringString" } } } }, - "RecoveryReceiptRequest" : { - "type" : "object", - "properties" : { - "receiptIds" : { - "type" : "array", - "items" : { - "type" : "string" + "RecoveryReceiptRequest": { + "type": "object", + "properties": { + "receiptIds": { + "type": "array", + "items": { + "type": "string" } } } }, - "RecoveryReceiptResponse" : { - "type" : "object", - "properties" : { - "payments" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/RecoveryReceiptPaymentResponse" + "RecoveryReceiptResponse": { + "type": "object", + "properties": { + "payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RecoveryReceiptPaymentResponse" } } } } }, - "securitySchemes" : { - "ApiKey" : { - "description" : "The API key to access this function app.", - "in" : "header", - "name" : "Ocp-Apim-Subscription-Key", - "type" : "apiKey" + "securitySchemes": { + "ApiKey": { + "description": "The API key to access this function app.", + "in": "header", + "name": "Ocp-Apim-Subscription-Key", + "type": "apiKey" } } } -} \ No newline at end of file +} diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 8943e685..fb1ee7ba 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -1,123 +1,142 @@ { - "openapi" : "3.0.1", - "info" : { - "title" : "WISP-Converter-redirect", - "version" : "0.4.4-1-PAGOPA-2227" + "openapi": "3.0.1", + "info": { + "title": "WISP-Converter-redirect", + "version": "0.4.4-2-release-v0.4.x" }, - "servers" : [ { - "url" : "http://localhost", - "description" : "Generated server url" - } ], - "tags" : [ { - "description" : "Application info APIs", - "name" : "Home" - }, { - "description" : "Conversion and redirection APIs", - "name" : "Redirect" - } ], - "paths" : { - "/info" : { - "get" : { - "operationId" : "healthCheck", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AppInfoResponse" + "servers": [ + { + "url": "http://localhost", + "description": "Generated server url" + } + ], + "tags": [ + { + "description": "Application info APIs", + "name": "Home" + }, + { + "description": "Conversion and redirection APIs", + "name": "Redirect" + } + ], + "paths": { + "/info": { + "get": { + "operationId": "healthCheck", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppInfoResponse" } } }, - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return OK if application is started", - "tags" : [ "Home" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return OK if application is started", + "tags": [ + "Home" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/payments" : { - "get" : { - "operationId" : "redirect", - "parameters" : [ { - "example" : "identificativoIntermediarioPA_sessionId", - "in" : "query", - "name" : "idSession", - "required" : true, - "schema" : { - "type" : "string" + "/payments": { + "get": { + "operationId": "redirect", + "parameters": [ + { + "example": "identificativoIntermediarioPA_sessionId", + "in": "query", + "name": "idSession", + "required": true, + "schema": { + "type": "string" + } } - } ], - "responses" : { - "302" : { - "description" : "Redirect to Checkout service.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + ], + "responses": { + "302": { + "description": "Redirect to Checkout service.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Redirect" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Redirect" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] } }, - "components" : { - "schemas" : { - "AppInfoResponse" : { - "type" : "object", - "properties" : { - "environment" : { - "type" : "string" + "components": { + "schemas": { + "AppInfoResponse": { + "type": "object", + "properties": { + "environment": { + "type": "string" }, - "name" : { - "type" : "string" + "name": { + "type": "string" }, - "version" : { - "type" : "string" + "version": { + "type": "string" } } } }, - "securitySchemes" : { - "ApiKey" : { - "description" : "The API key to access this function app.", - "in" : "header", - "name" : "Ocp-Apim-Subscription-Key", - "type" : "apiKey" + "securitySchemes": { + "ApiKey": { + "description": "The API key to access this function app.", + "in": "header", + "name": "Ocp-Apim-Subscription-Key", + "type": "apiKey" } } } -} \ No newline at end of file +} diff --git a/pom.xml b/pom.xml index 38537761..9af867f2 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4-1-PAGOPA-2227 + 0.4.4-2-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 69022193be52d7f159e64c62685b2ce3597037fa Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 08:10:33 +0000 Subject: [PATCH 39/64] Bump to version 0.4.4-3-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 448df6af..d2ee3cd2 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.224.0 -appVersion: 0.4.4-2-release-v0.4.x +version: 0.225.0 +appVersion: 0.4.4-3-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 0da2ccb7..5d504bd9 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-2-release-v0.4.x" + tag: "0.4.4-3-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index f7f6defb..ccdf51c5 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-2-release-v0.4.x" + tag: "0.4.4-3-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index e1b52de3..ad732c37 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-2-release-v0.4.x" + tag: "0.4.4-3-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index d29f52c1..483b667c 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.4-2-release-v0.4.x" + "version": "0.4.4-3-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index fb1ee7ba..91c90ee1 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.4-2-release-v0.4.x" + "version": "0.4.4-3-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 9af867f2..e4f8b801 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4-2-release-v0.4.x + 0.4.4-3-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 52bba9d5883255b60ff466b2b4f3f0192160a7ae Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 08:29:47 +0000 Subject: [PATCH 40/64] Bump to version 0.4.4-4-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index d2ee3cd2..723d26d9 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.225.0 -appVersion: 0.4.4-3-release-v0.4.x +version: 0.226.0 +appVersion: 0.4.4-4-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 5d504bd9..3cb283c5 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-3-release-v0.4.x" + tag: "0.4.4-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index ccdf51c5..9532a0a2 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-3-release-v0.4.x" + tag: "0.4.4-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index ad732c37..f7120a3c 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-3-release-v0.4.x" + tag: "0.4.4-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 483b667c..0a5177a6 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.4-3-release-v0.4.x" + "version": "0.4.4-4-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 91c90ee1..a6a3668a 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.4-3-release-v0.4.x" + "version": "0.4.4-4-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index e4f8b801..fb6d8338 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4-3-release-v0.4.x + 0.4.4-4-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 20bda7524cc0f3ff01d0f46fc2176a540d4e8e55 Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 08:31:23 +0000 Subject: [PATCH 41/64] Bump to version 0.4.4-5-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 723d26d9..be868346 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.226.0 -appVersion: 0.4.4-4-release-v0.4.x +version: 0.227.0 +appVersion: 0.4.4-5-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 3cb283c5..90157e1e 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-4-release-v0.4.x" + tag: "0.4.4-5-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 9532a0a2..6a152279 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-4-release-v0.4.x" + tag: "0.4.4-5-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index f7120a3c..458c33fe 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-4-release-v0.4.x" + tag: "0.4.4-5-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 0a5177a6..89199f9c 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.4-4-release-v0.4.x" + "version": "0.4.4-5-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index a6a3668a..a30cc267 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.4-4-release-v0.4.x" + "version": "0.4.4-5-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index fb6d8338..f9977740 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4-4-release-v0.4.x + 0.4.4-5-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From db250b1db118466445069e7c31d0c61454827a70 Mon Sep 17 00:00:00 2001 From: Angelo Caporaso <56113767+cap-ang@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:32:44 +0200 Subject: [PATCH 42/64] [PAGOPA-2113] ci: Add wisp converter cron replica (#131) Co-authored-by: pagopa-github-bot --- helm/Chart.lock | 7 ++- helm/Chart.yaml | 8 +++- helm/values-dev.yaml | 48 ++++++++++++++++--- helm/values-prod.yaml | 46 +++++++++++++++--- helm/values-uat.yaml | 46 +++++++++++++++--- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- .../scheduler/RecoveryScheduler.java | 4 +- 9 files changed, 137 insertions(+), 28 deletions(-) diff --git a/helm/Chart.lock b/helm/Chart.lock index 63942226..f3739387 100644 --- a/helm/Chart.lock +++ b/helm/Chart.lock @@ -2,5 +2,8 @@ dependencies: - name: microservice-chart repository: https://pagopa.github.io/aks-microservice-chart-blueprint version: 3.0.0 -digest: sha256:47c6b74ce3ca60c2d4eee8e65c65597e5f62fb420653fcaec310eaa51b472413 -generated: "2024-04-09T17:12:54.285532+02:00" +- name: microservice-chart + repository: https://pagopa.github.io/aks-microservice-chart-blueprint + version: 3.0.0 +digest: sha256:054952d2271feb275decce7d04d04de803455f4eb23f7654d74225da68424db4 +generated: "2024-10-03T10:05:37.640461+02:00" diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 88b28e7d..1c026b26 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,9 +2,13 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.222.0 -appVersion: 0.4.4 +version: 0.223.0 +appVersion: 0.4.4-1-update-chart-for-cron dependencies: - name: microservice-chart version: 3.0.0 repository: "https://pagopa.github.io/aks-microservice-chart-blueprint" + - name: microservice-chart + version: 3.0.0 + repository: "https://pagopa.github.io/aks-microservice-chart-blueprint" + alias: cron diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 3cff477f..ffd1d3de 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -1,10 +1,10 @@ -microservice-chart: +microservice-chart: µservice-chart namespace: "nodo" nameOverride: "" fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4" + tag: "0.4.4-1-update-chart-for-cron" pullPolicy: Always livenessProbe: httpGet: @@ -27,7 +27,7 @@ microservice-chart: type: ClusterIP ports: - 8080 - ingress: + ingress: &ingress create: true host: "weudev.nodo.internal.dev.platform.pagopa.it" path: /pagopa-wisp-converter(/|$)(.*) @@ -42,7 +42,7 @@ microservice-chart: type: RuntimeDefault securityContext: allowPrivilegeEscalation: false - resources: + resources: &resources requests: memory: "256Mi" cpu: "0.15" @@ -61,7 +61,7 @@ microservice-chart: # Required type: Utilization # Allowed types are 'Utilization' or 'AverageValue' value: "75" - envConfig: + envConfig: &envConfig WEBSITE_SITE_NAME: 'pagopawispconverter' # required to show cloud role name in application insights ENV: 'aks-dev' APP_LOGGING_LEVEL: 'DEBUG' @@ -100,7 +100,7 @@ microservice-chart: RT_SEND_SCHEDULING_TIME_IN_MINUTES: '1' RT_SEND_AVOID_SCHEDULING_ON_STATES: 'PAA_RT_DUPLICATA' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" - CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' + CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every CRON_JOB_SCHEDULE_RECOVERY_FROM_HOURS_AGO: '2' # from 2 hours ago CRON_JOB_SCHEDULE_RECOVERY_UNTIL_HOURS_AGO: '1' # until 1 hours ago @@ -118,7 +118,7 @@ microservice-chart: SPRING_PROFILES_ACTIVE: "default,jsonLog" secretProvider: create: true - envSecrets: + envSecrets: &envSecret # required APPLICATIONINSIGHTS_CONNECTION_STRING: 'azure-insight-connection-string' SERVICE_BUS_PAYMENT_TIMEOUT_QUEUE_CONNECTION_STRING: 'wisp-payment-timeout-queue-connection-string' @@ -170,3 +170,37 @@ microservice-chart: pullPolicy: Always envConfig: {} envSecret: {} +# 1 - wisp converter service +app: + !!merge <<: *microservice-chart + ingress: + !!merge <<: *ingress + resources: + !!merge <<: *resources + envConfig: + !!merge <<: *envConfig + envSecret: + !!merge <<: *envSecret +# 2 - wisp converter cron +cron: + !!merge <<: *microservice-chart + ingress: + !!merge <<: *ingress + path: /pagopa-wisp-converter-notused/(.*) + resources: + !!merge <<: *resources + requests: + memory: "256Mi" + cpu: "0.15" + limits: + memory: "768Mi" + cpu: "0.25" + autoscaling: + enable: true + minReplica: 1 + maxReplica: 1 + envConfig: + !!merge <<: *envConfig + CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' + envSecret: + !!merge <<: *envSecret diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 823d61a2..9abb54bc 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -1,10 +1,10 @@ -microservice-chart: +microservice-chart: µservice-chart namespace: "nodo" nameOverride: "" fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4" + tag: "0.4.4-1-update-chart-for-cron" pullPolicy: Always livenessProbe: httpGet: @@ -27,7 +27,7 @@ microservice-chart: type: ClusterIP ports: - 8080 - ingress: + ingress: &ingress create: true host: "weuprod.nodo.internal.platform.pagopa.it" path: /pagopa-wisp-converter(/|$)(.*) @@ -42,7 +42,7 @@ microservice-chart: type: RuntimeDefault securityContext: allowPrivilegeEscalation: false - resources: + resources: &resources requests: memory: "640Mi" cpu: "200m" @@ -79,7 +79,7 @@ microservice-chart: - type: Percent value: 100 periodSeconds: 20 - envConfig: + envConfig: &envConfig JAVA_OPTS: "-XX:MaxHeapSize=1780m -XX:MinHeapSize=64m" WEBSITE_SITE_NAME: 'pagopawispconverter' # required to show cloud role name in application insights ENV: 'aks-prod' @@ -137,7 +137,7 @@ microservice-chart: SPRING_PROFILES_ACTIVE: "default,jsonLog" secretProvider: create: true - envSecrets: + envSecrets: &envSecret # required APPLICATIONINSIGHTS_CONNECTION_STRING: 'azure-insight-connection-string' SERVICE_BUS_PAYMENT_TIMEOUT_QUEUE_CONNECTION_STRING: 'wisp-payment-timeout-queue-connection-string' @@ -189,3 +189,37 @@ microservice-chart: pullPolicy: Always envConfig: {} envSecret: {} +# 1 - wisp converter service +app: + !!merge <<: *microservice-chart + ingress: + !!merge <<: *ingress + resources: + !!merge <<: *resources + envConfig: + !!merge <<: *envConfig + envSecret: + !!merge <<: *envSecret +# 2 - wisp converter cron +cron: + !!merge <<: *microservice-chart + ingress: + !!merge <<: *ingress + path: /pagopa-wisp-converter-notused/(.*) + resources: + !!merge <<: *resources + requests: + memory: "640Mi" + cpu: "0.20" + limits: + memory: "2048Mi" + cpu: "0.50" + autoscaling: + enable: true + minReplica: 1 + maxReplica: 1 + envConfig: + !!merge <<: *envConfig + CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' + envSecret: + !!merge <<: *envSecret diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 05fde70b..9999afcd 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -1,10 +1,10 @@ -microservice-chart: +microservice-chart: µservice-chart namespace: "nodo" nameOverride: "" fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4" + tag: "0.4.4-1-update-chart-for-cron" pullPolicy: Always livenessProbe: httpGet: @@ -27,7 +27,7 @@ microservice-chart: type: ClusterIP ports: - 8080 - ingress: + ingress: &ingress create: true host: "weuuat.nodo.internal.uat.platform.pagopa.it" path: /pagopa-wisp-converter(/|$)(.*) @@ -42,7 +42,7 @@ microservice-chart: type: RuntimeDefault securityContext: allowPrivilegeEscalation: false - resources: + resources: &resources requests: memory: "512Mi" cpu: "0.25" @@ -61,7 +61,7 @@ microservice-chart: # Required type: Utilization # Allowed types are 'Utilization' or 'AverageValue' value: "75" - envConfig: + envConfig: &envConfig WEBSITE_SITE_NAME: 'pagopawispconverter' # required to show cloud role name in application insights ENV: 'aks-uat' APP_LOGGING_LEVEL: 'INFO' @@ -118,7 +118,7 @@ microservice-chart: SPRING_PROFILES_ACTIVE: "default,jsonLog" secretProvider: create: true - envSecrets: + envSecrets: &envSecret # required APPLICATIONINSIGHTS_CONNECTION_STRING: 'azure-insight-connection-string' SERVICE_BUS_PAYMENT_TIMEOUT_QUEUE_CONNECTION_STRING: 'wisp-payment-timeout-queue-connection-string' @@ -170,3 +170,37 @@ microservice-chart: pullPolicy: Always envConfig: {} envSecret: {} +# 1 - wisp converter service +app: + !!merge <<: *microservice-chart + ingress: + !!merge <<: *ingress + resources: + !!merge <<: *resources + envConfig: + !!merge <<: *envConfig + envSecret: + !!merge <<: *envSecret +# 2 - wisp converter cron +cron: + !!merge <<: *microservice-chart + ingress: + !!merge <<: *ingress + path: /pagopa-wisp-converter-notused/(.*) + resources: + !!merge <<: *resources + requests: + memory: "256Mi" + cpu: "0.15" + limits: + memory: "768Mi" + cpu: "0.25" + autoscaling: + enable: true + minReplica: 1 + maxReplica: 1 + envConfig: + !!merge <<: *envConfig + CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' + envSecret: + !!merge <<: *envSecret diff --git a/openapi/openapi.json b/openapi/openapi.json index 1b2aac48..24860d24 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.4" + "version": "0.4.4-1-update-chart-for-cron" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 94af6989..0af88921 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.4" + "version": "0.4.4-1-update-chart-for-cron" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 0e83a1b7..5bff83b0 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4 + 0.4.4-1-update-chart-for-cron pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. diff --git a/src/main/java/it/gov/pagopa/wispconverter/scheduler/RecoveryScheduler.java b/src/main/java/it/gov/pagopa/wispconverter/scheduler/RecoveryScheduler.java index 549f2fce..b1a73705 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/scheduler/RecoveryScheduler.java +++ b/src/main/java/it/gov/pagopa/wispconverter/scheduler/RecoveryScheduler.java @@ -42,13 +42,13 @@ public RecoveryScheduler(RecoveryService recoveryService) { public void recoverReceiptKOCronJob() { ZonedDateTime dateFrom = ZonedDateTime.now(ZoneOffset.UTC).minusHours(fromHoursAgo); ZonedDateTime dateTo = ZonedDateTime.now(ZoneOffset.UTC).minusHours(untilHoursAgo); - log.info("[WISP-Recovery][Scheduled] Reconciliation Cron: recoverReceiptKOCronJob running at {}, for recover stale RPT from {} to {}", + log.info("[WISP-Recovery][Scheduled][Start] Reconciliation Cron: recoverReceiptKOCronJob running at {}, for recover stale RPT from {} to {}", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()), dateFrom, dateTo); int missingRTRecovered = this.recoveryService.recoverReceiptKOByDate(dateFrom, dateTo).getPayments().size(); int missingRedirectRecovered = this.recoveryService.recoverMissingRedirect(dateFrom, dateTo); - log.info("[WISP-Recovery][Scheduled] Reconciliation Cron: recoverReceiptKOCronJob {} receipt-ko sent", missingRedirectRecovered + missingRTRecovered); + log.info("[WISP-Recovery][Scheduled][Stop] Reconciliation Cron: recoverReceiptKOCronJob {} receipt-ko sent", missingRedirectRecovered + missingRTRecovered); this.threadOfExecution = Thread.currentThread(); } } From 89dd1f8666ec3323cb35c485c5a16ad7c9ef3b10 Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 10:33:37 +0000 Subject: [PATCH 43/64] Bump to version 0.4.5 [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 1c026b26..91f31bd2 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.223.0 -appVersion: 0.4.4-1-update-chart-for-cron +version: 0.224.0 +appVersion: 0.4.5 dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index ffd1d3de..d9f2ae5f 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-1-update-chart-for-cron" + tag: "0.4.5" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 9abb54bc..18378d76 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-1-update-chart-for-cron" + tag: "0.4.5" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 9999afcd..f97077a2 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.4-1-update-chart-for-cron" + tag: "0.4.5" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 24860d24..c1e07a75 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.4-1-update-chart-for-cron" + "version": "0.4.5" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 0af88921..f76d9938 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.4-1-update-chart-for-cron" + "version": "0.4.5" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 5bff83b0..c1114a65 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.4-1-update-chart-for-cron + 0.4.5 pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From a8399fc2904b4acf9734c45998a4098ebc90ba9c Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:39:58 +0200 Subject: [PATCH 44/64] sanitize input in recovery controller --- .../pagopa/wispconverter/controller/RecoveryController.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/controller/RecoveryController.java b/src/main/java/it/gov/pagopa/wispconverter/controller/RecoveryController.java index 03b19059..1f3a487a 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/controller/RecoveryController.java +++ b/src/main/java/it/gov/pagopa/wispconverter/controller/RecoveryController.java @@ -24,6 +24,8 @@ import org.springframework.web.ErrorResponse; import org.springframework.web.bind.annotation.*; +import static it.gov.pagopa.wispconverter.util.CommonUtility.sanitizeInput; + @RestController @RequestMapping("/recovery") @Validated @@ -98,7 +100,7 @@ public ResponseEntity recoverReceiptKOForCreditorInstit @PostMapping(value = "/receipts") public ResponseEntity recoverReceiptToBeReSent(@RequestBody RecoveryReceiptRequest request) { try { - log.info("Invoking API operation recoverReceiptToBeReSent - args: {}", request); + log.info("Invoking API operation recoverReceiptToBeReSent - args: {}", sanitizeInput(request.toString())); return ResponseEntity.ok(recoveryService.recoverReceiptToBeReSent(request)); } catch (Exception ex) { String operationId = MDC.get(Constants.MDC_OPERATION_ID); @@ -117,7 +119,7 @@ public ResponseEntity recoverReceiptToBeReSent(@R @PostMapping(value = "/partitions") public ResponseEntity recoverReceiptToBeReSentByPartition(@RequestBody RecoveryReceiptByPartitionRequest request) { try { - log.info("Invoking API operation recoverReceiptToBeReSentByPartition - args: {}", request); + log.info("Invoking API operation recoverReceiptToBeReSentByPartition - args: {}", sanitizeInput(request.toString())); return ResponseEntity.ok(recoveryService.recoverReceiptToBeReSentByPartition(request)); } catch (Exception ex) { String operationId = MDC.get(Constants.MDC_OPERATION_ID); From be21d0d85a761a4d023975e19a8d99f00cd1d11d Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 10:53:02 +0000 Subject: [PATCH 45/64] Bump to version 0.4.5-1-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 91f31bd2..8128fc04 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.224.0 -appVersion: 0.4.5 +version: 0.225.0 +appVersion: 0.4.5-1-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 28bb44a2..5ff4c18a 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5" + tag: "0.4.5-1-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 906315ac..6606092a 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5" + tag: "0.4.5-1-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 2ef41c4b..16978e86 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5" + tag: "0.4.5-1-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 91e7ac96..b54c4a76 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.5" + "version": "0.4.5-1-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index f76d9938..8f43a22d 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.5" + "version": "0.4.5-1-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index b40b8bb4..be238a62 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5 + 0.4.5-1-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From c434b4070cc2f0ca06c1986e5206728f3735e234 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:57:50 +0200 Subject: [PATCH 46/64] changing apim path uat --- helm/values-uat.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 16978e86..eac6c052 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -82,7 +82,7 @@ microservice-chart: µservice-chart RECEIPT_TIMER_QUEUE_NAME: "nodo_wisp_payment_timeout_queue" ECOMMERCE_HANG_TIMER_QUEUE_NAME: "nodo_wisp_ecommerce_hang_timeout_queue" ECOMMERCE_HANG_TIMEOUT: '1800' - APIM_PATH: 'platform.pagopa.it' + APIM_PATH: 'api.uat.platform.pagopa.it' CACHED_REQUESTID_MAPPING_TTL_MINUTES: "1440" CACHE_REFRESH_CRON: "0 */60 * * * *" CLIENT_GPD_READ_TIMEOUT: '5000' From ec69a5f4bc0c9b970cd4f30c6ad53a9fbb9ee94b Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Fri, 11 Oct 2024 15:59:04 +0200 Subject: [PATCH 47/64] added url and header override in recovery receipt, added allargs to RTRequestEntity --- .../repository/model/RTRequestEntity.java | 4 ++++ .../service/RecoveryService.java | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java index 619a21b8..881bdd18 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java @@ -3,8 +3,10 @@ import com.azure.spring.data.cosmos.core.mapping.Container; import com.azure.spring.data.cosmos.core.mapping.PartitionKey; import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptTypeEnum; +import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.SuperBuilder; import org.springframework.data.annotation.Id; @@ -16,6 +18,8 @@ @ToString(exclude = "payload") @EqualsAndHashCode(exclude = "payload") @SuperBuilder(toBuilder = true) +@AllArgsConstructor +@NoArgsConstructor public class RTRequestEntity { @Id diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/RecoveryService.java b/src/main/java/it/gov/pagopa/wispconverter/service/RecoveryService.java index 95f22299..99a635dc 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/RecoveryService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/RecoveryService.java @@ -52,6 +52,11 @@ @RequiredArgsConstructor public class RecoveryService { + @Value("${wisp-converter.station-in-forwarder.partial-path}") + private String stationInForwarderPartialPath; + + @Value("${wisp-converter.forwarder.api-key}") + private String forwarderSubscriptionKey; private static final String RPT_ACCETTATA_NODO = "RPT_ACCETTATA_NODO"; private static final String STATUS_RT_SEND_SUCCESS = "RT_SEND_SUCCESS"; @@ -306,6 +311,9 @@ public RecoveryReceiptReportResponse recoverReceiptToBeReSent(RecoveryReceiptReq stationConnection.getPort().intValue(), station.getService() != null ? station.getService().getPath() : "" ); + rtRequestEntity.setUrl(uri.toString()); + rtRequestEntity.setHeaders(generateHeader(uri, station)); + InetSocketAddress proxyAddress = CommonUtility.constructProxyAddress(uri, station, apimPath); if (proxyAddress != null) { rtRequestEntity.setProxyAddress(String.format("%s:%s", proxyAddress.getHostString(), proxyAddress.getPort())); @@ -340,7 +348,7 @@ public RecoveryReceiptReportResponse recoverReceiptToBeReSent(RecoveryReceiptReq rtRequestEntity.setId(overriddenReceiptId); rtRequestEntity.setDomainId(domainId); rtRequestEntity.setIdempotencyKey(overriddenIdempotencyKey); - rtRequestEntity.setRetry(46); // TODO set 0 + rtRequestEntity.setRetry(0); rtRequestEntity.setPayload(AppBase64Util.base64Encode(ZipUtil.zip(payload))); rtRetryRepository.save(rtRequestEntity); @@ -366,6 +374,15 @@ public RecoveryReceiptReportResponse recoverReceiptToBeReSent(RecoveryReceiptReq return response; } + private List generateHeader(URI uri, StationDto station) { + List> headers = CommonUtility.constructHeadersForPaaInviaRT(uri, station, stationInForwarderPartialPath, forwarderSubscriptionKey); + List formattedHeaders = new LinkedList<>(); + for (Pair header : headers) { + formattedHeaders.add(header.getFirst() + ":" + header.getSecond()); + } + return formattedHeaders; + } + /** * Regenerate receipt payload according to its type (OK|KO) */ From eb075896d63e02a3299ae9a0134d47c5c93dc41d Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 14:03:36 +0000 Subject: [PATCH 48/64] Bump to version 0.4.5-2-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 8128fc04..5167ff90 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.225.0 -appVersion: 0.4.5-1-release-v0.4.x +version: 0.226.0 +appVersion: 0.4.5-2-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 5ff4c18a..87d928f5 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-1-release-v0.4.x" + tag: "0.4.5-2-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 6606092a..fc0a9ad8 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-1-release-v0.4.x" + tag: "0.4.5-2-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index eac6c052..dd6d84e5 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-1-release-v0.4.x" + tag: "0.4.5-2-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index b54c4a76..be76b2b2 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.5-1-release-v0.4.x" + "version": "0.4.5-2-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 8f43a22d..275a2a2e 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.5-1-release-v0.4.x" + "version": "0.4.5-2-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index be238a62..741ff360 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5-1-release-v0.4.x + 0.4.5-2-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 27c85a8cf98603cbac96aa6a0d7b00fb3954ea63 Mon Sep 17 00:00:00 2001 From: FedericoRuzzier <49512050+FedericoRuzzier@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:10:48 +0200 Subject: [PATCH 49/64] update openapi --- openapi/openapi.json | 1519 ++++++++++++++++----------------- openapi/openapi_redirect.json | 201 ++--- 2 files changed, 822 insertions(+), 898 deletions(-) diff --git a/openapi/openapi.json b/openapi/openapi.json index be76b2b2..577fee0e 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -1,1038 +1,981 @@ { - "openapi": "3.0.1", - "info": { - "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", - "termsOfService": "https://www.pagopa.gov.it/", - "title": "WISP Converter", - "version": "0.4.5-2-release-v0.4.x" + "openapi" : "3.0.1", + "info" : { + "description" : "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", + "termsOfService" : "https://www.pagopa.gov.it/", + "title" : "WISP Converter", + "version" : "0.4.4-5-release-v0.4.x" }, - "servers": [ - { - "url": "http://localhost", - "description": "Generated server url" - } - ], - "tags": [ - { - "description": "Application info APIs", - "name": "Home" - }, - { - "description": "Create and Delete payment token timer", - "name": "ReceiptTimer" - }, - { - "description": "ECs and Stations configuration", - "name": "Configuration" - }, - { - "description": "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", - "name": "Receipt" - }, - { - "description": "Create and Delete rpt timer", - "name": "RPTTimer" - }, - { - "description": "Conversion and redirection APIs", - "name": "Redirect" - }, - { - "description": "Recovery and reconciliation APIs", - "name": "Recovery" - } - ], - "paths": { - "/info": { - "get": { - "operationId": "healthCheck", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppInfoResponse" + "servers" : [ { + "url" : "http://localhost", + "description" : "Generated server url" + } ], + "tags" : [ { + "description" : "Application info APIs", + "name" : "Home" + }, { + "description" : "Create and Delete payment token timer", + "name" : "ReceiptTimer" + }, { + "description" : "ECs and Stations configuration", + "name" : "Configuration" + }, { + "description" : "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", + "name" : "Receipt" + }, { + "description" : "Create and Delete rpt timer", + "name" : "RPTTimer" + }, { + "description" : "Conversion and redirection APIs", + "name" : "Redirect" + }, { + "description" : "Recovery and reconciliation APIs", + "name" : "Recovery" + } ], + "paths" : { + "/info" : { + "get" : { + "operationId" : "healthCheck", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AppInfoResponse" } } }, - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return OK if application is started", - "tags": [ - "Home" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return OK if application is started", + "tags" : [ "Home" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/payments": { - "get": { - "operationId": "redirect", - "parameters": [ - { - "example": "identificativoIntermediarioPA_sessionId", - "in": "query", - "name": "idSession", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "302": { - "description": "Redirect to Checkout service.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/payments" : { + "get" : { + "operationId" : "redirect", + "parameters" : [ { + "example" : "identificativoIntermediarioPA_sessionId", + "in" : "query", + "name" : "idSession", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "302" : { + "description" : "Redirect to Checkout service.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Redirect" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Redirect" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/receipt": { - "get": { - "operationId": "receiptRetrieve", - "parameters": [ - { - "in": "query", - "name": "ci", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "ccp", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "iuv", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "type": "string" + "/receipt" : { + "get" : { + "operationId" : "receiptRetrieve", + "parameters" : [ { + "in" : "query", + "name" : "ci", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "ccp", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "iuv", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "type" : "string" } } }, - "description": "Receipt exists", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Receipt exists", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/receipt/ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/receipt/ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "receiptKo", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "string" + } ], + "post" : { + "operationId" : "receiptKo", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "type" : "string" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully forwarded negative paaInviaRT to EC", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully forwarded negative paaInviaRT to EC", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] } }, - "/receipt/ok": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/receipt/ok" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "receiptOk", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiptRequest" + } ], + "post" : { + "operationId" : "receiptOk", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ReceiptRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully forwarded positive paaInviaRT to EC", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully forwarded positive paaInviaRT to EC", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Receipt" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Receipt" ] } }, - "/receipt/timer": { - "delete": { - "description": "Delete a timer by paymentToken", - "operationId": "deleteTimer_1", - "parameters": [ - { - "in": "query", - "name": "paymentTokens", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully paymentToken expiration timer deleted", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/receipt/timer" : { + "delete" : { + "description" : "Delete a timer by paymentToken", + "operationId" : "deleteTimer_1", + "parameters" : [ { + "in" : "query", + "name" : "paymentTokens", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "Successfully paymentToken expiration timer deleted", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "deleteTimer", - "tags": [ - "ReceiptTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "deleteTimer", + "tags" : [ "ReceiptTimer" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Create a timer linked with paymentToken and receipt data", - "operationId": "createTimer_1", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiptTimerRequest" + } ], + "post" : { + "description" : "Create a timer linked with paymentToken and receipt data", + "operationId" : "createTimer_1", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ReceiptTimerRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully paymentToken expiration timer created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully paymentToken expiration timer created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "createTimer", - "tags": [ - "ReceiptTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "createTimer", + "tags" : [ "ReceiptTimer" ] } }, - "/recovery/receipts": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/partitions" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all receipts in the request, searching by passed identifier", - "operationId": "recoverReceiptToBeReSent", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptRequest" + } ], + "post" : { + "description" : "Execute reconciliation of all receipts contained in the partitions of the request", + "operationId" : "recoverReceiptToBeReSentByPartition", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptByPartitionRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptReportResponse" + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptReportResponse" } } }, - "description": "Reconciliation completed", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Reconciliation scheduled", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute reconciliation for passed receipts.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute reconciliation for passed receipts by partition.", + "tags" : [ "Recovery" ] } }, - "/recovery/{creditor_institution}/receipt-ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/receipts" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId": "recoverReceiptKOForCreditorInstitution", - "parameters": [ - { - "in": "path", - "name": "creditor_institution", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "dateFrom", - "required": true, - "schema": { - "type": "string" + } ], + "post" : { + "description" : "Execute reconciliation of all receipts in the request, searching by passed identifier", + "operationId" : "recoverReceiptToBeReSent", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptRequest" + } } }, - { - "in": "query", - "name": "dateTo", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptResponse" + "required" : true + }, + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptReportResponse" } } }, - "description": "Started reconciling IUVs with explicit RT send", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Reconciliation scheduled", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute IUV reconciliation for certain creditor institution.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute reconciliation for passed receipts.", + "tags" : [ "Recovery" ] } }, - "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko": { - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "/recovery/{creditor_institution}/receipt-ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId": "recoverReceiptKOForCreditorInstitutionAndIUV", - "parameters": [ - { - "in": "path", - "name": "creditor_institution", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,100}", - "type": "string" - } - }, - { - "in": "path", - "name": "iuv", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,100}", - "type": "string" - } - }, - { - "in": "query", - "name": "dateFrom", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,10}", - "type": "string" - } - }, - { - "in": "query", - "name": "dateTo", - "required": true, - "schema": { - "pattern": "[a-zA-Z0-9_-]{1,10}", - "type": "string" + } ], + "post" : { + "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId" : "recoverReceiptKOForCreditorInstitution", + "parameters" : [ { + "in" : "path", + "name" : "creditor_institution", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateFrom", + "required" : true, + "schema" : { + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateTo", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" + } + } + }, + "description" : "Started reconciling IUVs with explicit RT send", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" + } + } } } - ], - "responses": { - "200": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptResponse" + }, + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute IUV reconciliation for certain creditor institution.", + "tags" : [ "Recovery" ] + } + }, + "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko" : { + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" + } + } ], + "post" : { + "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId" : "recoverReceiptKOForCreditorInstitutionAndIUV", + "parameters" : [ { + "in" : "path", + "name" : "creditor_institution", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,100}", + "type" : "string" + } + }, { + "in" : "path", + "name" : "iuv", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,100}", + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateFrom", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,10}", + "type" : "string" + } + }, { + "in" : "query", + "name" : "dateTo", + "required" : true, + "schema" : { + "pattern" : "[a-zA-Z0-9_-]{1,10}", + "type" : "string" + } + } ], + "responses" : { + "200" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" } } }, - "description": "Completed IUV reconciliation with explicit RT submission", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Completed IUV reconciliation with explicit RT submission", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "400": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/RecoveryReceiptResponse" + "400" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/RecoveryReceiptResponse" } } }, - "description": "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Execute IUV reconciliation for certain creditor institution.", - "tags": [ - "Recovery" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Execute IUV reconciliation for certain creditor institution.", + "tags" : [ "Recovery" ] } }, - "/rpt/timer": { - "delete": { - "description": "Delete a timer by sessionId", - "operationId": "deleteTimer", - "parameters": [ - { - "in": "query", - "name": "sessionId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully rpt timer deleted", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "/rpt/timer" : { + "delete" : { + "description" : "Delete a timer by sessionId", + "operationId" : "deleteTimer", + "parameters" : [ { + "in" : "query", + "name" : "sessionId", + "required" : true, + "schema" : { + "type" : "string" + } + } ], + "responses" : { + "200" : { + "description" : "Successfully rpt timer deleted", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "deleteRPTTimer", - "tags": [ - "RPTTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "deleteRPTTimer", + "tags" : [ "RPTTimer" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "description": "Create a timer from sessionId data", - "operationId": "createTimer", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RPTTimerRequest" + } ], + "post" : { + "description" : "Create a timer from sessionId data", + "operationId" : "createTimer", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/RPTTimerRequest" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "Successfully rpt timer created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "Successfully rpt timer created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "createRPTTimer", - "tags": [ - "RPTTimer" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "createRPTTimer", + "tags" : [ "RPTTimer" ] } }, - "/whitelist/cis": { - "get": { - "operationId": "getCreditorInstitutions", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "/whitelist/cis" : { + "get" : { + "operationId" : "getCreditorInstitutions", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for EC retrieved.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for EC retrieved.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "404" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for EC not found.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for EC not found.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return the string containing all creditor institutions for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return the string containing all creditor institutions for the wisp converter logic", + "tags" : [ "Configuration" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "createCreditorInstitutionsConfiguration", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + } ], + "post" : { + "operationId" : "createCreditorInstitutionsConfiguration", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "201": { - "description": "Created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "201" : { + "description" : "Created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Create the string containing all creditor institutions for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Create the string containing all creditor institutions for the wisp converter logic", + "tags" : [ "Configuration" ] } }, - "/whitelist/stations": { - "get": { - "operationId": "getStations", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "/whitelist/stations" : { + "get" : { + "operationId" : "getStations", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for Stations retrieved.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for Stations retrieved.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "404": { - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + "404" : { + "content" : { + "*/*" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "description": "Configuration for Stations not found.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "Configuration for Stations not found.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return the string containing all stations for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return the string containing all stations for the wisp converter logic", + "tags" : [ "Configuration" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ], - "post": { - "operationId": "createStationsConfiguration", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConfigurationModel" + } ], + "post" : { + "operationId" : "createStationsConfiguration", + "requestBody" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/ConfigurationModel" } } }, - "required": true + "required" : true }, - "responses": { - "200": { - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "responses" : { + "200" : { + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } }, - "201": { - "description": "Created", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "201" : { + "description" : "Created", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Create the string containing all stations for the wisp converter logic", - "tags": [ - "Configuration" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Create the string containing all stations for the wisp converter logic", + "tags" : [ "Configuration" ] } } }, - "components": { - "schemas": { - "AppInfoResponse": { - "type": "object", - "properties": { - "environment": { - "type": "string" + "components" : { + "schemas" : { + "AppInfoResponse" : { + "type" : "object", + "properties" : { + "environment" : { + "type" : "string" }, - "name": { - "type": "string" + "name" : { + "type" : "string" }, - "version": { - "type": "string" + "version" : { + "type" : "string" } } }, - "ConfigurationModel": { - "type": "object", - "properties": { - "key": { - "type": "string" + "ConfigurationModel" : { + "type" : "object", + "properties" : { + "key" : { + "type" : "string" } } }, - "PairStringString": { - "type": "object", - "properties": { - "first": { - "type": "string" + "PairStringString" : { + "type" : "object", + "properties" : { + "first" : { + "type" : "string" }, - "second": { - "type": "string" + "second" : { + "type" : "string" } } }, - "RPTTimerRequest": { - "type": "object", - "properties": { - "sessionId": { - "type": "string" + "RPTTimerRequest" : { + "type" : "object", + "properties" : { + "sessionId" : { + "type" : "string" } } }, - "ReceiptRequest": { - "type": "object", - "properties": { - "content": { - "type": "string" + "ReceiptRequest" : { + "type" : "object", + "properties" : { + "content" : { + "type" : "string" } } }, - "ReceiptTimerRequest": { - "type": "object", - "properties": { - "expirationTime": { - "type": "integer", - "format": "int64" + "ReceiptTimerRequest" : { + "type" : "object", + "properties" : { + "expirationTime" : { + "type" : "integer", + "format" : "int64" }, - "fiscalCode": { - "pattern": "\\w*", - "type": "string" + "fiscalCode" : { + "pattern" : "\\w*", + "type" : "string" }, - "noticeNumber": { - "pattern": "\\d*", - "type": "string" + "noticeNumber" : { + "pattern" : "\\d*", + "type" : "string" }, - "paymentToken": { - "type": "string" + "paymentToken" : { + "type" : "string" + } + } + }, + "RecoveryReceiptByPartitionRequest" : { + "type" : "object", + "properties" : { + "partitionKeys" : { + "type" : "array", + "items" : { + "type" : "string" + } } } }, - "RecoveryReceiptPaymentResponse": { - "type": "object", - "properties": { - "ccp": { - "type": "string" + "RecoveryReceiptPaymentResponse" : { + "type" : "object", + "properties" : { + "ccp" : { + "type" : "string" }, - "ci": { - "type": "string" + "ci" : { + "type" : "string" }, - "iuv": { - "type": "string" + "iuv" : { + "type" : "string" } } }, - "RecoveryReceiptReportResponse": { - "type": "object", - "properties": { - "receiptStatus": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PairStringString" + "RecoveryReceiptReportResponse" : { + "type" : "object", + "properties" : { + "receiptStatus" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/PairStringString" } } } }, - "RecoveryReceiptRequest": { - "type": "object", - "properties": { - "receiptIds": { - "type": "array", - "items": { - "type": "string" + "RecoveryReceiptRequest" : { + "type" : "object", + "properties" : { + "receiptIds" : { + "type" : "array", + "items" : { + "type" : "string" } } } }, - "RecoveryReceiptResponse": { - "type": "object", - "properties": { - "payments": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RecoveryReceiptPaymentResponse" + "RecoveryReceiptResponse" : { + "type" : "object", + "properties" : { + "payments" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/RecoveryReceiptPaymentResponse" } } } } }, - "securitySchemes": { - "ApiKey": { - "description": "The API key to access this function app.", - "in": "header", - "name": "Ocp-Apim-Subscription-Key", - "type": "apiKey" + "securitySchemes" : { + "ApiKey" : { + "description" : "The API key to access this function app.", + "in" : "header", + "name" : "Ocp-Apim-Subscription-Key", + "type" : "apiKey" } } } -} +} \ No newline at end of file diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 275a2a2e..0d25c250 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -1,142 +1,123 @@ { - "openapi": "3.0.1", - "info": { - "title": "WISP-Converter-redirect", - "version": "0.4.5-2-release-v0.4.x" + "openapi" : "3.0.1", + "info" : { + "title" : "WISP-Converter-redirect", + "version" : "0.4.4-5-release-v0.4.x" }, - "servers": [ - { - "url": "http://localhost", - "description": "Generated server url" - } - ], - "tags": [ - { - "description": "Application info APIs", - "name": "Home" - }, - { - "description": "Conversion and redirection APIs", - "name": "Redirect" - } - ], - "paths": { - "/info": { - "get": { - "operationId": "healthCheck", - "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppInfoResponse" + "servers" : [ { + "url" : "http://localhost", + "description" : "Generated server url" + } ], + "tags" : [ { + "description" : "Application info APIs", + "name" : "Home" + }, { + "description" : "Conversion and redirection APIs", + "name" : "Redirect" + } ], + "paths" : { + "/info" : { + "get" : { + "operationId" : "healthCheck", + "responses" : { + "200" : { + "content" : { + "application/json" : { + "schema" : { + "$ref" : "#/components/schemas/AppInfoResponse" } } }, - "description": "OK.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + "description" : "OK.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "summary": "Return OK if application is started", - "tags": [ - "Home" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "summary" : "Return OK if application is started", + "tags" : [ "Home" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] }, - "/payments": { - "get": { - "operationId": "redirect", - "parameters": [ - { - "example": "identificativoIntermediarioPA_sessionId", - "in": "query", - "name": "idSession", - "required": true, - "schema": { - "type": "string" - } + "/payments" : { + "get" : { + "operationId" : "redirect", + "parameters" : [ { + "example" : "identificativoIntermediarioPA_sessionId", + "in" : "query", + "name" : "idSession", + "required" : true, + "schema" : { + "type" : "string" } - ], - "responses": { - "302": { - "description": "Redirect to Checkout service.", - "headers": { - "X-Request-Id": { - "description": "This header identifies the call", - "schema": { - "type": "string" + } ], + "responses" : { + "302" : { + "description" : "Redirect to Checkout service.", + "headers" : { + "X-Request-Id" : { + "description" : "This header identifies the call", + "schema" : { + "type" : "string" } } } } }, - "security": [ - { - "ApiKey": [] - } - ], - "tags": [ - "Redirect" - ] + "security" : [ { + "ApiKey" : [ ] + } ], + "tags" : [ "Redirect" ] }, - "parameters": [ - { - "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in": "header", - "name": "X-Request-Id", - "schema": { - "type": "string" - } + "parameters" : [ { + "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in" : "header", + "name" : "X-Request-Id", + "schema" : { + "type" : "string" } - ] + } ] } }, - "components": { - "schemas": { - "AppInfoResponse": { - "type": "object", - "properties": { - "environment": { - "type": "string" + "components" : { + "schemas" : { + "AppInfoResponse" : { + "type" : "object", + "properties" : { + "environment" : { + "type" : "string" }, - "name": { - "type": "string" + "name" : { + "type" : "string" }, - "version": { - "type": "string" + "version" : { + "type" : "string" } } } }, - "securitySchemes": { - "ApiKey": { - "description": "The API key to access this function app.", - "in": "header", - "name": "Ocp-Apim-Subscription-Key", - "type": "apiKey" + "securitySchemes" : { + "ApiKey" : { + "description" : "The API key to access this function app.", + "in" : "header", + "name" : "Ocp-Apim-Subscription-Key", + "type" : "apiKey" } } } -} +} \ No newline at end of file From 08cb32ea5da45bbf996b2f7f4f8ca869542d9e3a Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 14:14:37 +0000 Subject: [PATCH 50/64] Bump to version 0.4.5-3-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 +- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 1555 ++++++++++++++++++--------------- openapi/openapi_redirect.json | 201 +++-- pom.xml | 2 +- 7 files changed, 955 insertions(+), 813 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 5167ff90..fa533ddd 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.226.0 -appVersion: 0.4.5-2-release-v0.4.x +version: 0.227.0 +appVersion: 0.4.5-3-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 87d928f5..402024c6 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-2-release-v0.4.x" + tag: "0.4.5-3-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index fc0a9ad8..9e6d9074 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-2-release-v0.4.x" + tag: "0.4.5-3-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index dd6d84e5..11eaeb63 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-2-release-v0.4.x" + tag: "0.4.5-3-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 577fee0e..ea061508 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -1,981 +1,1104 @@ { - "openapi" : "3.0.1", - "info" : { - "description" : "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", - "termsOfService" : "https://www.pagopa.gov.it/", - "title" : "WISP Converter", - "version" : "0.4.4-5-release-v0.4.x" + "openapi": "3.0.1", + "info": { + "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", + "termsOfService": "https://www.pagopa.gov.it/", + "title": "WISP Converter", + "version": "0.4.5-3-release-v0.4.x" }, - "servers" : [ { - "url" : "http://localhost", - "description" : "Generated server url" - } ], - "tags" : [ { - "description" : "Application info APIs", - "name" : "Home" - }, { - "description" : "Create and Delete payment token timer", - "name" : "ReceiptTimer" - }, { - "description" : "ECs and Stations configuration", - "name" : "Configuration" - }, { - "description" : "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", - "name" : "Receipt" - }, { - "description" : "Create and Delete rpt timer", - "name" : "RPTTimer" - }, { - "description" : "Conversion and redirection APIs", - "name" : "Redirect" - }, { - "description" : "Recovery and reconciliation APIs", - "name" : "Recovery" - } ], - "paths" : { - "/info" : { - "get" : { - "operationId" : "healthCheck", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AppInfoResponse" + "servers": [ + { + "url": "http://localhost", + "description": "Generated server url" + } + ], + "tags": [ + { + "description": "Application info APIs", + "name": "Home" + }, + { + "description": "Create and Delete payment token timer", + "name": "ReceiptTimer" + }, + { + "description": "ECs and Stations configuration", + "name": "Configuration" + }, + { + "description": "Convert sendPaymentResultV2, closePaymentV2 or paSendRTV2 into paaInviaRT to EC", + "name": "Receipt" + }, + { + "description": "Create and Delete rpt timer", + "name": "RPTTimer" + }, + { + "description": "Conversion and redirection APIs", + "name": "Redirect" + }, + { + "description": "Recovery and reconciliation APIs", + "name": "Recovery" + } + ], + "paths": { + "/info": { + "get": { + "operationId": "healthCheck", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppInfoResponse" } } }, - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return OK if application is started", - "tags" : [ "Home" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return OK if application is started", + "tags": [ + "Home" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/payments" : { - "get" : { - "operationId" : "redirect", - "parameters" : [ { - "example" : "identificativoIntermediarioPA_sessionId", - "in" : "query", - "name" : "idSession", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "302" : { - "description" : "Redirect to Checkout service.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/payments": { + "get": { + "operationId": "redirect", + "parameters": [ + { + "example": "identificativoIntermediarioPA_sessionId", + "in": "query", + "name": "idSession", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "302": { + "description": "Redirect to Checkout service.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Redirect" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Redirect" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/receipt" : { - "get" : { - "operationId" : "receiptRetrieve", - "parameters" : [ { - "in" : "query", - "name" : "ci", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "ccp", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "iuv", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "type" : "string" + "/receipt": { + "get": { + "operationId": "receiptRetrieve", + "parameters": [ + { + "in": "query", + "name": "ci", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "ccp", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "iuv", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "type": "string" } } }, - "description" : "Receipt exists", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Receipt exists", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/receipt/ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/receipt/ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "receiptKo", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "type" : "string" + ], + "post": { + "operationId": "receiptKo", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully forwarded negative paaInviaRT to EC", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully forwarded negative paaInviaRT to EC", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] } }, - "/receipt/ok" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/receipt/ok": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "receiptOk", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ReceiptRequest" + ], + "post": { + "operationId": "receiptOk", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReceiptRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully forwarded positive paaInviaRT to EC", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully forwarded positive paaInviaRT to EC", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Receipt" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Receipt" + ] } }, - "/receipt/timer" : { - "delete" : { - "description" : "Delete a timer by paymentToken", - "operationId" : "deleteTimer_1", - "parameters" : [ { - "in" : "query", - "name" : "paymentTokens", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "Successfully paymentToken expiration timer deleted", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/receipt/timer": { + "delete": { + "description": "Delete a timer by paymentToken", + "operationId": "deleteTimer_1", + "parameters": [ + { + "in": "query", + "name": "paymentTokens", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully paymentToken expiration timer deleted", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "deleteTimer", - "tags" : [ "ReceiptTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "deleteTimer", + "tags": [ + "ReceiptTimer" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Create a timer linked with paymentToken and receipt data", - "operationId" : "createTimer_1", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ReceiptTimerRequest" + ], + "post": { + "description": "Create a timer linked with paymentToken and receipt data", + "operationId": "createTimer_1", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ReceiptTimerRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully paymentToken expiration timer created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully paymentToken expiration timer created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "createTimer", - "tags" : [ "ReceiptTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "createTimer", + "tags": [ + "ReceiptTimer" + ] } }, - "/recovery/partitions" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/partitions": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all receipts contained in the partitions of the request", - "operationId" : "recoverReceiptToBeReSentByPartition", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptByPartitionRequest" + ], + "post": { + "description": "Execute reconciliation of all receipts contained in the partitions of the request", + "operationId": "recoverReceiptToBeReSentByPartition", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptByPartitionRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptReportResponse" + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptReportResponse" } } }, - "description" : "Reconciliation scheduled", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Reconciliation scheduled", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute reconciliation for passed receipts by partition.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute reconciliation for passed receipts by partition.", + "tags": [ + "Recovery" + ] } }, - "/recovery/receipts" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/receipts": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all receipts in the request, searching by passed identifier", - "operationId" : "recoverReceiptToBeReSent", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptRequest" + ], + "post": { + "description": "Execute reconciliation of all receipts in the request, searching by passed identifier", + "operationId": "recoverReceiptToBeReSent", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptReportResponse" + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptReportResponse" } } }, - "description" : "Reconciliation scheduled", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Reconciliation scheduled", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute reconciliation for passed receipts.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute reconciliation for passed receipts.", + "tags": [ + "Recovery" + ] } }, - "/recovery/{creditor_institution}/receipt-ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/{creditor_institution}/receipt-ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId" : "recoverReceiptKOForCreditorInstitution", - "parameters" : [ { - "in" : "path", - "name" : "creditor_institution", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateFrom", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateTo", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + ], + "post": { + "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId": "recoverReceiptKOForCreditorInstitution", + "parameters": [ + { + "in": "path", + "name": "creditor_institution", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "dateFrom", + "required": true, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "dateTo", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "Started reconciling IUVs with explicit RT send", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Started reconciling IUVs with explicit RT send", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute IUV reconciliation for certain creditor institution.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute IUV reconciliation for certain creditor institution.", + "tags": [ + "Recovery" + ] } }, - "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko" : { - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "/recovery/{creditor_institution}/rpt/{iuv}/receipt-ko": { + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", - "operationId" : "recoverReceiptKOForCreditorInstitutionAndIUV", - "parameters" : [ { - "in" : "path", - "name" : "creditor_institution", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,100}", - "type" : "string" - } - }, { - "in" : "path", - "name" : "iuv", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,100}", - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateFrom", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,10}", - "type" : "string" - } - }, { - "in" : "query", - "name" : "dateTo", - "required" : true, - "schema" : { - "pattern" : "[a-zA-Z0-9_-]{1,10}", - "type" : "string" - } - } ], - "responses" : { - "200" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + ], + "post": { + "description": "Execute reconciliation of all IUVs for certain creditor institution, sending RT for close payment.", + "operationId": "recoverReceiptKOForCreditorInstitutionAndIUV", + "parameters": [ + { + "in": "path", + "name": "creditor_institution", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,100}", + "type": "string" + } + }, + { + "in": "path", + "name": "iuv", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,100}", + "type": "string" + } + }, + { + "in": "query", + "name": "dateFrom", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,10}", + "type": "string" + } + }, + { + "in": "query", + "name": "dateTo", + "required": true, + "schema": { + "pattern": "[a-zA-Z0-9_-]{1,10}", + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "Completed IUV reconciliation with explicit RT submission", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Completed IUV reconciliation with explicit RT submission", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "400" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/RecoveryReceiptResponse" + "400": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/RecoveryReceiptResponse" } } }, - "description" : "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "It is not possible to complete reconciliation (with explicit RT submission) for the submitted UIV", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Execute IUV reconciliation for certain creditor institution.", - "tags" : [ "Recovery" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Execute IUV reconciliation for certain creditor institution.", + "tags": [ + "Recovery" + ] } }, - "/rpt/timer" : { - "delete" : { - "description" : "Delete a timer by sessionId", - "operationId" : "deleteTimer", - "parameters" : [ { - "in" : "query", - "name" : "sessionId", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "Successfully rpt timer deleted", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "/rpt/timer": { + "delete": { + "description": "Delete a timer by sessionId", + "operationId": "deleteTimer", + "parameters": [ + { + "in": "query", + "name": "sessionId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Successfully rpt timer deleted", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "deleteRPTTimer", - "tags" : [ "RPTTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "deleteRPTTimer", + "tags": [ + "RPTTimer" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "description" : "Create a timer from sessionId data", - "operationId" : "createTimer", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/RPTTimerRequest" + ], + "post": { + "description": "Create a timer from sessionId data", + "operationId": "createTimer", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RPTTimerRequest" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "Successfully rpt timer created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "Successfully rpt timer created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "createRPTTimer", - "tags" : [ "RPTTimer" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "createRPTTimer", + "tags": [ + "RPTTimer" + ] } }, - "/whitelist/cis" : { - "get" : { - "operationId" : "getCreditorInstitutions", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "/whitelist/cis": { + "get": { + "operationId": "getCreditorInstitutions", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for EC retrieved.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for EC retrieved.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "404" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "404": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for EC not found.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for EC not found.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return the string containing all creditor institutions for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return the string containing all creditor institutions for the wisp converter logic", + "tags": [ + "Configuration" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "createCreditorInstitutionsConfiguration", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + ], + "post": { + "operationId": "createCreditorInstitutionsConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "201" : { - "description" : "Created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "201": { + "description": "Created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Create the string containing all creditor institutions for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Create the string containing all creditor institutions for the wisp converter logic", + "tags": [ + "Configuration" + ] } }, - "/whitelist/stations" : { - "get" : { - "operationId" : "getStations", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "/whitelist/stations": { + "get": { + "operationId": "getStations", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for Stations retrieved.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for Stations retrieved.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "404" : { - "content" : { - "*/*" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + "404": { + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "description" : "Configuration for Stations not found.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "Configuration for Stations not found.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return the string containing all stations for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return the string containing all stations for the wisp converter logic", + "tags": [ + "Configuration" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ], - "post" : { - "operationId" : "createStationsConfiguration", - "requestBody" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/ConfigurationModel" + ], + "post": { + "operationId": "createStationsConfiguration", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigurationModel" } } }, - "required" : true + "required": true }, - "responses" : { - "200" : { - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "responses": { + "200": { + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } }, - "201" : { - "description" : "Created", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "201": { + "description": "Created", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Create the string containing all stations for the wisp converter logic", - "tags" : [ "Configuration" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Create the string containing all stations for the wisp converter logic", + "tags": [ + "Configuration" + ] } } }, - "components" : { - "schemas" : { - "AppInfoResponse" : { - "type" : "object", - "properties" : { - "environment" : { - "type" : "string" + "components": { + "schemas": { + "AppInfoResponse": { + "type": "object", + "properties": { + "environment": { + "type": "string" }, - "name" : { - "type" : "string" + "name": { + "type": "string" }, - "version" : { - "type" : "string" + "version": { + "type": "string" } } }, - "ConfigurationModel" : { - "type" : "object", - "properties" : { - "key" : { - "type" : "string" + "ConfigurationModel": { + "type": "object", + "properties": { + "key": { + "type": "string" } } }, - "PairStringString" : { - "type" : "object", - "properties" : { - "first" : { - "type" : "string" + "PairStringString": { + "type": "object", + "properties": { + "first": { + "type": "string" }, - "second" : { - "type" : "string" + "second": { + "type": "string" } } }, - "RPTTimerRequest" : { - "type" : "object", - "properties" : { - "sessionId" : { - "type" : "string" + "RPTTimerRequest": { + "type": "object", + "properties": { + "sessionId": { + "type": "string" } } }, - "ReceiptRequest" : { - "type" : "object", - "properties" : { - "content" : { - "type" : "string" + "ReceiptRequest": { + "type": "object", + "properties": { + "content": { + "type": "string" } } }, - "ReceiptTimerRequest" : { - "type" : "object", - "properties" : { - "expirationTime" : { - "type" : "integer", - "format" : "int64" + "ReceiptTimerRequest": { + "type": "object", + "properties": { + "expirationTime": { + "type": "integer", + "format": "int64" }, - "fiscalCode" : { - "pattern" : "\\w*", - "type" : "string" + "fiscalCode": { + "pattern": "\\w*", + "type": "string" }, - "noticeNumber" : { - "pattern" : "\\d*", - "type" : "string" + "noticeNumber": { + "pattern": "\\d*", + "type": "string" }, - "paymentToken" : { - "type" : "string" + "paymentToken": { + "type": "string" } } }, - "RecoveryReceiptByPartitionRequest" : { - "type" : "object", - "properties" : { - "partitionKeys" : { - "type" : "array", - "items" : { - "type" : "string" + "RecoveryReceiptByPartitionRequest": { + "type": "object", + "properties": { + "partitionKeys": { + "type": "array", + "items": { + "type": "string" } } } }, - "RecoveryReceiptPaymentResponse" : { - "type" : "object", - "properties" : { - "ccp" : { - "type" : "string" + "RecoveryReceiptPaymentResponse": { + "type": "object", + "properties": { + "ccp": { + "type": "string" }, - "ci" : { - "type" : "string" + "ci": { + "type": "string" }, - "iuv" : { - "type" : "string" + "iuv": { + "type": "string" } } }, - "RecoveryReceiptReportResponse" : { - "type" : "object", - "properties" : { - "receiptStatus" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/PairStringString" + "RecoveryReceiptReportResponse": { + "type": "object", + "properties": { + "receiptStatus": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PairStringString" } } } }, - "RecoveryReceiptRequest" : { - "type" : "object", - "properties" : { - "receiptIds" : { - "type" : "array", - "items" : { - "type" : "string" + "RecoveryReceiptRequest": { + "type": "object", + "properties": { + "receiptIds": { + "type": "array", + "items": { + "type": "string" } } } }, - "RecoveryReceiptResponse" : { - "type" : "object", - "properties" : { - "payments" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/RecoveryReceiptPaymentResponse" + "RecoveryReceiptResponse": { + "type": "object", + "properties": { + "payments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RecoveryReceiptPaymentResponse" } } } } }, - "securitySchemes" : { - "ApiKey" : { - "description" : "The API key to access this function app.", - "in" : "header", - "name" : "Ocp-Apim-Subscription-Key", - "type" : "apiKey" + "securitySchemes": { + "ApiKey": { + "description": "The API key to access this function app.", + "in": "header", + "name": "Ocp-Apim-Subscription-Key", + "type": "apiKey" } } } -} \ No newline at end of file +} diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 0d25c250..f803466f 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -1,123 +1,142 @@ { - "openapi" : "3.0.1", - "info" : { - "title" : "WISP-Converter-redirect", - "version" : "0.4.4-5-release-v0.4.x" + "openapi": "3.0.1", + "info": { + "title": "WISP-Converter-redirect", + "version": "0.4.5-3-release-v0.4.x" }, - "servers" : [ { - "url" : "http://localhost", - "description" : "Generated server url" - } ], - "tags" : [ { - "description" : "Application info APIs", - "name" : "Home" - }, { - "description" : "Conversion and redirection APIs", - "name" : "Redirect" - } ], - "paths" : { - "/info" : { - "get" : { - "operationId" : "healthCheck", - "responses" : { - "200" : { - "content" : { - "application/json" : { - "schema" : { - "$ref" : "#/components/schemas/AppInfoResponse" + "servers": [ + { + "url": "http://localhost", + "description": "Generated server url" + } + ], + "tags": [ + { + "description": "Application info APIs", + "name": "Home" + }, + { + "description": "Conversion and redirection APIs", + "name": "Redirect" + } + ], + "paths": { + "/info": { + "get": { + "operationId": "healthCheck", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AppInfoResponse" } } }, - "description" : "OK.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + "description": "OK.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "summary" : "Return OK if application is started", - "tags" : [ "Home" ] + "security": [ + { + "ApiKey": [] + } + ], + "summary": "Return OK if application is started", + "tags": [ + "Home" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] }, - "/payments" : { - "get" : { - "operationId" : "redirect", - "parameters" : [ { - "example" : "identificativoIntermediarioPA_sessionId", - "in" : "query", - "name" : "idSession", - "required" : true, - "schema" : { - "type" : "string" + "/payments": { + "get": { + "operationId": "redirect", + "parameters": [ + { + "example": "identificativoIntermediarioPA_sessionId", + "in": "query", + "name": "idSession", + "required": true, + "schema": { + "type": "string" + } } - } ], - "responses" : { - "302" : { - "description" : "Redirect to Checkout service.", - "headers" : { - "X-Request-Id" : { - "description" : "This header identifies the call", - "schema" : { - "type" : "string" + ], + "responses": { + "302": { + "description": "Redirect to Checkout service.", + "headers": { + "X-Request-Id": { + "description": "This header identifies the call", + "schema": { + "type": "string" } } } } }, - "security" : [ { - "ApiKey" : [ ] - } ], - "tags" : [ "Redirect" ] + "security": [ + { + "ApiKey": [] + } + ], + "tags": [ + "Redirect" + ] }, - "parameters" : [ { - "description" : "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", - "in" : "header", - "name" : "X-Request-Id", - "schema" : { - "type" : "string" + "parameters": [ + { + "description": "This header identifies the call, if not passed it is self-generated. This ID is returned in the response.", + "in": "header", + "name": "X-Request-Id", + "schema": { + "type": "string" + } } - } ] + ] } }, - "components" : { - "schemas" : { - "AppInfoResponse" : { - "type" : "object", - "properties" : { - "environment" : { - "type" : "string" + "components": { + "schemas": { + "AppInfoResponse": { + "type": "object", + "properties": { + "environment": { + "type": "string" }, - "name" : { - "type" : "string" + "name": { + "type": "string" }, - "version" : { - "type" : "string" + "version": { + "type": "string" } } } }, - "securitySchemes" : { - "ApiKey" : { - "description" : "The API key to access this function app.", - "in" : "header", - "name" : "Ocp-Apim-Subscription-Key", - "type" : "apiKey" + "securitySchemes": { + "ApiKey": { + "description": "The API key to access this function app.", + "in": "header", + "name": "Ocp-Apim-Subscription-Key", + "type": "apiKey" } } } -} \ No newline at end of file +} diff --git a/pom.xml b/pom.xml index 741ff360..3ec65fb4 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5-2-release-v0.4.x + 0.4.5-3-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From a80dadefc100198de16e6fde0dfbcee2462a50a4 Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Fri, 11 Oct 2024 16:22:54 +0200 Subject: [PATCH 51/64] fix servicebus autowired --- .../it/gov/pagopa/wispconverter/service/ServiceBusService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java index 952d075a..4c2a5ed3 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java @@ -23,6 +23,7 @@ public class ServiceBusService { @Value("${disable-service-bus}") private boolean disableServiceBus; + @Autowired private ServiceBusSenderClient serviceBusSenderClient; /* From 70e79eaf001978308fefa3d3767b19804a384fc5 Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 14:24:42 +0000 Subject: [PATCH 52/64] Bump to version 0.4.5-4-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index fa533ddd..725dcfe2 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.227.0 -appVersion: 0.4.5-3-release-v0.4.x +version: 0.228.0 +appVersion: 0.4.5-4-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 402024c6..a0d8878b 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-3-release-v0.4.x" + tag: "0.4.5-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 9e6d9074..b3830902 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-3-release-v0.4.x" + tag: "0.4.5-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 11eaeb63..77609d34 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-3-release-v0.4.x" + tag: "0.4.5-4-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index ea061508..2cb0f6e0 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.5-3-release-v0.4.x" + "version": "0.4.5-4-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index f803466f..d291a59f 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.5-3-release-v0.4.x" + "version": "0.4.5-4-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 3ec65fb4..7b938f58 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5-3-release-v0.4.x + 0.4.5-4-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 223d84a40b5ca0dc98a606ed613edd1e3ff1933e Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Fri, 11 Oct 2024 16:35:22 +0200 Subject: [PATCH 53/64] added allargs to dead-letter --- .../repository/model/ReceiptDeadLetterEntity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java index 4bca4f0d..ee0c84bf 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java @@ -1,8 +1,10 @@ package it.gov.pagopa.wispconverter.repository.model; import com.azure.spring.data.cosmos.core.mapping.Container; +import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; import lombok.ToString; import lombok.experimental.SuperBuilder; @@ -11,6 +13,8 @@ @ToString @EqualsAndHashCode(callSuper=false) @SuperBuilder(toBuilder = true) +@AllArgsConstructor +@NoArgsConstructor public class ReceiptDeadLetterEntity extends RTRequestEntity { } From 4fb722cb637791d8bcf8a8acac178d51460180ca Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 14:37:09 +0000 Subject: [PATCH 54/64] Bump to version 0.4.5-5-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 725dcfe2..0f073b57 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.228.0 -appVersion: 0.4.5-4-release-v0.4.x +version: 0.229.0 +appVersion: 0.4.5-5-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index a0d8878b..604125e1 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-4-release-v0.4.x" + tag: "0.4.5-5-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index b3830902..15ff9ce7 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-4-release-v0.4.x" + tag: "0.4.5-5-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 77609d34..63ef364f 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-4-release-v0.4.x" + tag: "0.4.5-5-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 2cb0f6e0..07d73951 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.5-4-release-v0.4.x" + "version": "0.4.5-5-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index d291a59f..643bf55e 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.5-4-release-v0.4.x" + "version": "0.4.5-5-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 7b938f58..1100557f 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5-4-release-v0.4.x + 0.4.5-5-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From e9cc2e74b260bf45ac5413d2dc5295302e1047bb Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Fri, 11 Oct 2024 16:48:44 +0200 Subject: [PATCH 55/64] removed noargs to dead-letter --- .../repository/model/RTRequestEntity.java | 3 ++- .../repository/model/ReceiptDeadLetterEntity.java | 14 ++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java index 881bdd18..9ee77dfb 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/RTRequestEntity.java @@ -3,6 +3,7 @@ import com.azure.spring.data.cosmos.core.mapping.Container; import com.azure.spring.data.cosmos.core.mapping.PartitionKey; import it.gov.pagopa.wispconverter.repository.model.enumz.ReceiptTypeEnum; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -18,7 +19,7 @@ @ToString(exclude = "payload") @EqualsAndHashCode(exclude = "payload") @SuperBuilder(toBuilder = true) -@AllArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor public class RTRequestEntity { diff --git a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java index ee0c84bf..2fd07b35 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java +++ b/src/main/java/it/gov/pagopa/wispconverter/repository/model/ReceiptDeadLetterEntity.java @@ -1,20 +1,22 @@ package it.gov.pagopa.wispconverter.repository.model; import com.azure.spring.data.cosmos.core.mapping.Container; +import lombok.AccessLevel; import lombok.AllArgsConstructor; -import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; @Container(containerName = "receipt-dead-letter") -@Data -@ToString -@EqualsAndHashCode(callSuper=false) +@Getter +@Setter +@ToString(exclude = "payload") +@EqualsAndHashCode(exclude = "payload") +@AllArgsConstructor(access = AccessLevel.PRIVATE) @SuperBuilder(toBuilder = true) -@AllArgsConstructor -@NoArgsConstructor public class ReceiptDeadLetterEntity extends RTRequestEntity { } From 739596ca44bc0f8471612f689cf12b3bc69fb489 Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Fri, 11 Oct 2024 14:50:41 +0000 Subject: [PATCH 56/64] Bump to version 0.4.5-6-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 0f073b57..061e4f56 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.229.0 -appVersion: 0.4.5-5-release-v0.4.x +version: 0.230.0 +appVersion: 0.4.5-6-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 604125e1..52eda898 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-5-release-v0.4.x" + tag: "0.4.5-6-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 15ff9ce7..20cdda99 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-5-release-v0.4.x" + tag: "0.4.5-6-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 63ef364f..9340aff3 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-5-release-v0.4.x" + tag: "0.4.5-6-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 07d73951..dc117dff 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.5-5-release-v0.4.x" + "version": "0.4.5-6-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 643bf55e..6ae13f49 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.5-5-release-v0.4.x" + "version": "0.4.5-6-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 1100557f..2f8bc559 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5-5-release-v0.4.x + 0.4.5-6-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 7c24a5e4525b5d462cd047a1bb1d67fae8978119 Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Fri, 11 Oct 2024 17:17:18 +0200 Subject: [PATCH 57/64] fix RT_SEND_NO_DEAD_LETTER_ON_STATES --- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 604125e1..560941e9 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -98,7 +98,7 @@ microservice-chart: µservice-chart STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '1' - RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 15ff9ce7..e2e06587 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -117,7 +117,7 @@ microservice-chart: µservice-chart STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 63ef364f..be08b27b 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -98,7 +98,7 @@ microservice-chart: µservice-chart STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day From b6280ea01faaf40c7f09257aecd3bba8257b12ee Mon Sep 17 00:00:00 2001 From: Angelo Caporaso <56113767+cap-ang@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:05:41 +0200 Subject: [PATCH 58/64] Fix cron job uat (#145) --- helm/values-uat.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index acfe91cb..46216a86 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -100,7 +100,7 @@ microservice-chart: µservice-chart RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_SYSTEM_ERROR' RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" - CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' + CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day CRON_JOB_SCHEDULE_RECOVERY_FROM_HOURS_AGO: '2' # from 2 hours ago CRON_JOB_SCHEDULE_RECOVERY_UNTIL_HOURS_AGO: '1' # until 1 hours ago From eca26aa471f55ecbbbf6ea8bd47fb31e123d0c50 Mon Sep 17 00:00:00 2001 From: Angelo Caporaso <56113767+cap-ang@users.noreply.github.com> Date: Mon, 14 Oct 2024 09:06:09 +0200 Subject: [PATCH 59/64] chore: Split `disable-service-bus` flag (#144) --- helm/values-dev.yaml | 1 + helm/values-prod.yaml | 1 + helm/values-uat.yaml | 1 + .../service/ECommerceHangTimerService.java | 10 +-- .../service/RPTTimerService.java | 10 +-- .../service/ReceiptTimerService.java | 74 ++++++++++--------- .../service/ServiceBusService.java | 8 +- .../ECommerceHangTimeoutConsumer.java | 8 +- .../servicebus/PaymentTimeoutConsumer.java | 8 +- .../servicebus/RPTTimeoutConsumer.java | 8 +- .../wispconverter/servicebus/RTConsumer.java | 8 +- src/main/resources/application.properties | 3 +- 12 files changed, 73 insertions(+), 67 deletions(-) diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 194c58d9..5f67ba25 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -202,5 +202,6 @@ cron: envConfig: !!merge <<: *envConfig CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' + DISABLE_SERVICE_BUS_RECEIVER: 'true' envSecret: !!merge <<: *envSecret diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 90e32d83..4b383b26 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -221,5 +221,6 @@ cron: envConfig: !!merge <<: *envConfig CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' + DISABLE_SERVICE_BUS_RECEIVER: 'true' envSecret: !!merge <<: *envSecret diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index 46216a86..b97bad54 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -202,5 +202,6 @@ cron: envConfig: !!merge <<: *envConfig CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'true' + DISABLE_SERVICE_BUS_RECEIVER: 'true' envSecret: !!merge <<: *envSecret diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ECommerceHangTimerService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ECommerceHangTimerService.java index f0c0fc3a..ceac2033 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ECommerceHangTimerService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ECommerceHangTimerService.java @@ -42,8 +42,8 @@ public class ECommerceHangTimerService { @Value("${wisp-converter.ecommerce-hang.timeout.seconds}") private Integer expirationTime; - @Value("${disable-service-bus}") - private boolean disableServiceBus; + @Value("${disable-service-bus-sender}") + private boolean disableServiceBusSender; private ReService reService; @@ -74,7 +74,7 @@ public void post() { * @param message the message to send on the queue of the service bus. */ public void sendMessage(ECommerceHangTimeoutMessage message) { - if(!disableServiceBus) { + if(!disableServiceBusSender) { String noticeNumber = message.getNoticeNumber(); String fiscalCode = message.getFiscalCode(); setEcommerceHangTimerInfoInMDC(fiscalCode, noticeNumber); @@ -111,7 +111,7 @@ public void sendMessage(ECommerceHangTimeoutMessage message) { * @param fiscalCode use to find the message */ public void cancelScheduledMessage(String noticeNumber, String fiscalCode) { - if(!disableServiceBus) { + if(!disableServiceBusSender) { log.debug("Cancel scheduled message for eCommerce hang release {} {}", sanitizeInput(noticeNumber), sanitizeInput(fiscalCode)); String key = String.format(ECOMMERCE_TIMER_MESSAGE_KEY_FORMAT, noticeNumber, fiscalCode); @@ -135,7 +135,7 @@ public void cancelScheduledMessage(String noticeNumber, String fiscalCode) { } private void callCancelScheduledMessage(String sequenceNumberString) { - if (!disableServiceBus) { + if (!disableServiceBusSender) { long sequenceNumber = Long.parseLong(sequenceNumberString); try { // delete the message from the queue diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java b/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java index 36ad8129..358a4e61 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/RPTTimerService.java @@ -43,8 +43,8 @@ public class RPTTimerService { @Value("${wisp-converter.wisp-rpt.timeout.seconds}") private Integer expirationTime; - @Value("${disable-service-bus}") - private boolean disableServiceBus; + @Value("${disable-service-bus-sender}") + private boolean disableServiceBusSender; private ReService reService; @@ -78,7 +78,7 @@ public void post() { * @param message the message to send on the queue of the service bus. */ public void sendMessage(RPTTimerRequest message) { - if (!disableServiceBus) { + if (!disableServiceBusSender) { String sessionId = message.getSessionId(); setRPTTimerInfoInMDC(sessionId); @@ -123,7 +123,7 @@ public void sendMessage(RPTTimerRequest message) { * @param sessionId use to find the message */ public void cancelScheduledMessage(String sessionId) { - if (!disableServiceBus) { + if (!disableServiceBusSender) { log.debug("Cancel scheduled message for RPTTimer {}", sanitizeInput(sessionId)); String key = String.format(RPT_TIMER_MESSAGE_KEY_FORMAT, sessionId); @@ -147,7 +147,7 @@ public void cancelScheduledMessage(String sessionId) { } private void callCancelScheduledMessage(String sequenceNumberString) { - if (!disableServiceBus) { + if (!disableServiceBusSender) { long sequenceNumber = Long.parseLong(sequenceNumberString); try { // delete the message from the queue diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptTimerService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptTimerService.java index bacbcf85..6cc6c406 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptTimerService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptTimerService.java @@ -37,6 +37,8 @@ public class ReceiptTimerService { private String connectionString; @Value("${azure.sb.queue.receiptTimer.name}") private String queueName; + @Value("${disable-service-bus-sender}") + private boolean disableServiceBusSender; private ServiceBusSenderClient serviceBusSenderClient; @Autowired @@ -52,47 +54,49 @@ public void post() { } public void sendMessage(ReceiptTimerRequest message) { - - String paymentToken = message.getPaymentToken(); - String fiscalCode = message.getFiscalCode(); - String noticeNumber = message.getNoticeNumber(); - MDCUtil.setReceiptTimerInfoInMDC(fiscalCode, noticeNumber, paymentToken); - - // Duplicate Prevention Logic - String sequenceNumberKey = String.format(CACHING_KEY_TEMPLATE, message.getPaymentToken()); - String value = cacheRepository.read(sequenceNumberKey, String.class); - if (value != null) return; // already exists - - // Create Message with paaInviaRT- receipt generation info - ReceiptDto receiptDto = ReceiptDto.builder() - .paymentToken(paymentToken) - .fiscalCode(fiscalCode) - .noticeNumber(noticeNumber) - .build(); - ServiceBusMessage serviceBusMessage = new ServiceBusMessage(receiptDto.toString()); - log.debug("Sending scheduled message {} to the queue: {}", message, queueName); - - // compute time and schedule message for consumer trigger - OffsetDateTime scheduledExpirationTime = OffsetDateTime.now().plus(message.getExpirationTime(), ChronoUnit.MILLIS); - Long sequenceNumber = serviceBusSenderClient.scheduleMessage(serviceBusMessage, scheduledExpirationTime); - log.debug("Sent scheduled message_base64 {} to the queue: {}", LogUtils.encodeToBase64(message.toString()), queueName); - generateRE(InternalStepStatus.RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND, "Scheduled receipt: [" + message + "]"); - - // insert {wisp_timer_, sequenceNumber} for Duplicate Prevention Logic and for call cancelScheduledMessage(sequenceNumber) - cacheRepository.insert(sequenceNumberKey, String.valueOf(sequenceNumber), message.getExpirationTime(), ChronoUnit.MILLIS); - log.debug("Cache sequence number {} for payment-token: {}", sequenceNumber, sequenceNumberKey); - generateRE(InternalStepStatus.RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER, "Cached sequence number: [" + sequenceNumber + "] for payment token: [" + sequenceNumberKey + "]"); - - // delete ecommerce hang timer: we delete the scheduled message from the queue - eCommerceHangTimerService.cancelScheduledMessage(noticeNumber, fiscalCode); + if (!disableServiceBusSender) { + String paymentToken = message.getPaymentToken(); + String fiscalCode = message.getFiscalCode(); + String noticeNumber = message.getNoticeNumber(); + MDCUtil.setReceiptTimerInfoInMDC(fiscalCode, noticeNumber, paymentToken); + + // Duplicate Prevention Logic + String sequenceNumberKey = String.format(CACHING_KEY_TEMPLATE, message.getPaymentToken()); + String value = cacheRepository.read(sequenceNumberKey, String.class); + if (value != null) return; // already exists + + // Create Message with paaInviaRT- receipt generation info + ReceiptDto receiptDto = ReceiptDto.builder() + .paymentToken(paymentToken) + .fiscalCode(fiscalCode) + .noticeNumber(noticeNumber) + .build(); + ServiceBusMessage serviceBusMessage = new ServiceBusMessage(receiptDto.toString()); + log.debug("Sending scheduled message {} to the queue: {}", message, queueName); + + // compute time and schedule message for consumer trigger + OffsetDateTime scheduledExpirationTime = OffsetDateTime.now().plus(message.getExpirationTime(), ChronoUnit.MILLIS); + Long sequenceNumber = serviceBusSenderClient.scheduleMessage(serviceBusMessage, scheduledExpirationTime); + log.debug("Sent scheduled message_base64 {} to the queue: {}", LogUtils.encodeToBase64(message.toString()), queueName); + generateRE(InternalStepStatus.RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND, "Scheduled receipt: [" + message + "]"); + + // insert {wisp_timer_, sequenceNumber} for Duplicate Prevention Logic and for call cancelScheduledMessage(sequenceNumber) + cacheRepository.insert(sequenceNumberKey, String.valueOf(sequenceNumber), message.getExpirationTime(), ChronoUnit.MILLIS); + log.debug("Cache sequence number {} for payment-token: {}", sequenceNumber, sequenceNumberKey); + generateRE(InternalStepStatus.RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER, "Cached sequence number: [" + sequenceNumber + "] for payment token: [" + sequenceNumberKey + "]"); + + // delete ecommerce hang timer: we delete the scheduled message from the queue + eCommerceHangTimerService.cancelScheduledMessage(noticeNumber, fiscalCode); + } } public void cancelScheduledMessage(List paymentTokens) { - paymentTokens.forEach(this::cancelScheduledMessage); + if (!disableServiceBusSender) { + paymentTokens.forEach(this::cancelScheduledMessage); + } } private void cancelScheduledMessage(String paymentToken) { - MDCUtil.setReceiptTimerInfoInMDC(null, null, paymentToken); log.debug("Cancel scheduled message for payment-token {}", paymentToken); diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java index 4c2a5ed3..0a31e2ac 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ServiceBusService.java @@ -1,6 +1,5 @@ package it.gov.pagopa.wispconverter.service; -import com.azure.messaging.servicebus.ServiceBusClientBuilder; import com.azure.messaging.servicebus.ServiceBusMessage; import com.azure.messaging.servicebus.ServiceBusSenderClient; import lombok.RequiredArgsConstructor; @@ -9,7 +8,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import javax.annotation.PostConstruct; import java.time.ZonedDateTime; @Service @@ -20,8 +18,8 @@ public class ServiceBusService { @Value("${azure.sb.paaInviaRT.name}") private String queueName; - @Value("${disable-service-bus}") - private boolean disableServiceBus; + @Value("${disable-service-bus-sender}") + private boolean disableServiceBusSender; @Autowired private ServiceBusSenderClient serviceBusSenderClient; @@ -30,7 +28,7 @@ public class ServiceBusService { Service Bus send message to paainviart Queue */ public void sendMessage(String message, Integer scheduledTimeInMinutes) { - if (!disableServiceBus) { + if (!disableServiceBusSender) { ServiceBusMessage serviceBusMessage = new ServiceBusMessage(message); if (scheduledTimeInMinutes != null) { serviceBusMessage.setScheduledEnqueueTime(ZonedDateTime.now().plusMinutes(scheduledTimeInMinutes).toOffsetDateTime()); diff --git a/src/main/java/it/gov/pagopa/wispconverter/servicebus/ECommerceHangTimeoutConsumer.java b/src/main/java/it/gov/pagopa/wispconverter/servicebus/ECommerceHangTimeoutConsumer.java index ae692f6d..e2a39a5a 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/servicebus/ECommerceHangTimeoutConsumer.java +++ b/src/main/java/it/gov/pagopa/wispconverter/servicebus/ECommerceHangTimeoutConsumer.java @@ -44,12 +44,12 @@ public class ECommerceHangTimeoutConsumer extends SBConsumer { @Autowired private ReceiptService receiptService; - @Value("${disable-service-bus}") - private boolean disableServiceBus; + @Value("${disable-service-bus-receiver}") + private boolean disableServiceBusReceiver; @PostConstruct public void post() { - if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBus) { + if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBusReceiver) { receiverClient = CommonUtility.getServiceBusProcessorClient(connectionString, queueName, this::processMessage, this::processError); } } @@ -57,7 +57,7 @@ public void post() { @EventListener(ApplicationReadyEvent.class) public void initializeClient() { - if (receiverClient != null && !disableServiceBus) { + if (receiverClient != null && !disableServiceBusReceiver) { log.info("[Scheduled] Starting ECommerceHangTimeoutConsumer {}", ZonedDateTime.now()); receiverClient.start(); } diff --git a/src/main/java/it/gov/pagopa/wispconverter/servicebus/PaymentTimeoutConsumer.java b/src/main/java/it/gov/pagopa/wispconverter/servicebus/PaymentTimeoutConsumer.java index e1a5d947..906d55f9 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/servicebus/PaymentTimeoutConsumer.java +++ b/src/main/java/it/gov/pagopa/wispconverter/servicebus/PaymentTimeoutConsumer.java @@ -35,12 +35,12 @@ public class PaymentTimeoutConsumer extends SBConsumer { @Autowired private ReceiptService receiptService; - @Value("${disable-service-bus}") - private boolean disableServiceBus; + @Value("${disable-service-bus-receiver}") + private boolean disableServiceBusReceiver; @EventListener(ApplicationReadyEvent.class) public void initializeClient() { - if (receiverClient != null && !disableServiceBus) { + if (receiverClient != null && !disableServiceBusReceiver) { log.info("[Scheduled] Starting PaymentTimeoutConsumer {}", ZonedDateTime.now()); receiverClient.start(); } @@ -48,7 +48,7 @@ public void initializeClient() { @PostConstruct public void post() { - if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBus) { + if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBusReceiver) { receiverClient = CommonUtility.getServiceBusProcessorClient(connectionString, queueName, this::processMessage, this::processError); } } diff --git a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RPTTimeoutConsumer.java b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RPTTimeoutConsumer.java index 4d23b416..d6eb12bc 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RPTTimeoutConsumer.java +++ b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RPTTimeoutConsumer.java @@ -62,12 +62,12 @@ public class RPTTimeoutConsumer extends SBConsumer { @Autowired private it.gov.pagopa.gen.wispconverter.client.decouplercaching.invoker.ApiClient decouplerCachingClient; - @Value("${disable-service-bus}") - private boolean disableServiceBus; + @Value("${disable-service-bus-receiver}") + private boolean disableServiceBusReceiver; @PostConstruct public void post() { - if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBus) { + if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBusReceiver) { receiverClient = CommonUtility.getServiceBusProcessorClient(connectionString, queueName, this::processMessage, this::processError); } } @@ -75,7 +75,7 @@ public void post() { @EventListener(ApplicationReadyEvent.class) public void initializeClient() { - if (receiverClient != null && !disableServiceBus) { + if (receiverClient != null && !disableServiceBusReceiver) { log.info("[Scheduled] Starting RPTTimeoutConsumer {}", ZonedDateTime.now()); receiverClient.start(); } diff --git a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java index 40d60efe..5afa31ec 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java +++ b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java @@ -71,12 +71,12 @@ public class RTConsumer extends SBConsumer { @Autowired private JaxbElementUtil jaxbElementUtil; - @Value("${disable-service-bus}") - private boolean disableServiceBus; + @Value("${disable-service-bus-receiver}") + private boolean disableServiceBusReceiver; @EventListener(ApplicationReadyEvent.class) public void initializeClient() { - if (receiverClient != null && !disableServiceBus) { + if (receiverClient != null && !disableServiceBusReceiver) { log.info("[Scheduled] Starting RTConsumer {}", ZonedDateTime.now()); receiverClient.start(); } @@ -84,7 +84,7 @@ public void initializeClient() { @PostConstruct public void post() { - if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBus) { + if (StringUtils.isNotBlank(connectionString) && !connectionString.equals("-") && !disableServiceBusReceiver) { receiverClient = CommonUtility .getServiceBusProcessorClient( connectionString, queueName, this::processMessage, this::processError diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0b2d176f..4a1aace9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -44,7 +44,8 @@ otel.service.name=${OTEL_SERVICE_NAME:pagopa-wisp-converter} cors.configuration=${CORS_CONFIGURATION:{"origins": ["*"], "methods": ["*"]}} # Service Bus configuration -disable-service-bus=${DISABLE_SERVICE_BUS:false} +disable-service-bus-sender=${DISABLE_SERVICE_BUS_SENDER:false} +disable-service-bus-receiver=${DISABLE_SERVICE_BUS_RECEIVER:false} azure.sb.wisp-payment-timeout-queue.connectionString=${SERVICE_BUS_PAYMENT_TIMEOUT_QUEUE_CONNECTION_STRING:-} azure.sb.wisp-paainviart-queue.connectionString=${SERVICE_BUS_PAAINVIART_QUEUE_CONNECTION_STRING:-} azure.sb.paaInviaRT.name=${PAAINVIART_SERVICE_BUS_NAME:nodo_wisp_paainviart_queue} From 5b16d9c5859a4134bf502d0b736ccdc66893a1d7 Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Mon, 14 Oct 2024 07:07:04 +0000 Subject: [PATCH 60/64] Bump to version 0.4.5-7-release-v0.4.x [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 061e4f56..cc6c1f64 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.230.0 -appVersion: 0.4.5-6-release-v0.4.x +version: 0.231.0 +appVersion: 0.4.5-7-release-v0.4.x dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 5f67ba25..8a2ef00d 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-6-release-v0.4.x" + tag: "0.4.5-7-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 4b383b26..4be49510 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-6-release-v0.4.x" + tag: "0.4.5-7-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index b97bad54..c2ad9ff1 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-6-release-v0.4.x" + tag: "0.4.5-7-release-v0.4.x" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index dc117dff..2d60cbf5 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.5-6-release-v0.4.x" + "version": "0.4.5-7-release-v0.4.x" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index 6ae13f49..fcacdeb5 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.5-6-release-v0.4.x" + "version": "0.4.5-7-release-v0.4.x" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 2f8bc559..4b113671 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5-6-release-v0.4.x + 0.4.5-7-release-v0.4.x pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments. From 415aefd0f672237708d0e439d452a7f373194f4d Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Mon, 14 Oct 2024 09:14:24 +0200 Subject: [PATCH 61/64] added comment --- helm/values-prod.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 4be49510..2f4de9a7 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -117,7 +117,7 @@ microservice-chart: µservice-chart STATION_IN_GPD_PARTIAL_PATH: 'gpd-payments/api/v1' RT_SEND_MAX_RETRIES: '5' RT_SEND_SCHEDULING_TIME_IN_MINUTES: '60' - RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_SYSTEM_ERROR' + RT_SEND_NO_DEAD_LETTER_ON_STATES: 'PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_SYSTEM_ERROR' # i.e. retry to send RPT_TIMER_QUEUE_NAME: "nodo_wisp_rpt_timeout_queue" CRON_JOB_SCHEDULE_RECOVERY_ENABLED: 'false' CRON_JOB_SCHEDULE_RECOVERY_RECEIPT_KO_ENABLED: '0 0 * * * *' # top of every hour of every day From 83e2e93c945f68e30ecbc214cee7b1be59f17248 Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Mon, 14 Oct 2024 09:40:25 +0200 Subject: [PATCH 62/64] fix RTConsumer --- .../pagopa/wispconverter/servicebus/RTConsumer.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java index 5afa31ec..5ff96981 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java +++ b/src/main/java/it/gov/pagopa/wispconverter/servicebus/RTConsumer.java @@ -201,12 +201,13 @@ private boolean resendRTToCreditorInstitution(String receiptId, RTRequestEntity receiptDeadLetterRepository.save(mapper.convertValue(receipt, ReceiptDeadLetterEntity.class)); generateREForDeadLetter(receipt); } + else { + // generate a new event in RE for store the unsuccessful re-sending of the receipt + generateREForNotSentRT(e); - // generate a new event in RE for store the unsuccessful re-sending of the receipt - generateREForNotSentRT(e); - - // Rescheduled due to errors caused by faulty communication with creditor institution - reScheduleReceiptSend(receipt, receiptId, compositedIdForReceipt); + // Rescheduled due to errors caused by faulty communication with creditor institution + reScheduleReceiptSend(receipt, receiptId, compositedIdForReceipt); + } } catch (IOException e) { From d45257aa1731054ce550f9326f3d9d6d642b034b Mon Sep 17 00:00:00 2001 From: Francesco Cesareo Date: Mon, 14 Oct 2024 09:44:08 +0200 Subject: [PATCH 63/64] fix application properties --- src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 4a1aace9..8fb073a8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -137,7 +137,7 @@ wisp-converter.cached-requestid-mapping.ttl.minutes=${CACHED_REQUESTID_MAPPING_T wisp-converter.poste-italiane.abi-code=07601 wisp-converter.rt-send.max-retries=${RT_SEND_MAX_RETRIES:48} wisp-converter.rt-send.scheduling-time-in-minutes=${RT_SEND_SCHEDULING_TIME_IN_MINUTES:60} -wisp-converter.rt-send.no-dead-letter-on-states=${RT_SEND_NO_DEAD_LETTER_ON_STATES:PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_RT_DUPLICATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_RECEIPT_DUPLICATA,PAA_SYSTEM_ERROR} +wisp-converter.rt-send.no-dead-letter-on-states=${RT_SEND_NO_DEAD_LETTER_ON_STATES:PAA_ID_DOMINIO_ERRATO,PAA_ID_INTERMEDIARIO_ERRATO,PAA_STAZIONE_INT_ERRATA,PAA_SYSTEM_ERROR,PAA_PAGAMENTO_SCONOSCIUTO,PAA_PAGAMENTO_DUPLICATO,PAA_PAGAMENTO_IN_CORSO,PAA_PAGAMENTO_ANNULLATO,PAA_PAGAMENTO_SCADUTO,PAA_SYSTEM_ERROR} wisp-converter.idempotency.lock-validity-in-minutes=${IDEMPOTENCY_LOCK_VALIDITY_IN_MINUTES:30} wisp-converter.refresh.cache.cron=${CACHE_REFRESH_CRON:-} wisp-converter.rtMapper.ctRicevutaTelematica.versioneOggetto=6.2.0 From 2e661a3e97d24747075f854cb1161ecd0d61c84d Mon Sep 17 00:00:00 2001 From: pagopa-github-bot Date: Mon, 14 Oct 2024 07:48:23 +0000 Subject: [PATCH 64/64] Bump to version 0.4.6 [skip ci] --- helm/Chart.yaml | 4 ++-- helm/values-dev.yaml | 2 +- helm/values-prod.yaml | 2 +- helm/values-uat.yaml | 2 +- openapi/openapi.json | 2 +- openapi/openapi_redirect.json | 2 +- pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index cc6c1f64..2b54d753 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: pagopa-wisp-converter description: A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, interfacing them with GPD system type: application -version: 0.231.0 -appVersion: 0.4.5-7-release-v0.4.x +version: 0.232.0 +appVersion: 0.4.6 dependencies: - name: microservice-chart version: 3.0.0 diff --git a/helm/values-dev.yaml b/helm/values-dev.yaml index 8a2ef00d..f91666b5 100644 --- a/helm/values-dev.yaml +++ b/helm/values-dev.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-7-release-v0.4.x" + tag: "0.4.6" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-prod.yaml b/helm/values-prod.yaml index 2f4de9a7..3e0a62ad 100644 --- a/helm/values-prod.yaml +++ b/helm/values-prod.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-7-release-v0.4.x" + tag: "0.4.6" pullPolicy: Always livenessProbe: httpGet: diff --git a/helm/values-uat.yaml b/helm/values-uat.yaml index c2ad9ff1..84e9a7f8 100644 --- a/helm/values-uat.yaml +++ b/helm/values-uat.yaml @@ -4,7 +4,7 @@ microservice-chart: µservice-chart fullnameOverride: "" image: repository: ghcr.io/pagopa/pagopa-wisp-converter - tag: "0.4.5-7-release-v0.4.x" + tag: "0.4.6" pullPolicy: Always livenessProbe: httpGet: diff --git a/openapi/openapi.json b/openapi/openapi.json index 2d60cbf5..24dcb627 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4,7 +4,7 @@ "description": "A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.\n\n# OPERATIVE INFO\n\n\n## EVENT MAPPING IN RE\n\n
Details\nFIELD | SCOPE | DESCRIPTION\n- | - | -\n**requestId** | BOTH | The identifier, set by X-Request-ID, from which the events can be grouped.\n**operationId** | BOTH | The identifier associated to a request identifier\n**clientOperationId** | BOTH | The identifier that associate a client to an operation identifier.\n**component** | BOTH | The applicative component from which the event is generated.
In NDP it is mapped with field 'componente'.
Values:
_WISP_SOAP_CONVERTER_
_WISP_CONVERTER_\n**insertedTimestamp** | BOTH | The time on which the event is inserted in RE storage\n**eventCategory** | BOTH | The category on which the event can be grouped.
In NDP it is mapped with field 'categoriaEvento'.
Values:
_INTERFACE_
_INTERNAL_\n**eventSubcategory** | BOTH | The subcategory related to the specific nature of the event.
In NDP it is mapped with field 'sottoTipoEvento'.
Values:
_REQ_
_RESP_
_INTERN_\n**callType** | INTERFACE | The type of role that the application has in the communication with the remote endpoint.
Values:
_SERVER_
_CLIENT_\n**outcome** | INTERFACE | The outcome of the operation described by the event.
In NDP it is mapped with field 'esito'.
Values:
_SEND_: Correctly sent request to HTTP endpoint. In NDP it is mapped with value 'INVIATA'.
_SEND_FAILURE_: Failed to send request to HTTP endpoint. In NDP it is mapped with value 'INVIATA_KO'
_RECEIVED_: Received an OK response from HTTP endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_RECEIVED_FAILURE_: Received a failure response from endpoint. In NDP it is mapped with value 'RICEVUTA_KO'
_NEVER_RECEIVED_: Failed to receive response at all from endpoint. In NDP it is mapped with value 'NO_RICEVUTA'
_EXECUTED_INTERNAL_STEP_: Executed internal step on execution. In NDP it is mapped with value 'CAMBIO_STATO'\n**httpMethod** | INTERFACE | The HTTP method of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpUri** | INTERFACE | The URI related to the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpHeaders** | INTERFACE | The list of HTTP headers extracted from the request/response analyzed by the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpCallRemoteAddress** | INTERFACE | The remote IP address extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**httpStatusCode** | INTERFACE | The status code extracted from the called endpoint.
This field is set only if the events that describe an HTTP communication with an external service.\n**executionTimeMs** | INTERFACE | The duration time of the invocation of the endpoint related to the event.
This field is set only if the events that describe an HTTP communication with an external service.\n**compressedPayload** | INTERFACE | The payload of the request/response analyzed by the event.
This value is zipped using GZip compression algorithm.\n**compressedPayloadLength** | INTERFACE | The length (in number of characters) of the compressed payload.\n**businessProcess** | INTERFACE | The descriptive label associated to the endpoint called by user and related to the whole process.\n**operationStatus** | INTERFACE | The final status of the whole operation.
This is set only in the events that describe the response in output to user.\n**operationErrorTitle** | INTERFACE | The error title extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorDetail** | INTERFACE | The error detail message extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**operationErrorCode** | INTERFACE | The error code extracted from the computation that refers to the error occurred during computation.
This is set only in the events that describe the response in output to user if there is an error.\n**primitive** | INTERNAL | The typology of primitive analyzed and tracked by the event.
In NDP it is mapped with field 'eventType'.\n**sessionId** | INTERNAL | The session identifier generated by WISP SOAP Converter and used in the request.\n**cartId** | INTERNAL | The cart identifier used in the request.\n**iuv** | INTERNAL | The 'identificativo univoco pagamento' used in the request.\n**noticeNumber** | INTERNAL | The notice number (aka NAV code) used in the request.\n**domainId** | INTERNAL | The creditor institution identifier used in the request.\n**ccp** | INTERNAL | The 'codice contesto pagamento' used in the request.\n**psp** | INTERNAL | The payment service provider used in the request.\n**station** | INTERNAL | The station used in the request.\n**channel** | INTERNAL | The channel used in the request.\n**status** | INTERNAL | The state of the internal step executed.
Values:
_FOUND_RPT_IN_STORAGE_
_FOUND_RT_IN_STORAGE_
_EXTRACTED_DATA_FROM_RPT_
_CREATED_NEW_PAYMENT_POSITION_IN_GPD_
_GENERATED_NAV_FOR_NEW_PAYMENT_POSITION_
_UPDATED_EXISTING_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_INVALID_PAYMENT_POSITION_IN_GPD_
_GENERATING_RT_FOR_REDIRECT_ERROR_
_GENERATED_CACHE_ABOUT_RPT_FOR_DECOUPLER_
_GENERATED_CACHE_ABOUT_RPT_FOR_CARTSESSION_CACHING_
_GENERATED_CACHE_ABOUT_RPT_FOR_RT_GENERATION_
_SAVED_RPT_IN_CART_RECEIVED_REDIRECT_URL_FROM_CHECKOUT_
_RT_NOT_GENERABLE_FOR_GPD_STATION_
_RT_NOT_GENERABLE_FOR_NOT_EXISTING_PAYMENT_POSITION_
_NEGATIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_POSITIVE_RT_TRY_TO_SEND_TO_CREDITOR_INSTITUTION_
_RT_SEND_SUCCESS_
_RT_SEND_FAILURE_
_RT_ALREADY_SENT_
_RT_SEND_SCHEDULING_SUCCESS_
_RT_SEND_SCHEDULING_FAILURE_
_RT_SCHEDULED_SEND_SUCCESS_
_RT_SCHEDULED_SEND_FAILURE_
_RT_SEND_RESCHEDULING_FAILURE_
_RT_SEND_RESCHEDULING_REACHED_MAX_RETRIES_
_RT_SEND_RESCHEDULING_SUCCESS_
_RT_START_RECONCILIATION_PROCESS_
_RT_END_RECONCILIATION_PROCESS_
_RT_DEAD_LETTER_SAVED_
_RT_DEAD_LETTER_FAILED_
_RECEIPT_TIMER_GENERATION_CREATED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_CACHED_SEQUENCE_NUMBER_
_RECEIPT_TIMER_GENERATION_DELETED_SCHEDULED_SEND_
_RECEIPT_TIMER_GENERATION_SKIP_DELETE_SCHEDULED_SEND_
_RECEIPT_TIMER_PAYMENT_TOKEN_TIMEOUT_TRIGGER_
_ECOMMERCE_HANG_TIMER_TRIGGER_
_ECOMMERCE_HANG_TIMER_CREATED_
_ECOMMERCE_HANG_TIMER_DELETED_
_RPT_TIMER_TRIGGER_
_RPT_TIMER_CREATED_
_RPT_TIMER_DELETED_
_RPT_TIMER_NOT_SET_
_COMMUNICATING_WITH_GPD_REQUEST_
_COMMUNICATING_WITH_GPD_RESPONSE_
_COMMUNICATING_WITH_IUV_GENERATOR_REQUEST_
_COMMUNICATING_WITH_IUV_GENERATOR_RESPONSE_
_COMMUNICATING_WITH_CHECKOUT_REQUEST_
_COMMUNICATING_WITH_CHECKOUT_RESPONSE_
_COMMUNICATING_WITH_DECOUPLER_CACHING_REQUEST_
_COMMUNICATING_WITH_DECOUPLER_CACHING_RESPONSE_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_REQUEST_
_COMMUNICATING_WITH_CREDITOR_INSTITUTION_RESPONSE_\n**info** | INTERNAL | The other information that can be inserted for the tracing.\n**paymentToken** | INTERNAL | The payment token.\n\n
\n\n\n## OPERATIONAL ERROR CODES\n\n
Details\nNAME | CODE | DESCRIPTION\n- | - | -\n**WIC-500** | *ERROR* | A not documented generic error occurred while execution. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1000** | *GENERIC_ERROR* | A generic error occurred while executing conversion flow. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1001** | *PARSING_GENERIC_ERROR* | A generic error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1002** | *PARSING_INVALID_HEADER* | An error occurred while parsing of the content header, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1003** | *PARSING_INVALID_BODY* | An error occurred while parsing of the content payload, associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT.\n**WIC-1004** | *PARSING_INVALID_XML_NODES* | An error occurred while parsing of the of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The XML content extracted, either from payload or from header, is invalid because it is not possible to extract tag nodes from document. So, the document is probably empty.\n**WIC-1005** | *PARSING_INVALID_ZIPPED_PAYLOAD* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The SOAP request analyzed and stored in dedicated storage is not usable for convert the debt positions in GPD system. This is probably due to an invalid conversion of the SOAP request via GZip algorithm executed before the same is stored in its storage.\n**WIC-1006** | *PARSING_RPT_PRIMITIVE_NOT_VALID* | An error occurred while parsing of the content associated to the SOAP request related to nodoInviaRPT or nodoInviaCarrelloRPT. The primitive (the content related to header 'soapaction') cannot be handled by WISP Converter application in redirect process: only one of nodoInviaRPT and nodoInviaCarrelloRPT can be accepted.\n**WIC-1100** | *VALIDATION_INVALID_MULTIBENEFICIARY_CART* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, the request is arrived as nodoInviaCarrelloRPT as multi-beneficiary cart, but the number of RPTs in the request is lower than two, so it cannot be correctly handled as multi-beneficiary.\n**WIC-1101** | *VALIDATION_INVALID_IBANS* | An error occurred while analyzing the RPTs extracted from SOAP request. An IBAN must always be set in RPT transfers if they aren't related to digital stamps (which don't require an IBAN, because they will be reported to specific subject). In this case, in one or more RPT transfers not related to digital stamp, the IBAN is not correctly set.\n**WIC-1102** | *VALIDATION_INVALID_DEBTOR* | An error occurred while analyzing the RPTs extracted from SOAP request. In particular, in a cart there are different debtor subjects and this is not permitted for this flow. So, the whole cart is discarded.\n**WIC-1200** | *CONFIGURATION_INVALID_CACHE* | An error occurred while trying to access data from cached configuration. It is possible that the cache is not retrieved yet by this service or a corrupted configuration was returned from APIConfig Cache internal service. If this problem still occurs, please check the connectivity with APIConfig Cache.\n**WIC-1201** | *CONFIGURATION_INVALID_STATION* | An error occurred while retrieving data from local cached configuration. In particular, it is not possible to retrieve the configuration about the station because it does not exists in cache, and maybe also in general configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1202** | *CONFIGURATION_INVALID_CREDITOR_INSTITUTION_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the required station does not exists in cached configuration. So, a change in whole configuration and/or a refresh on cache is required.\n**WIC-1203** | *CONFIGURATION_INVALID_STATION_REDIRECT_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration about redirection in error cases is not correctly set to points towards some creditor institution's endpoint. So, a change in configuration is required.\n**WIC-1204** | *CONFIGURATION_INVALID_STATION_SERVICE_URL* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint for RT generator. So, a change in configuration is required.\n**WIC-1205** | *CONFIGURATION_NOT_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is not correctly set to points towards GPD service endpoint. So, a change in configuration is required.\n**WIC-1206** | *CONFIGURATION_INVALID_GPD_STATION* | An error occurred while checking the station that will be used for the payment process. In particular, analyzing the station that is related to the segregation code extracted from a payment option's notice number, it turns out that the configuration is correctly set to points towards GPD service endpoint but uses the 'v1' primitive version (and it must use the 'v2' version). So, a change in configuration is required.\n**WIC-1207** | *CONFIGURATION_INVALID_STATION_PROXY* | An error occurred while checking the station that will be used for the receipt send process. In particular, analyzing the station it turns out that the configuration is not correctly set to configure proxy structure for RT generator. So, a change in configuration is required.\n**WIC-1300** | *PAYMENT_POSITION_NOT_IN_PAYABLE_STATE* | An error occurred while checking an existing payment position. One or more RPTs extracted from the request refers to existing payment positions in GPD that have a state from which it is impossible to execute a payment flow. If the execution of this flow is related to a RPT cart, all the payments that can be retrieved or generated ex novo from those RPTs are declared as atomically invalid (if one RPT in cart is bad, all RPTs in cart are bad) and not payable with this flow.\n**WIC-1301** | *PAYMENT_POSITION_IN_INCONSISTENT_STATE* | An error occurred while checking an existing payment position in GPD system. The retrieved payment position, previously inserted in GPD by this same flow or by other procedures, is in an invalid state, not mappable to an existing value. This can be related to a wrong setting in GPD or a corruption of the retrieved data.\n**WIC-1302** | *PAYMENT_POSITION_NOT_VALID* | An error occurred while generating a payment position. In particular, something during the generation of a new payment position or the analysis of an existing payment position went wrong and the operation cannot be completed. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1303** | *PAYMENT_OPTION_NOT_EXTRACTABLE* | An error occurred while extracting a payment option from a payment position. This can be caused by a malformed payment position that does not have a payment option. Remember that a payment position in this flow must have one and only one payment option.\n**WIC-1400** | *RECEIPT_GENERATION_GENERIC_ERROR* | An error occurred while generating an RT (aka a receipt). An unhandled error occurred and it is impossible to complete the process. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1401** | *RECEIPT_GENERATION_WRONG_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an invalid response from which is impossible to continue the analysis. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1402** | *RECEIPT_GENERATION_ERROR_RESPONSE_FROM_CREDITOR_INSTITUTION* | An error occurred while generating an RT (aka a receipt). Specifically, the RT request is sent to creditor institution but this one responded with an error response that explicit the occurred problem. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1403** | *RECEIPT_KO_NOT_SENT* | An error occurred while sending a negative RT (aka a KO receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1404** | *RECEIPT_OK_NOT_SENT* | An error occurred while sending a positive RT (aka a OK receipt). So, no receipt can be sent lately to creditor institution and probably the process must be executed manually. For better understanding the cause, please use the Technical Support's APIs.\n**WIC-1405** | *RECEIPT_GENERATION_IDEMPOTENCY_LOCKED_BY_ANOTHER_PROCESS* | An error occurred while generating an RT (aka a receipt). Two or more generation processes are concurrently trying to execute the same operation on the same receipt but only one of them is currently 'authorized' to do so.\n**WIC-1406** | *RECEIPT_GENERATION_NOT_PROCESSABLE* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be started correctly because it is trying to lock the idempotency key that is already in a locked state. Probably the process is in execution by another thread.\n**WIC-1407** | *RECEIPT_GENERATION_ALREADY_PROCESSED* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because it is trying to unlock the idempotency key that is not in a locked state. Probably the process was already completed.\n**WIC-1408** | *RECEIPT_GENERATION_ANOMALY_ON_PROCESSING* | An error occurred while generating an RT (aka a receipt). The process of receipt generation cannot be completed correctly because there is a mismatch between the type of the cached receipt and the kind of request made for generate the same receipt. For example, the cached receipt is defined as negative paaInviaRT but the request was made to 'receipt/ok' endpoint. This is an anomaly that should never happens in a correct NMU flow execution but must be traced in case of error.\n**WIC-1409** | *RECEIPT_KO_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a negative RT (aka a KO receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1410** | *RECEIPT_OK_NOT_GENERATED_BUT_MAYBE_RESCHEDULED* | An error occurred while generating a positive RT (aka a OK receipt). The receipt could be sent lately to creditor institution but for better understanding the cause, please use the Technical Support's APIs.\n**WIC-1411** | *RECEIPT_GENERATION_ERROR_DEAD_LETTER* | An error occurred while generating an RT (aka a receipt). Specifically, the creditor institution response status has not been recognized, for this reason the RT has been placed in the dead letter container.\n**WIC-2000** | *PERSISTENCE_SAVING_RE_ERROR* | An error occurred wile trying to store a new event in the Registro Eventi storage. The error is somewhat related to a persistence problem of the used storage and in the majority of the cases is temporary (maybe a 429 HTTP code). This error currently blocks the entire flow because that can lead to untraceable requests. For better understanding the cause, please execute a search in the log provider (Application Insights, Kibana, etc).\n**WIC-2001** | *PERSISTENCE_RPT_NOT_FOUND* | An error occurred while trying to retrieve the RPT content saved in storage by WISP SOAP Converter. This can be related either with the use of a wrong sessionId or a missed persistence from WISP SOAP Converter, so it is better to analyze the entire flow using Technical Support's APIs. This block totally the conversion of the RPTs in GPD's payment positions, so the whole process is discarded.\n**WIC-2002** | *PERSISTENCE_RT_NOT_FOUND* | An error occurred while trying to retrieve the RT content saved in storage by WISP Converter. This can be related either with the use of a wrong identifier, a missed persistence or an expired object, so it is better to analyze the entire flow using Technical Support's APIs.\n**WIC-2003** | *PERSISTENCE_REQUESTID_CACHING_ERROR* | An error occurred while trying to retrieve data from internal cache. Specifically, the cached key, defined in format wisp_nav2iuv__
\n", "termsOfService": "https://www.pagopa.gov.it/", "title": "WISP Converter", - "version": "0.4.5-7-release-v0.4.x" + "version": "0.4.6" }, "servers": [ { diff --git a/openapi/openapi_redirect.json b/openapi/openapi_redirect.json index fcacdeb5..df21d3d1 100644 --- a/openapi/openapi_redirect.json +++ b/openapi/openapi_redirect.json @@ -2,7 +2,7 @@ "openapi": "3.0.1", "info": { "title": "WISP-Converter-redirect", - "version": "0.4.5-7-release-v0.4.x" + "version": "0.4.6" }, "servers": [ { diff --git a/pom.xml b/pom.xml index 4b113671..e621b460 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ it.gov.pagopa wisp-converter - 0.4.5-7-release-v0.4.x + 0.4.6 pagoPA WISP Converter A service that permits to handle nodoInviaRPT and nodoInviaCarrelloRPT request from WISP, converting them in NMU payments.