diff --git a/CHANGELOG.md b/CHANGELOG.md index a4d1c5c86..57131ca71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Fixed * Improved error handling in SkeletonProcessingService to throw a meaningful IllegalArgumentException when a payload node cannot be matched to a skeleton document ID, replacing an uninformative NullPointerException. +* Fixed `canMergeCompleteBundle` incorrectly returning `true` when attachment logs are empty, causing a blank patient record after large message GP2GP transfers. ## [3.1.3] - 2025-09-19 diff --git a/gp2gp-translator/src/main/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingService.java b/gp2gp-translator/src/main/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingService.java index c7c4fefd7..71489a55f 100644 --- a/gp2gp-translator/src/main/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingService.java +++ b/gp2gp-translator/src/main/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingService.java @@ -61,6 +61,11 @@ public boolean canMergeCompleteBundle(String conversationId) throws ValidationEx } var undeletedLogs = getUndeletedLogsForConversation(conversationId); + + if (undeletedLogs.isEmpty()) { + return false; + } + return undeletedLogs.stream().allMatch(log -> log.getUploaded().equals(true)); } diff --git a/gp2gp-translator/src/test/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingServiceTests.java b/gp2gp-translator/src/test/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingServiceTests.java index 10ed29515..40bcf7b13 100644 --- a/gp2gp-translator/src/test/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingServiceTests.java +++ b/gp2gp-translator/src/test/java/uk/nhs/adaptors/pss/translator/service/InboundMessageMergingServiceTests.java @@ -468,6 +468,16 @@ public void When_AttachmentsPresent_Expect_AttachmentReferenceUpdated() verify(nackAckPreparationService, never()).sendNackMessage(any(NACKReason.class), any(RCMRIN030000UKMessage.class), any()); } + @Test + public void When_AllAttachmentLogsDeleted_CanMergeCompleteBundle_Expect_ReturnFalse() throws JAXBException { + var emptyAttachmentLogs = new ArrayList(); + + when(patientAttachmentLogService.findAttachmentLogs(CONVERSATION_ID)).thenReturn(emptyAttachmentLogs); + var result = inboundMessageMergingService.canMergeCompleteBundle(CONVERSATION_ID); + + assertFalse(result); + } + private ArrayList createPatientAttachmentList(Boolean isParentUploaded, Boolean isSkeleton) { var patientAttachmentLogs = new ArrayList();