Skip to content

Commit 80b83cf

Browse files
authored
Merge branch 'main' into NIAD-3217
2 parents 2b17133 + 591a8bc commit 80b83cf

File tree

14 files changed

+153
-60
lines changed

14 files changed

+153
-60
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2525
* When mapping `Immunizations` which contain a `NOPAT` `meta.security` tag, the resultant XML for that resource
2626
will contain a `NOPAT` `confidentialityCode` element.
2727

28+
### Fixed
29+
30+
* Fix a malformed XML GP2GP message created when mapping a `MedicationRequest` with `intent` of `plan` and is stopped,
31+
but no free text reason for the discontinuation was provided.
32+
2833
## [2.1.2] - 2014-10-21
2934

3035
### Fixed

service/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ dependencies {
5757
implementation 'org.apache.commons:commons-lang3:3.17.0'
5858
implementation 'javax.xml.soap:javax.xml.soap-api:1.4.0'
5959
implementation 'com.github.spullara.mustache.java:compiler:0.9.14'
60-
implementation 'org.apache.tika:tika-core:2.9.2'
60+
implementation 'org.apache.tika:tika-core:3.0.0'
6161

6262
// Fhir
6363
implementation 'ca.uhn.hapi.fhir:hapi-fhir-structures-dstu3:7.4.3'
@@ -73,7 +73,7 @@ dependencies {
7373
testImplementation 'com.squareup.okhttp3:mockwebserver:4.12.0'
7474

7575
pitest 'com.arcmutate:base:1.3.1'
76-
pitest 'com.arcmutate:pitest-git-plugin:1.3.2'
76+
pitest 'com.arcmutate:pitest-git-plugin:1.3.3'
7777
}
7878

7979
test {

service/src/main/java/uk/nhs/adaptors/gp2gp/ehr/mapper/diagnosticreport/MultiStatementObservationHolderFactory.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

service/src/main/java/uk/nhs/adaptors/gp2gp/ehr/mapper/diagnosticreport/ObservationMapper.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport;
22

33
import static uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.DiagnosticReportMapper.DUMMY_OBSERVATION_ID_PREFIX;
4-
import static uk.nhs.adaptors.gp2gp.ehr.utils.CodeableConceptMappingUtils.hasCode;
54

65
import java.util.List;
76
import java.util.Objects;
@@ -30,6 +29,7 @@
3029
import lombok.RequiredArgsConstructor;
3130
import lombok.extern.slf4j.Slf4j;
3231
import uk.nhs.adaptors.gp2gp.common.service.ConfidentialityService;
32+
import uk.nhs.adaptors.gp2gp.common.service.RandomIdGeneratorService;
3333
import uk.nhs.adaptors.gp2gp.ehr.exception.EhrMapperException;
3434
import uk.nhs.adaptors.gp2gp.ehr.mapper.CodeableConceptCdMapper;
3535
import uk.nhs.adaptors.gp2gp.ehr.mapper.CommentType;
@@ -73,8 +73,6 @@ public class ObservationMapper {
7373
private static final String RANGE_LOW_PREFIX = "Low: ";
7474
private static final String RANGE_HIGH_PREFIX = "High: ";
7575

76-
private static final String COMMENT_NOTE_CODE = "37331000000100";
77-
7876
private static final String HL7_UNKNOWN_VALUE = "UNK";
7977
private static final String HAS_MEMBER_TYPE = "HASMEMBER";
8078

@@ -87,12 +85,11 @@ public class ObservationMapper {
8785
private final StructuredObservationValueMapper structuredObservationValueMapper;
8886
private final CodeableConceptCdMapper codeableConceptCdMapper;
8987
private final ParticipantMapper participantMapper;
90-
private final MultiStatementObservationHolderFactory multiStatementObservationHolderFactory;
88+
private final RandomIdGeneratorService randomIdGeneratorService;
9189
private final ConfidentialityService confidentialityService;
9290

9391
public String mapObservationToCompoundStatement(Observation observationAssociatedWithSpecimen) {
94-
var holder = multiStatementObservationHolderFactory.newInstance(observationAssociatedWithSpecimen);
95-
return mapAndVerify(holder);
92+
return mapAndVerify(createHolder(observationAssociatedWithSpecimen));
9693
}
9794

9895
private String mapAndVerify(MultiStatementObservationHolder observationAssociatedWithSpecimen) {
@@ -178,7 +175,7 @@ private List<MultiStatementObservationHolder> getRelatedObservations(
178175
.map(referenceElement -> messageContext.getInputBundleHolder().getResource(referenceElement))
179176
.flatMap(Optional::stream)
180177
.map(Observation.class::cast)
181-
.map(multiStatementObservationHolderFactory::newInstance)
178+
.map(observation -> createHolder(observation))
182179
.collect(Collectors.toList());
183180
}
184181

@@ -364,7 +361,7 @@ private Optional<String> prepareNarrativeStatementForRelatedObservationComments(
364361
}
365362

366363
private CommentType prepareCommentType(Observation observation) {
367-
return hasCode(observation.getCode(), List.of(COMMENT_NOTE_CODE))
364+
return DiagnosticReportMapper.isFilingComment(observation)
368365
? CommentType.USER_COMMENT : CommentType.AGGREGATE_COMMENT_SET;
369366
}
370367

@@ -483,7 +480,7 @@ private DateTimeType resolveEffectiveDateTimeType(Observation observation) {
483480
}
484481

485482
private boolean observationHasNonCommentNoteCode(Observation observation) {
486-
return observation.hasCode() && !hasCode(observation.getCode(), List.of(COMMENT_NOTE_CODE));
483+
return observation.hasCode() && !DiagnosticReportMapper.isFilingComment(observation);
487484
}
488485

489486
private String prepareCodeElement(Observation observation) {
@@ -546,6 +543,10 @@ private boolean hasValidType(Observation.ObservationRelatedComponent observation
546543
}
547544

548545
private boolean hasValidComment(Observation observation) {
549-
return observation.hasComment() && hasCode(observation.getCode(), List.of(COMMENT_NOTE_CODE));
546+
return observation.hasComment() && DiagnosticReportMapper.isFilingComment(observation);
547+
}
548+
549+
private MultiStatementObservationHolder createHolder(Observation observationAssociatedWithSpecimen) {
550+
return new MultiStatementObservationHolder(observationAssociatedWithSpecimen, messageContext, randomIdGeneratorService);
550551
}
551552
}

service/src/main/java/uk/nhs/adaptors/gp2gp/ehr/utils/StatementTimeMappingUtils.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,9 @@ public static String prepareEffectiveTimeForMedicationRequest(MedicationRequest
137137
}
138138
return String.format(EFFECTIVE_TIME_LOW_TEMPLATE, toHl7Format(startElement));
139139
}
140-
throw new EhrMapperException("Could not map Effective Time for Medication Request");
140+
throw new EhrMapperException(
141+
"MedicationRequest/{%s} must contain a dispenseRequest.validityPeriod.start".formatted(medicationRequest.getId())
142+
);
141143
}
142144

143145
public static String prepareAvailabilityTimeForMedicationRequest(MedicationRequest medicationRequest) {
@@ -146,7 +148,9 @@ public static String prepareAvailabilityTimeForMedicationRequest(MedicationReque
146148
return String.format(AVAILABILITY_TIME_VALUE_TEMPLATE, toHl7Format(
147149
medicationRequest.getDispenseRequest().getValidityPeriod().getStartElement()));
148150
}
149-
throw new EhrMapperException("Could not map Availability Time for Medication Request");
151+
throw new EhrMapperException(
152+
"MedicationRequest/{%s} must contain a dispenseRequest.validityPeriod.start".formatted(medicationRequest.getId())
153+
);
150154
}
151155

152156
public static String prepareEffectiveTimeForEhrFolder(EhrFolderEffectiveTime effectiveTime) {

service/src/main/resources/templates/ehr_medication_statement_authorise_template.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060
</priorMedicationRef>
6161
</reversalOf>
6262
<pertinentInformation typeCode="PERT">
63-
<pertinentSupplyAnnotation classCode="OBS" moodCode="EVN">
64-
{{#ehrSupplyDiscontinueReasonText}}<text>{{{ehrSupplyDiscontinueReasonText}}}</text>{{/ehrSupplyDiscontinueReasonText}}{{^ehrSupplyDiscontinueReasonText}}<code nullFlavor="UNK"><text>Stopped</text></code>{{/ehrSupplyDiscontinueReasonText}}
63+
<pertinentSupplyAnnotation classCode="OBS" moodCode="EVN"{{^ehrSupplyDiscontinueReasonText}} nullFlavor="UNK"{{/ehrSupplyDiscontinueReasonText}}>
64+
{{#ehrSupplyDiscontinueReasonText}}<text>{{{ehrSupplyDiscontinueReasonText}}}</text>{{/ehrSupplyDiscontinueReasonText}}{{^ehrSupplyDiscontinueReasonText}}<text>Stopped</text>{{/ehrSupplyDiscontinueReasonText}}
6565
</pertinentSupplyAnnotation>
6666
</pertinentInformation>
6767
</ehrSupplyDiscontinue>

service/src/test/java/uk/nhs/adaptors/gp2gp/ehr/mapper/EhrExtractMapperComponentTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import uk.nhs.adaptors.gp2gp.common.service.RandomIdGeneratorService;
2020
import uk.nhs.adaptors.gp2gp.common.service.TimestampService;
2121
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.DiagnosticReportMapper;
22-
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.MultiStatementObservationHolderFactory;
2322
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.ObservationMapper;
2423
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.SpecimenMapper;
2524
import uk.nhs.adaptors.gp2gp.ehr.mapper.parameters.EhrExtractTemplateParameters;
@@ -148,11 +147,9 @@ public void setUp() {
148147

149148
ParticipantMapper participantMapper = new ParticipantMapper();
150149
StructuredObservationValueMapper structuredObservationValueMapper = new StructuredObservationValueMapper();
151-
MultiStatementObservationHolderFactory multiStatementObservationHolderFactory =
152-
new MultiStatementObservationHolderFactory(messageContext, randomIdGeneratorService);
153150
ObservationMapper specimenObservationMapper = new ObservationMapper(
154151
messageContext, structuredObservationValueMapper, codeableConceptCdMapper,
155-
participantMapper, multiStatementObservationHolderFactory, confidentialityService);
152+
participantMapper, randomIdGeneratorService, confidentialityService);
156153
SpecimenMapper specimenMapper = new SpecimenMapper(messageContext, specimenObservationMapper,
157154
randomIdGeneratorService, confidentialityService);
158155
DocumentReferenceToNarrativeStatementMapper documentReferenceToNarrativeStatementMapper

service/src/test/java/uk/nhs/adaptors/gp2gp/ehr/mapper/EncounterComponentsMapperTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import uk.nhs.adaptors.gp2gp.common.service.TimestampService;
2525
import uk.nhs.adaptors.gp2gp.ehr.exception.EhrMapperException;
2626
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.DiagnosticReportMapper;
27-
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.MultiStatementObservationHolderFactory;
2827
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.ObservationMapper;
2928
import uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.SpecimenMapper;
3029
import uk.nhs.adaptors.gp2gp.ehr.utils.BloodPressureValidator;
@@ -207,11 +206,9 @@ public void setUp() {
207206

208207
private @NotNull SpecimenMapper getSpecimenMapper(StructuredObservationValueMapper structuredObservationValueMapper,
209208
ParticipantMapper participantMapper) {
210-
MultiStatementObservationHolderFactory multiStatementObservationHolderFactory =
211-
new MultiStatementObservationHolderFactory(messageContext, randomIdGeneratorService);
212209
ObservationMapper specimenObservationMapper = new ObservationMapper(
213210
messageContext, structuredObservationValueMapper, codeableConceptCdMapper, participantMapper,
214-
multiStatementObservationHolderFactory, confidentialityService);
211+
randomIdGeneratorService, confidentialityService);
215212
return new SpecimenMapper(messageContext, specimenObservationMapper, randomIdGeneratorService, confidentialityService);
216213
}
217214

service/src/test/java/uk/nhs/adaptors/gp2gp/ehr/mapper/diagnosticreport/DiagnosticReportMapperTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ void When_DiagnosticReport_With_NoReferencedSpecimenAndFilingCommentWithNoCommen
275275
new StructuredObservationValueMapper(),
276276
codeableConceptCdMapper,
277277
new ParticipantMapper(),
278-
new MultiStatementObservationHolderFactory(messageContext, randomIdGeneratorService),
278+
randomIdGeneratorService,
279279
confidentialityService
280280
),
281281
randomIdGeneratorService,

service/src/test/java/uk/nhs/adaptors/gp2gp/ehr/mapper/diagnosticreport/ObservationMapperTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,15 +159,12 @@ void setUp() {
159159
when(idMapper.getOrNew(any(ResourceType.class), any(IdType.class)))
160160
.thenAnswer(params -> "Mapped-From-" + ((IdType) params.getArgument(1)).getValue());
161161

162-
MultiStatementObservationHolderFactory multiStatementObservationHolderFactory =
163-
new MultiStatementObservationHolderFactory(messageContext, randomIdGeneratorService);
164-
165162
observationMapper = new ObservationMapper(
166163
messageContext,
167164
new StructuredObservationValueMapper(),
168165
new CodeableConceptCdMapper(),
169166
new ParticipantMapper(),
170-
multiStatementObservationHolderFactory,
167+
randomIdGeneratorService,
171168
confidentialityService
172169
);
173170
}

0 commit comments

Comments
 (0)