Skip to content

Commit aaeb0ff

Browse files
authored
PI-2654 Use external reference for approved premises referrals (#4472)
1 parent 90be6df commit aaeb0ff

File tree

8 files changed

+41
-49
lines changed

8 files changed

+41
-49
lines changed

projects/approved-premises-and-delius/src/dev/kotlin/uk/gov/justice/digital/hmpps/data/generator/ReferralGenerator.kt

+12-8
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ import uk.gov.justice.digital.hmpps.datetime.EuropeLondon
44
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.entity.ApprovedPremises
55
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referral.entity.Referral
66
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referral.entity.Residence
7-
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.Nsi
87
import uk.gov.justice.digital.hmpps.integrations.delius.person.Person
98
import uk.gov.justice.digital.hmpps.integrations.delius.referencedata.ApprovedPremisesCategoryCode
9+
import uk.gov.justice.digital.hmpps.service.EXT_REF_BOOKING_PREFIX
1010
import java.time.LocalDate
1111
import java.time.LocalTime
12-
import java.time.ZoneId
1312
import java.time.ZonedDateTime
1413
import java.time.temporal.ChronoUnit
1514
import java.util.*
@@ -20,22 +19,25 @@ object ReferralGenerator {
2019
val BOOKING_ID = UUID.randomUUID().toString()
2120
var BOOKING_WITHOUT_ARRIVAL = generateReferral(
2221
person = PersonGenerator.PERSON_WITH_BOOKING,
23-
referralNotes = "${Nsi.EXT_REF_BOOKING_PREFIX}$BOOKING_ID${System.lineSeparator()}Some other notes"
22+
referralNotes = "Some other notes",
23+
externalReference = "${EXT_REF_BOOKING_PREFIX}$BOOKING_ID",
2424
)
2525

2626
val ARRIVED_ID = UUID.randomUUID().toString()
2727
var BOOKING_ARRIVED = generateReferral(
2828
person = PersonGenerator.PERSON_WITH_BOOKING,
29-
referralNotes = "${Nsi.EXT_REF_BOOKING_PREFIX}$ARRIVED_ID${System.lineSeparator()}Some other notes",
29+
referralNotes = "Some other notes",
30+
externalReference = "${EXT_REF_BOOKING_PREFIX}$ARRIVED_ID",
3031
expectedArrivalDate = LocalDate.now(),
31-
expectedDepartureDate = LocalDate.now().plusDays(7)
32+
expectedDepartureDate = LocalDate.now().plusDays(7),
3233
)
3334
var ARRIVAL = generateResidence(PersonGenerator.PERSON_WITH_BOOKING, BOOKING_ARRIVED)
3435

3536
val DEPARTED_ID = UUID.randomUUID().toString()
3637
var BOOKING_DEPARTED = generateReferral(
3738
person = PersonGenerator.PERSON_WITH_BOOKING,
38-
referralNotes = "${Nsi.EXT_REF_BOOKING_PREFIX}$DEPARTED_ID${System.lineSeparator()}Some other notes",
39+
referralNotes = "Some other notes",
40+
externalReference = "${EXT_REF_BOOKING_PREFIX}$DEPARTED_ID",
3941
expectedArrivalDate = LocalDate.now().minusDays(8),
4042
expectedDepartureDate = LocalDate.now().minusDays(1)
4143
)
@@ -56,7 +58,8 @@ object ReferralGenerator {
5658
expectedArrivalDate: LocalDate? = LocalDate.now().plusDays(1),
5759
expectedDepartureDate: LocalDate? = LocalDate.now().plusDays(8),
5860
decisionDate: ZonedDateTime? = ZonedDateTime.now(EuropeLondon),
59-
referralNotes: String? = null
61+
referralNotes: String? = null,
62+
externalReference: String? = null
6063
) = Referral(
6164
personId = person.id,
6265
eventId = eventId,
@@ -93,7 +96,8 @@ object ReferralGenerator {
9396
decisionTeamId = TeamGenerator.APPROVED_PREMISES_TEAM.id,
9497
decisionStaffId = 26553,
9598
referringTeamId = TeamGenerator.UNALLOCATED.id,
96-
referringStaffId = 563828
99+
referringStaffId = 563828,
100+
externalReference = externalReference
97101
)
98102

99103
fun generateResidence(

projects/approved-premises-and-delius/src/integrationTest/kotlin/uk/gov/justice/digital/hmpps/MessagingIntegrationInactiveTest.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,11 @@ import uk.gov.justice.digital.hmpps.datetime.EuropeLondon
2222
import uk.gov.justice.digital.hmpps.integrations.approvedpremises.EventDetails
2323
import uk.gov.justice.digital.hmpps.integrations.approvedpremises.PersonArrived
2424
import uk.gov.justice.digital.hmpps.integrations.approvedpremises.PersonDeparted
25-
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referral.entity.PreferredResidence
2625
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referral.entity.PreferredResidenceRepository
2726
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referral.entity.ReferralRepository
2827
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referral.entity.ResidenceRepository
2928
import uk.gov.justice.digital.hmpps.integrations.delius.contact.ContactRepository
30-
import uk.gov.justice.digital.hmpps.integrations.delius.contact.outcome.ContactOutcome
3129
import uk.gov.justice.digital.hmpps.integrations.delius.contact.type.ContactTypeCode
32-
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.Nsi.Companion.EXT_REF_BOOKING_PREFIX
3330
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.NsiRepository
3431
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.NsiTypeCode
3532
import uk.gov.justice.digital.hmpps.integrations.delius.person.address.PersonAddressRepository
@@ -40,6 +37,7 @@ import uk.gov.justice.digital.hmpps.messaging.HmppsChannelManager
4037
import uk.gov.justice.digital.hmpps.messaging.crn
4138
import uk.gov.justice.digital.hmpps.messaging.telemetryProperties
4239
import uk.gov.justice.digital.hmpps.resourceloader.ResourceLoader
40+
import uk.gov.justice.digital.hmpps.service.EXT_REF_BOOKING_PREFIX
4341
import uk.gov.justice.digital.hmpps.telemetry.TelemetryService
4442
import uk.gov.justice.digital.hmpps.test.CustomMatchers.isCloseTo
4543
import java.time.LocalDate

projects/approved-premises-and-delius/src/integrationTest/kotlin/uk/gov/justice/digital/hmpps/MessagingIntegrationTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referra
3030
import uk.gov.justice.digital.hmpps.integrations.delius.contact.ContactRepository
3131
import uk.gov.justice.digital.hmpps.integrations.delius.contact.outcome.ContactOutcome
3232
import uk.gov.justice.digital.hmpps.integrations.delius.contact.type.ContactTypeCode
33-
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.Nsi.Companion.EXT_REF_BOOKING_PREFIX
3433
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.NsiRepository
3534
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.NsiTypeCode
3635
import uk.gov.justice.digital.hmpps.integrations.delius.person.address.PersonAddressRepository
@@ -42,6 +41,7 @@ import uk.gov.justice.digital.hmpps.messaging.HmppsChannelManager
4241
import uk.gov.justice.digital.hmpps.messaging.crn
4342
import uk.gov.justice.digital.hmpps.messaging.telemetryProperties
4443
import uk.gov.justice.digital.hmpps.resourceloader.ResourceLoader
44+
import uk.gov.justice.digital.hmpps.service.EXT_REF_BOOKING_PREFIX
4545
import uk.gov.justice.digital.hmpps.telemetry.TelemetryService
4646
import uk.gov.justice.digital.hmpps.test.CustomMatchers.isCloseTo
4747
import java.time.LocalDate
@@ -185,6 +185,7 @@ internal class MessagingIntegrationTest {
185185
referral.categoryId,
186186
equalTo(ReferenceDataGenerator.REFERRAL_CATEGORIES[ApprovedPremisesCategoryCode.VOLUNTARY_MAPPA.value]?.id)
187187
)
188+
assertThat(referral.externalReference, equalTo("${EXT_REF_BOOKING_PREFIX}14c80733-4b6d-4f35-b724-66955aac320c"))
188189
assertThat(referral.referralGroupId, equalTo(ReferenceDataGenerator.REFERRAL_GROUP.id))
189190
assertThat(referral.referralDate, equalTo(LocalDate.parse("2022-11-28")))
190191
assertThat(referral.activeArsonRiskId, equalTo(ReferenceDataGenerator.YN_UNKNOWN.id))

projects/approved-premises-and-delius/src/main/kotlin/uk/gov/justice/digital/hmpps/integrations/delius/approvedpremises/referral/entity/Referral.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ class Referral(
8181
val rohSelfId: Long,
8282
val rohOthersId: Long,
8383
@Lob
84-
val riskInformation: String?
84+
val riskInformation: String?,
85+
val externalReference: String?,
8586
) {
8687
@Column(name = "original_ap_admit_date")
8788
var admissionDate: LocalDate? = null
@@ -157,7 +158,7 @@ class Event(
157158
)
158159

159160
interface ReferralRepository : JpaRepository<Referral, Long> {
160-
fun findByPersonIdAndCreatedByUserIdAndReferralNotesContains(
161+
fun findByPersonIdAndCreatedByUserIdAndExternalReference(
161162
personId: Long,
162163
createdByUserId: Long,
163164
externalRef: String
@@ -182,7 +183,7 @@ interface ReferralRepository : JpaRepository<Referral, Long> {
182183
join ApprovedPremises ap on ap.id = r.approvedPremisesId
183184
join Person p on p.id = r.personId
184185
left join Residence res on res.referralId = r.id
185-
where p.crn = :crn and r.referralNotes like '%' || :externalRef || '%'
186+
where p.crn = :crn and r.externalReference = :externalRef
186187
"""
187188
)
188189
fun findReferralDetail(crn: String, externalRef: String): ReferralAndResidence?

projects/approved-premises-and-delius/src/main/kotlin/uk/gov/justice/digital/hmpps/integrations/delius/nonstatutoryintervention/entity/Nsi.kt

+1-16
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
package uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity
22

3-
import jakarta.persistence.Column
4-
import jakarta.persistence.Entity
5-
import jakarta.persistence.EntityListeners
6-
import jakarta.persistence.GeneratedValue
7-
import jakarta.persistence.GenerationType
8-
import jakarta.persistence.Id
9-
import jakarta.persistence.JoinColumn
10-
import jakarta.persistence.Lob
11-
import jakarta.persistence.ManyToOne
12-
import jakarta.persistence.SequenceGenerator
13-
import jakarta.persistence.Table
14-
import jakarta.persistence.Version
3+
import jakarta.persistence.*
154
import org.springframework.data.annotation.CreatedBy
165
import org.springframework.data.annotation.CreatedDate
176
import org.springframework.data.annotation.LastModifiedBy
@@ -107,10 +96,6 @@ class Nsi(
10796
field = value
10897
active = value == null
10998
}
110-
111-
companion object {
112-
const val EXT_REF_BOOKING_PREFIX = "urn:uk:gov:hmpps:approved-premises-service:booking:"
113-
}
11499
}
115100

116101
interface NsiRepository : JpaRepository<Nsi, Long> {

projects/approved-premises-and-delius/src/main/kotlin/uk/gov/justice/digital/hmpps/service/NsiService.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class NsiService(
4040
details: PersonArrived,
4141
ap: ApprovedPremises
4242
): Pair<PersonAddress?, PersonAddress>? {
43-
val externalReference = Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId
43+
val externalReference = EXT_REF_BOOKING_PREFIX + details.bookingId
4444
nsiRepository.findByPersonIdAndExternalReference(person.id, externalReference) ?: run {
4545
val staff = staffRepository.getByCode(details.keyWorker.staffCode)
4646
val nsi = nsiRepository.save(
@@ -95,7 +95,7 @@ class NsiService(
9595

9696
fun personDeparted(person: Person, details: PersonDeparted, ap: ApprovedPremises): PersonAddress? {
9797
val nsi =
98-
nsiRepository.findByPersonIdAndExternalReference(person.id, Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId)
98+
nsiRepository.findByPersonIdAndExternalReference(person.id, EXT_REF_BOOKING_PREFIX + details.bookingId)
9999
nsi?.actualEndDate = details.departedAt
100100
nsi?.outcome = referenceDataRepository.referralCompleted()
101101
contactService.createContact(

projects/approved-premises-and-delius/src/main/kotlin/uk/gov/justice/digital/hmpps/service/ReferralService.kt

+14-12
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.entity.
1111
import uk.gov.justice.digital.hmpps.integrations.delius.approvedpremises.referral.entity.*
1212
import uk.gov.justice.digital.hmpps.integrations.delius.contact.outcome.ContactOutcome
1313
import uk.gov.justice.digital.hmpps.integrations.delius.contact.type.ContactTypeCode
14-
import uk.gov.justice.digital.hmpps.integrations.delius.nonstatutoryintervention.entity.Nsi
1514
import uk.gov.justice.digital.hmpps.integrations.delius.person.Person
1615
import uk.gov.justice.digital.hmpps.integrations.delius.person.PersonRepository
1716
import uk.gov.justice.digital.hmpps.integrations.delius.person.getByCrn
@@ -56,10 +55,10 @@ class ReferralService(
5655
val rTeam = teamRepository.getUnallocatedTeam(ap.probationArea.code)
5756
val rStaff = staffRepository.getByCode(details.bookedBy.staffMember.staffCode)
5857
val findReferral = {
59-
referralRepository.findByPersonIdAndCreatedByUserIdAndReferralNotesContains(
58+
referralRepository.findByPersonIdAndCreatedByUserIdAndExternalReference(
6059
person.id,
6160
ServiceContext.servicePrincipal()!!.userId,
62-
Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId
61+
EXT_REF_BOOKING_PREFIX + details.bookingId
6362
)
6463
}
6564
findReferral() ?: run {
@@ -91,7 +90,7 @@ class ReferralService(
9190

9291
fun bookingChanged(crn: String, details: BookingChanged, ap: ApprovedPremises) {
9392
val person = personRepository.getByCrn(crn)
94-
val referral = getReferral(person, Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId)
93+
val referral = getReferral(person, EXT_REF_BOOKING_PREFIX + details.bookingId)
9594
contactService.createContact(
9695
ContactDetails(
9796
date = details.changedAt,
@@ -123,7 +122,7 @@ class ReferralService(
123122

124123
fun bookingCancelled(crn: String, details: BookingCancelled, ap: ApprovedPremises) {
125124
val person = personRepository.getByCrn(crn)
126-
val externalReference = Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId
125+
val externalReference = EXT_REF_BOOKING_PREFIX + details.bookingId
127126
val referral = findReferral(person, externalReference)?.also {
128127
if (preferredResidenceRepository.existsByApprovedPremisesReferralId(it.id)) {
129128
preferredResidenceRepository.deleteByApprovedPremisesReferralId(it.id)
@@ -160,7 +159,7 @@ class ReferralService(
160159
}
161160

162161
fun personNotArrived(person: Person, ap: ApprovedPremises, dateTime: ZonedDateTime, details: PersonNotArrived) {
163-
val referral = getReferral(person, Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId)
162+
val referral = getReferral(person, EXT_REF_BOOKING_PREFIX + details.bookingId)
164163
referral.nonArrivalDate = dateTime.toLocalDate()
165164
referral.nonArrivalNotes = details.notes
166165
referral.nonArrivalReasonId =
@@ -185,15 +184,15 @@ class ReferralService(
185184
}
186185

187186
fun personArrived(person: Person, ap: ApprovedPremises, details: PersonArrived) {
188-
val referral = getReferral(person, Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId)
187+
val referral = getReferral(person, EXT_REF_BOOKING_PREFIX + details.bookingId)
189188
referral.admissionDate = details.arrivedAt.toLocalDate()
190189
val kw = staffRepository.getByCode(details.keyWorker.staffCode)
191190
residenceRepository.save(details.residence(person, ap, referral, kw))
192191
}
193192

194193
fun personDeparted(person: Person, details: PersonDeparted) {
195194
val serviceUserId = ServiceContext.servicePrincipal()!!.userId
196-
val externalReference = Nsi.EXT_REF_BOOKING_PREFIX + details.bookingId
195+
val externalReference = EXT_REF_BOOKING_PREFIX + details.bookingId
197196
val referral = getReferral(person, externalReference)
198197
val residence = residenceRepository.findByReferralIdAndCreatedByUserId(referral.id, serviceUserId)
199198
?: throw IgnorableMessageException(
@@ -230,14 +229,14 @@ class ReferralService(
230229
}
231230

232231
fun findReferral(person: Person, externalReference: String): Referral? =
233-
referralRepository.findByPersonIdAndCreatedByUserIdAndReferralNotesContains(
232+
referralRepository.findByPersonIdAndCreatedByUserIdAndExternalReference(
234233
person.id,
235234
ServiceContext.servicePrincipal()!!.userId,
236235
externalReference
237236
)
238237

239238
fun getReferralDetails(crn: String, bookingId: String): ReferralDetail =
240-
referralRepository.findReferralDetail(crn, Nsi.EXT_REF_BOOKING_PREFIX + bookingId)?.let {
239+
referralRepository.findReferralDetail(crn, EXT_REF_BOOKING_PREFIX + bookingId)?.let {
241240
ReferralDetail(
242241
ApReferral(
243242
it.referral.referralDate,
@@ -288,7 +287,7 @@ class ReferralService(
288287
).id,
289288
referralGroupId = referenceDataRepository.findApprovedPremisesGroup(ap.id)?.id,
290289
decisionId = referenceDataRepository.acceptedDeferredAdmission().id,
291-
referralNotes = Nsi.EXT_REF_BOOKING_PREFIX + bookingId + System.lineSeparator() + notes,
290+
referralNotes = EXT_REF_BOOKING_PREFIX + bookingId + System.lineSeparator() + notes,
292291
decisionNotes = notes,
293292
referralSourceId = referralSourceRepository.getByCode("OTH").id,
294293
sourceTypeId = referenceDataRepository.apReferralSource().id,
@@ -318,7 +317,8 @@ class ReferralService(
318317
decisionTeamId = apTeam.id,
319318
decisionStaffId = apStaff.id,
320319
referringTeamId = referringTeam.id,
321-
referringStaffId = referringStaff.id
320+
referringStaffId = referringStaff.id,
321+
externalReference = EXT_REF_BOOKING_PREFIX + bookingId
322322
)
323323
}
324324

@@ -340,3 +340,5 @@ class ReferralService(
340340
uk.gov.justice.digital.hmpps.model.ApprovedPremises(approvedPremises)
341341
)
342342
}
343+
344+
const val EXT_REF_BOOKING_PREFIX = "urn:uk:gov:hmpps:approved-premises-service:booking:"

projects/approved-premises-and-delius/src/test/kotlin/uk/gov/justice/digital/hmpps/service/ApprovedPremisesServiceTest.kt

+5-4
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ internal class ApprovedPremisesServiceTest {
565565
LocalDate.now(),
566566
LocalDate.now(),
567567
ZonedDateTime.now(),
568-
Nsi.EXT_REF_BOOKING_PREFIX + bookingId,
568+
"Some notes...",
569569
ReferenceDataGenerator.REFERRAL_DATE_TYPE.id,
570570
ReferenceDataGenerator.REFERRAL_CATEGORIES[ApprovedPremisesCategoryCode.OTHER.value]!!.id,
571571
ReferenceDataGenerator.REFERRAL_GROUP.id,
@@ -586,13 +586,14 @@ internal class ApprovedPremisesServiceTest {
586586
ReferenceDataGenerator.RISK_UNKNOWN.id,
587587
ReferenceDataGenerator.RISK_UNKNOWN.id,
588588
ReferenceDataGenerator.RISK_UNKNOWN.id,
589-
null
589+
null,
590+
EXT_REF_BOOKING_PREFIX + bookingId,
590591
)
591592
whenever(
592-
referralRepository.findByPersonIdAndCreatedByUserIdAndReferralNotesContains(
593+
referralRepository.findByPersonIdAndCreatedByUserIdAndExternalReference(
593594
person.id,
594595
UserGenerator.AUDIT_USER.id,
595-
Nsi.EXT_REF_BOOKING_PREFIX + bookingId
596+
EXT_REF_BOOKING_PREFIX + bookingId
596597
)
597598
).thenReturn(ref)
598599
return ref

0 commit comments

Comments
 (0)