Repository: companieshouse/psc-verification-api
Pull request #82: Retrieve and store Internal Id upon POST of PscVerificationData
Author: login: PhilipGlover
Created: 2025-03-17T16:11:35Z | Merged: 2025-03-19T13:05:20Z

Add lookup, handling and storing of Internal Id upon POST of Verification

SDK changes done and approved in https://github.com/companieshouse/api-sdk-java/pull/391

IDVA3-2926

If PSC Id does not exits:

![Screenshot 2025-03-19 at 12 05 32 pm](https://github.com/user-attachments/assets/45075dbd-79f5-4034-a094-2428b73f8dc5)

If Internal Id is missing on PSC:

![Screenshot 2025-03-19 at 12 19 31 pm](https://github.com/user-attachments/assets/2c774af5-0d15-4490-a508-53f0154a725c)

Note have updated `spring-boot-dependencies.version` to 3.4.3 to remove `tomcat-embed-core` vulnerability


Diff:
diff --git a/pom.xml b/pom.xml
index 039f2e6..5a1ceb9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
         <skip.integration.tests>false</skip.integration.tests>
         <skip.unit.tests>false</skip.unit.tests>
         <!-- Spring -->
-        <spring-boot-dependencies.version>3.4.2</spring-boot-dependencies.version>
+        <spring-boot-dependencies.version>3.4.3</spring-boot-dependencies.version>
         <!-- Maven -->
         <maven.compiler.source>21</maven.compiler.source>
         <maven.compiler.target>21</maven.compiler.target>
@@ -36,7 +36,7 @@
         <structured-logging.version>3.0.15</structured-logging.version>
         <api-security-java.version>2.0.7</api-security-java.version>
         <api-helper-java.version>3.0.1</api-helper-java.version>
-        <api-sdk-java.version>6.0.39</api-sdk-java.version>
+        <api-sdk-java.version>6.1.1</api-sdk-java.version>
         <sdk-manager-java.version>3.0.10</sdk-manager-java.version>
         <api-sdk-manager-java-library.version>3.0.5</api-sdk-manager-java-library.version>
         <private-api-sdk-java.version>4.0.241</private-api-sdk-java.version>
diff --git a/src/main/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImpl.java b/src/main/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImpl.java
index d7498a5..2a4a983 100644
--- a/src/main/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImpl.java
+++ b/src/main/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImpl.java
@@ -26,6 +26,8 @@
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.util.UriComponentsBuilder;
 import uk.gov.companieshouse.api.model.common.ResourceLinks;
+import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
+import uk.gov.companieshouse.api.model.pscverification.InternalData;
 import uk.gov.companieshouse.api.model.pscverification.PscVerificationApi;
 import uk.gov.companieshouse.api.model.pscverification.PscVerificationData;
 import uk.gov.companieshouse.api.model.pscverification.VerificationDetails;
@@ -34,15 +36,18 @@
 import uk.gov.companieshouse.logging.Logger;
 import uk.gov.companieshouse.patch.model.PatchResult;
 import uk.gov.companieshouse.pscverificationapi.controller.PscVerificationController;
+import uk.gov.companieshouse.pscverificationapi.enumerations.PscType;
 import uk.gov.companieshouse.pscverificationapi.error.RetrievalFailureReason;
 import uk.gov.companieshouse.pscverificationapi.exception.FilingResourceNotFoundException;
 import uk.gov.companieshouse.pscverificationapi.exception.InvalidFilingException;
 import uk.gov.companieshouse.pscverificationapi.exception.InvalidPatchException;
+import uk.gov.companieshouse.pscverificationapi.exception.PscLookupServiceException;
 import uk.gov.companieshouse.pscverificationapi.helper.LogMapHelper;
 import uk.gov.companieshouse.pscverificationapi.model.entity.PscVerification;
 import uk.gov.companieshouse.pscverificationapi.model.mapper.PscVerificationMapper;
 import uk.gov.companieshouse.pscverificationapi.service.PscVerificationService;
 import uk.gov.companieshouse.pscverificationapi.service.TransactionService;
+import uk.gov.companieshouse.pscverificationapi.service.impl.PscLookupServiceImpl;
 import uk.gov.companieshouse.sdk.manager.ApiSdkManager;
 
 @RestController
@@ -56,14 +61,17 @@ public class PscVerificationControllerImpl implements PscVerificationController
 
     private final TransactionService transactionService;
     private final PscVerificationService pscVerificationService;
+    private final PscLookupServiceImpl pscLookupService;
     private final PscVerificationMapper filingMapper;
     private final Clock clock;
     private final Logger logger;
 
     public PscVerificationControllerImpl(final TransactionService transactionService,
-        final PscVerificationService pscVerificationService, PscVerificationMapper filingMapper, final Clock clock, final Logger logger) {
+        final PscVerificationService pscVerificationService, final PscLookupServiceImpl pscLookupService,
+        PscVerificationMapper filingMapper, final Clock clock, final Logger logger) {
             this.transactionService = transactionService;
             this.pscVerificationService = pscVerificationService;
+            this.pscLookupService = pscLookupService;
             this.filingMapper = filingMapper;
             this.clock = clock;
             this.logger = logger;
@@ -89,6 +97,19 @@ public ResponseEntity<PscVerificationApi> createPscVerification(
             getPassthroughHeader(request));
 
         final var entity = filingMapper.toEntity(data);
+
+        PscIndividualFullRecordApi pscIndividualFullRecordApi;
+        pscIndividualFullRecordApi = pscLookupService.getPscIndividualFullRecord(requestTransaction, data, PscType.INDIVIDUAL);
+
+        if (pscIndividualFullRecordApi.getInternalId() == null) {
+            logMap.put("psc_notification_id", data.pscNotificationId());
+            logger.errorContext(String.format("PSC Id %s does not have an Internal ID in PSC Data API for company number %s", data.pscNotificationId(), data.companyNumber()), null, logMap);
+            throw new PscLookupServiceException("We are currently unable to process a Verification filing for this PSC", new Exception("Internal Id"));
+        }
+
+        var internalData = InternalData.newBuilder().internalId(String.valueOf(pscIndividualFullRecordApi.getInternalId())).build();
+        entity.setInternalData(internalData);
+
         final var savedEntity = saveFilingWithLinks(entity, transId, request, logMap);
 
         if (transaction != null) {
diff --git a/src/main/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerification.java b/src/main/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerification.java
index da673ac..d52db97 100644
--- a/src/main/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerification.java
+++ b/src/main/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerification.java
@@ -9,6 +9,7 @@
 import org.springframework.data.annotation.Id;
 import org.springframework.data.mongodb.core.mapping.Document;
 import uk.gov.companieshouse.api.model.common.ResourceLinks;
+import uk.gov.companieshouse.api.model.pscverification.InternalData;
 import uk.gov.companieshouse.api.model.pscverification.PscVerificationData;
 
 @Document(collection = "psc_verification")
@@ -27,6 +28,9 @@ public final class PscVerification implements Touchable {
     @JsonMerge
     @JsonProperty("data")
     private PscVerificationData data;
+    // No @JsonMerge: this property MUST NOT be modifiable by PATCH requests
+    @JsonProperty("internal_data")
+    private InternalData internalData;
 
     public PscVerification() {
         // required by Spring Data
@@ -38,6 +42,7 @@ private PscVerification(final Builder builder) {
         setUpdatedAt(builder.updatedAt);
         setLinks(builder.links);
         setData(builder.data);
+        setInternalData(builder.internalData);
     }
 
     public static Builder newBuilder() {
@@ -51,6 +56,7 @@ public static Builder newBuilder(final PscVerification copy) {
         builder.updatedAt = copy.getUpdatedAt();
         builder.links = copy.getLinks();
         builder.data = copy.getData();
+        builder.internalData = copy.getInternalData();
         return builder;
     }
 
@@ -74,6 +80,10 @@ public PscVerificationData getData() {
         return data;
     }
 
+    public InternalData getInternalData() {
+        return internalData;
+    }
+
     @Override
     public boolean equals(final Object o) {
         if (this == o) return true;
@@ -81,12 +91,12 @@ public boolean equals(final Object o) {
         return Objects.equals(getId(), that.getId()) && Objects.equals(getCreatedAt(),
             that.getCreatedAt()) && Objects.equals(getUpdatedAt(),
             that.getUpdatedAt()) && Objects.equals(getLinks(), that.getLinks()) && Objects.equals(
-            getData(), that.getData());
+            getData(), that.getData()) && Objects.equals(getInternalData(), that.getInternalData());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(getId(), getCreatedAt(), getUpdatedAt(), getLinks(), getData());
+        return Objects.hash(getId(), getCreatedAt(), getUpdatedAt(), getLinks(), getData(), getInternalData());
     }
 
     @Override
@@ -97,6 +107,7 @@ public String toString() {
             .add("updatedAt=" + getUpdatedAt())
             .add("links=" + getLinks())
             .add("data=" + getData())
+            .add("internalData=" + getInternalData())
             .toString();
     }
 
@@ -120,6 +131,10 @@ public void setData(final PscVerificationData data) {
         this.data = data;
     }
 
+    public void setInternalData(final InternalData internalData) {
+        this.internalData = internalData;
+    }
+
     @Override
     public void touch(Instant instant) {
         this.updatedAt = instant;
@@ -134,6 +149,7 @@ public static final class Builder {
         private Instant updatedAt;
         private ResourceLinks links;
         private PscVerificationData data;
+        private InternalData internalData;
 
         private Builder() {
         }
@@ -198,6 +214,18 @@ public Builder data(final PscVerificationData data) {
             return this;
         }
 
+        /**
+         * Sets the {@code internalData} and returns a reference to this Builder so that the methods can be
+         * chained together.
+         *
+         * @param internalData the {@code internalData} to set
+         * @return a reference to this Builder
+         */
+        public Builder internalData(final InternalData internalData) {
+            this.internalData = internalData;
+            return this;
+        }
+
         /**
          * Returns a {@code PscVerification} built from the parameters previously set.
          *
diff --git a/src/main/java/uk/gov/companieshouse/pscverificationapi/model/mapper/PscVerificationMapper.java b/src/main/java/uk/gov/companieshouse/pscverificationapi/model/mapper/PscVerificationMapper.java
index 3dc9ea3..6601cf2 100644
--- a/src/main/java/uk/gov/companieshouse/pscverificationapi/model/mapper/PscVerificationMapper.java
+++ b/src/main/java/uk/gov/companieshouse/pscverificationapi/model/mapper/PscVerificationMapper.java
@@ -24,6 +24,7 @@ public interface PscVerificationMapper {
 
     @Mapping(target = "etag", ignore = true)
     @Mapping(target = "kind", ignore = true)
+    @Mapping(target = "internalData", ignore = true)
     PscVerificationApi toApi(final PscVerification verification);
 
     PscVerificationDataForUpdating toForUpdating(final PscVerificationData data);
diff --git a/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplIT.java b/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplIT.java
index 7de6ce5..1aabec8 100644
--- a/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplIT.java
+++ b/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplIT.java
@@ -44,16 +44,18 @@
 import org.springframework.test.web.servlet.MockMvc;
 import uk.gov.companieshouse.api.model.common.ResourceLinks;
 import uk.gov.companieshouse.api.model.psc.PscApi;
+import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
 import uk.gov.companieshouse.api.model.pscverification.PscVerificationData;
 import uk.gov.companieshouse.api.model.pscverification.RelevantOfficer;
 import uk.gov.companieshouse.logging.Logger;
+import uk.gov.companieshouse.pscverificationapi.enumerations.PscType;
 import uk.gov.companieshouse.pscverificationapi.error.RestExceptionHandler;
 import uk.gov.companieshouse.pscverificationapi.model.entity.PscVerification;
 import uk.gov.companieshouse.pscverificationapi.model.mapper.PscVerificationMapperImpl;
-import uk.gov.companieshouse.pscverificationapi.service.PscLookupService;
 import uk.gov.companieshouse.pscverificationapi.service.PscVerificationService;
 import uk.gov.companieshouse.pscverificationapi.service.TransactionService;
 import uk.gov.companieshouse.pscverificationapi.service.VerificationValidationService;
+import uk.gov.companieshouse.pscverificationapi.service.impl.PscLookupServiceImpl;
 
 @Tag("web")
 @WebMvcTest(controllers = PscVerificationControllerImpl.class)
@@ -71,7 +73,7 @@ class PscVerificationControllerImplIT extends BaseControllerIT {
     @MockBean
     private TransactionService transactionService;
     @MockBean
-    private PscLookupService lookupService;
+    private PscLookupServiceImpl lookupService;
     @MockBean
     private PscVerificationService pscVerificationService;
     @MockBean
@@ -81,6 +83,8 @@ class PscVerificationControllerImplIT extends BaseControllerIT {
     @MockBean
     private PscApi pscDetails;
     @MockBean
+    private PscIndividualFullRecordApi pscIndividualFullRecordApi;
+    @MockBean
     private MongoDatabaseFactory mongoDatabaseFactory;
     @SpyBean
     private PscVerificationMapperImpl filingMapper;
@@ -147,6 +151,7 @@ void createVerificationWhenPayloadOk(final PscVerificationData dto, final boolea
             .thenAnswer(i -> PscVerification.newBuilder(i.getArgument(0)).build()
                 // copy of first argument
             );
+        when(lookupService.getPscIndividualFullRecord(transaction, dto, PscType.INDIVIDUAL)).thenReturn(pscIndividualFullRecordApi);
         when(clock.instant()).thenReturn(FIRST_INSTANT);
 
         final var expectedStatementNames = isRLE ? List.of(RO_IDENTIFIED.toString(),
diff --git a/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplTest.java b/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplTest.java
index 882180e..a715edd 100644
--- a/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplTest.java
+++ b/src/test/java/uk/gov/companieshouse/pscverificationapi/controller/impl/PscVerificationControllerImplTest.java
@@ -35,6 +35,8 @@
 import org.springframework.validation.FieldError;
 import org.springframework.web.util.UriComponentsBuilder;
 import uk.gov.companieshouse.api.model.common.ResourceLinks;
+import uk.gov.companieshouse.api.model.psc.PscIndividualFullRecordApi;
+import uk.gov.companieshouse.api.model.pscverification.InternalData;
 import uk.gov.companieshouse.api.model.pscverification.PscVerificationApi;
 import uk.gov.companieshouse.api.model.pscverification.PscVerificationData;
 import uk.gov.companieshouse.api.model.pscverification.VerificationDetails;
@@ -43,14 +45,17 @@
 import uk.gov.companieshouse.logging.Logger;
 import uk.gov.companieshouse.patch.model.PatchResult;
 import uk.gov.companieshouse.pscverificationapi.controller.PscVerificationController;
+import uk.gov.companieshouse.pscverificationapi.enumerations.PscType;
 import uk.gov.companieshouse.pscverificationapi.error.RetrievalFailureReason;
 import uk.gov.companieshouse.pscverificationapi.exception.FilingResourceNotFoundException;
 import uk.gov.companieshouse.pscverificationapi.exception.InvalidPatchException;
+import uk.gov.companieshouse.pscverificationapi.exception.PscLookupServiceException;
 import uk.gov.companieshouse.pscverificationapi.model.entity.PscVerification;
 import uk.gov.companieshouse.pscverificationapi.model.mapper.PscVerificationMapper;
 import uk.gov.companieshouse.pscverificationapi.model.mapper.PscVerificationMapperImpl;
 import uk.gov.companieshouse.pscverificationapi.service.PscVerificationService;
 import uk.gov.companieshouse.pscverificationapi.service.TransactionService;
+import uk.gov.companieshouse.pscverificationapi.service.impl.PscLookupServiceImpl;
 import uk.gov.companieshouse.sdk.manager.ApiSdkManager;
 
 @ExtendWith(SpringExtension.class) // JUnit 5
@@ -74,6 +79,8 @@ class PscVerificationControllerImplTest {
     private TransactionService transactionService;
     @Mock
     private PscVerificationService pscVerificationService;
+    @Mock
+    private PscLookupServiceImpl pscLookupService;
     @Autowired
     private PscVerificationMapper filingMapper;
     @Mock
@@ -86,7 +93,9 @@ class PscVerificationControllerImplTest {
     private HttpServletRequest request;
     @Mock
     private Transaction transaction;
+    private PscIndividualFullRecordApi pscIndividualFullRecordApi;
     private PscVerificationApi pscVerificationApi;
+    private InternalData internalData;
     private PscVerificationData filing;
     private PscVerification entity;
     private PscVerification entityWithLinks;
@@ -99,20 +108,23 @@ public static Stream<Arguments> provideCreateParams() {
     @BeforeEach
     void setUp() {
         testController = new PscVerificationControllerImpl(transactionService,
-            pscVerificationService, filingMapper, clock, logger);
+            pscVerificationService, pscLookupService, filingMapper, clock, logger);
         VerificationDetails verification = VerificationDetails.newBuilder()
             .uvid(UVID)
             .statements(EnumSet.of(VerificationStatementConstants.INDIVIDUAL_VERIFIED))
             .build();
+        pscIndividualFullRecordApi = new PscIndividualFullRecordApi().internalId(123L);
         filing = PscVerificationData.newBuilder()
             .verificationDetails(verification)
             .companyNumber(COMPANY_NUMBER)
             .pscNotificationId(PSC_ID)
             .build();
+        internalData = InternalData.newBuilder().internalId("123").build();
         entity = PscVerification.newBuilder()
             .createdAt(FIRST_INSTANT)
             .updatedAt(FIRST_INSTANT)
             .data(filing)
+            .internalData(internalData)
             .build();
         final var links = expectEntitySavedWithLinks();
         pscVerificationApi = PscVerificationApi.newBuilder()
@@ -133,6 +145,8 @@ void createPscVerification(final boolean nullBindingResult, final boolean nullPa
         final boolean nullTransaction) {
         expectTransactionIsPresent(nullPassthrough, nullTransaction);
         final var links = expectEntitySavedWithLinks();
+        when(pscLookupService.getPscIndividualFullRecord(nullTransaction ? null : transaction, filing, PscType.INDIVIDUAL))
+                .thenReturn(pscIndividualFullRecordApi);
 
         final var response = testController.createPscVerification(TRANS_ID,
             nullTransaction ? null : transaction, filing, nullBindingResult ? null : result,
@@ -155,6 +169,25 @@ void createPscVerification(final boolean nullBindingResult, final boolean nullPa
         assertThat(response.getBody(), is(equalTo(expectedApi)));
     }
 
+    @Test
+    void createPscVerifcationThrowsFilingExceptionWhenFullRecordNotFound() {
+        when(pscLookupService.getPscIndividualFullRecord(transaction, filing, PscType.INDIVIDUAL))
+                .thenThrow(new PscLookupServiceException("msg", null));
+
+        assertThrows(PscLookupServiceException.class,
+                () ->testController.createPscVerification(TRANS_ID, transaction, filing, result, request));
+    }
+
+    @Test
+    void createPscVerifcationThrowsPscLookupExceptionWhenNoInternalId() {
+        pscIndividualFullRecordApi.setInternalId(null);
+        when(pscLookupService.getPscIndividualFullRecord(transaction, filing, PscType.INDIVIDUAL))
+                .thenReturn(pscIndividualFullRecordApi);
+
+        assertThrows(PscLookupServiceException.class,
+                () ->testController.createPscVerification(TRANS_ID, transaction, filing, result, request));
+    }
+
     @Test
     void getPscVerificationWhenFound() {
 
diff --git a/src/test/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerificationTest.java b/src/test/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerificationTest.java
index da13c5b..d1bfc66 100644
--- a/src/test/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerificationTest.java
+++ b/src/test/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerificationTest.java
@@ -16,6 +16,7 @@
 import org.mockito.junit.jupiter.MockitoExtension;
 import uk.gov.companieshouse.api.model.common.ResourceLinks;
 import uk.gov.companieshouse.api.model.psc.NameElementsApi;
+import uk.gov.companieshouse.api.model.pscverification.InternalData;
 import uk.gov.companieshouse.api.model.pscverification.NameMismatchReasonConstants;
 import uk.gov.companieshouse.api.model.pscverification.PscVerificationData;
 import uk.gov.companieshouse.api.model.pscverification.RelevantOfficer;
@@ -34,6 +35,7 @@ class PscVerificationTest {
     private PscVerification testVerification;
     private ResourceLinks links;
     private PscVerificationData data;
+    private InternalData internalData;
     private VerificationDetails verif;
     private RelevantOfficer relevantOfficer;
     private NameElementsApi nameElements;
@@ -67,12 +69,14 @@ void setUp() {
             .verificationDetails(verif)
             .relevantOfficer(relevantOfficer)
             .build();
+        internalData = InternalData.newBuilder().internalId("123").build();
         testVerification = PscVerification.newBuilder()
             .id("id")
             .createdAt(INSTANT)
             .updatedAt(INSTANT)
             .links(links)
             .data(data)
+            .internalData(internalData)
             .build();
     }
 
@@ -107,6 +111,7 @@ void testToString() {
                 + "surname='Surname'], "
                 + "dateOfBirth=1990-12-31, isEmployee=true, isDirector=true], "
                 + "verificationDetails=VerificationDetails[uvid='uvid', "
-                + "nameMismatchReason=PREFERRED_NAME, statements=[INDIVIDUAL_VERIFIED]]]]"));
+                + "nameMismatchReason=PREFERRED_NAME, statements=[INDIVIDUAL_VERIFIED]]], "
+                + "internalData=InternalData[internalId=123]]"));
     }
 }
\ No newline at end of file


Reviews:
user: login: hepsimo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:38:59Z
user: login: PhilipGlover
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:44:59Z
user: login: hepsimo
body: Changes look good
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-19T11:46:13Z

Review comments:
diff_hunk: @@ -27,6 +28,8 @@ public final class PscVerification implements Touchable {
     @JsonMerge
     @JsonProperty("data")
     private PscVerificationData data;
+    @JsonProperty("internal_data")
path: src/main/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerification.java
user: login: hepsimo
body: Perhaps a comment for code maintainers?
```// No @JsonMerge: this property MUST NOT be modifiable by PATCH requests```
created_at: 2025-03-19T11:29:57Z
author_association: CONTRIBUTOR
diff_hunk: @@ -27,6 +28,8 @@ public final class PscVerification implements Touchable {
     @JsonMerge
     @JsonProperty("data")
     private PscVerificationData data;
+    @JsonProperty("internal_data")
path: src/main/java/uk/gov/companieshouse/pscverificationapi/model/entity/PscVerification.java
user: login: PhilipGlover
body: nice, added
created_at: 2025-03-19T11:44:58Z
author_association: CONTRIBUTOR

PR comments:
user: login: ch-code-analysis
created_at: 2025-03-19T11:41:43Z
body: CI: No security warnings found
author_association: NONE
user: login: ch-code-analysis
created_at: 2025-03-19T11:56:57Z
body: CI: No security warnings found
author_association: NONE
user: login: ch-code-analysis
created_at: 2025-03-19T12:21:43Z
body: CI: No security warnings found
author_association: NONE
user: login: ch-code-analysis
created_at: 2025-03-19T12:32:32Z
body: CI: No security warnings found
author_association: NONE
user: login: chsonarqubeprchecks[bot]
created_at: 2025-03-19T13:04:51Z
body: ## [![Quality Gate passed](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v104/checks/QualityGateBadge/passed-16px.png 'Quality Gate passed')](https://sonarqube.companieshouse.gov.uk/dashboard?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82) **Quality Gate passed**  
Issues  
[![](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v104/common/passed-16px.png '')](https://sonarqube.companieshouse.gov.uk/project/issues?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82&resolved=false) [0 New issues](https://sonarqube.companieshouse.gov.uk/project/issues?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82&resolved=false)  
[![](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v104/common/accepted-16px.png '')](https://sonarqube.companieshouse.gov.uk/project/issues?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82&issueStatuses=ACCEPTED) [0 Accepted issues](https://sonarqube.companieshouse.gov.uk/project/issues?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82&issueStatuses=ACCEPTED)

Measures  
[![](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v104/common/passed-16px.png '')](https://sonarqube.companieshouse.gov.uk/security_hotspots?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82) [0 Security Hotspots](https://sonarqube.companieshouse.gov.uk/security_hotspots?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82)  
![](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v104/common/no-data-16px.png '') No data about Coverage  
![](https://raw.githubusercontent.com/SonarSource/sonarqube-static-resources/master/v104/common/no-data-16px.png '') No data about Duplication  
  
[See analysis details on SonarQube](https://sonarqube.companieshouse.gov.uk/dashboard?id=uk.gov.companieshouse%3Apsc-verification-api&pullRequest=82)


author_association: NONE
user: login: ch-code-analysis
created_at: 2025-03-19T13:08:55Z
body: CI: No security warnings found
author_association: NONE