diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetHmppsIdService.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetHmppsIdService.kt index b00eee3b4..e89814e78 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetHmppsIdService.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetHmppsIdService.kt @@ -11,10 +11,16 @@ class GetHmppsIdService( @Autowired val getPersonService: GetPersonService, ) { fun execute(hmppsId: String): Response { - val personResponse = getPersonService.execute(hmppsId = hmppsId) + val personResponse = getPersonService.execute(hmppsId) + + val hmppsIdToReturn = + personResponse.data?.hmppsId ?: run { + // Attempt to look up the person in NOMIS if not found in the probation offender search + getPersonService.getPersonFromNomis(hmppsId).data?.prisonerNumber + } return Response( - data = HmppsId(hmppsId = personResponse.data?.hmppsId), + data = HmppsId(hmppsIdToReturn), errors = personResponse.errors, ) } diff --git a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetPersonService.kt b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetPersonService.kt index cd584f58a..108c1571e 100644 --- a/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetPersonService.kt +++ b/src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/GetPersonService.kt @@ -103,4 +103,6 @@ class GetPersonService( errors = (prisonResponse?.errors ?: emptyList()) + probationResponse.errors, ) } + + fun getPersonFromNomis(nomisNumber: String) = prisonerOffenderSearchGateway.getPrisonOffender(nomisNumber) } diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/HmppsIdIntegrationTest.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/HmppsIdIntegrationTest.kt index fb282d229..a0244d749 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/HmppsIdIntegrationTest.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/HmppsIdIntegrationTest.kt @@ -44,6 +44,19 @@ class HmppsIdIntegrationTest : IntegrationTestBase() { ) } + @Test + fun `gets the nomis Id for a HMPPSID where the id is a NOMIS id AND is not in delius`() { + callApi("/v1/hmpps/id/$nomsIdNotInDelius/nomis-number") + .andExpect(status().isOk) + .andExpect( + content().json( + """ + {"data":{"nomisNumber":"A1234AA"}} + """, + ), + ) + } + @Test fun `gets the nomis Id for a HMPPSID where the id is invalid`() { callApi("/v1/hmpps/id/invalidId/nomis-number") diff --git a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/IntegrationTestBase.kt b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/IntegrationTestBase.kt index 60e908702..93349203a 100644 --- a/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/IntegrationTestBase.kt +++ b/src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/integration/IntegrationTestBase.kt @@ -28,6 +28,7 @@ abstract class IntegrationTestBase { final val pnc = URLEncoder.encode("2004/13116M", StandardCharsets.UTF_8) final val nomsId = "G2996UX" final val crn = "AB123123" + final val nomsIdNotInDelius = "A1234AA" companion object { private val hmppsAuthMockServer = HmppsAuthMockServer()