Skip to content

Commit 553d2e2

Browse files
committed
Added logic for creating and assigning dummy specimens.
1 parent 3a7c375 commit 553d2e2

File tree

1 file changed

+50
-26
lines changed

1 file changed

+50
-26
lines changed

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

Lines changed: 50 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import static uk.nhs.adaptors.gp2gp.ehr.mapper.CommentType.LABORATORY_RESULT_COMMENT;
99
import static uk.nhs.adaptors.gp2gp.ehr.mapper.diagnosticreport.ObservationMapper.NARRATIVE_STATEMENT_TEMPLATE;
1010

11+
import java.util.ArrayList;
1112
import java.util.Collections;
1213
import java.util.List;
1314
import java.util.Optional;
@@ -69,13 +70,17 @@ public class DiagnosticReportMapper {
6970
private final ConfidentialityService confidentialityService;
7071

7172
public String mapDiagnosticReportToCompoundStatement(DiagnosticReport diagnosticReport) {
72-
List<Specimen> specimens = fetchSpecimens(diagnosticReport);
7373
List<Observation> observations = fetchObservations(diagnosticReport);
74+
List<Specimen> specimens = fetchSpecimens(diagnosticReport, observations);
7475
final IdMapper idMapper = messageContext.getIdMapper();
7576
markObservationsAsProcessed(idMapper, observations);
7677

78+
observations = fixOrphanedTestResults(observations, specimens, diagnosticReport);
79+
80+
final List<Observation> finalObservations = observations;
81+
7782
String mappedSpecimens = specimens.stream()
78-
.map(specimen -> specimenMapper.mapSpecimenToCompoundStatement(specimen, observations, diagnosticReport))
83+
.map(specimen -> specimenMapper.mapSpecimenToCompoundStatement(specimen, finalObservations, diagnosticReport))
7984
.collect(Collectors.joining());
8085

8186
String reportLevelNarrativeStatements = prepareReportLevelNarrativeStatements(diagnosticReport, observations);
@@ -109,39 +114,62 @@ private String fetchExtensionId(List<Identifier> identifiers) {
109114
.orElse(StringUtils.EMPTY);
110115
}
111116

112-
private List<Specimen> fetchSpecimens(DiagnosticReport diagnosticReport) {
117+
private List<Specimen> fetchSpecimens(DiagnosticReport diagnosticReport, List<Observation> observations) {
113118

114-
//if there are any orphan observations, add a dummy specimen to each of them
119+
// If there are any orphan observations, add a dummy specimen to each of them
115120

116-
if (!diagnosticReport.hasSpecimen()) {
117-
return Collections.singletonList(generateDefaultSpecimen(diagnosticReport));
118-
}
121+
List<Specimen> specimens = new ArrayList<>();
119122

120-
fixOrphanedTestResults(diagnosticReport);
123+
if (hasOrphanedTestResults(observations)) {
124+
specimens.add(generateDefaultSpecimen(diagnosticReport));
125+
}
121126

122127
InputBundle inputBundleHolder = messageContext.getInputBundleHolder();
123-
return diagnosticReport.getSpecimen()
124-
.stream()
125-
.map(specimenReference -> inputBundleHolder.getResource(specimenReference.getReferenceElement()))
126-
.flatMap(Optional::stream)
127-
.map(Specimen.class::cast)
128-
.collect(Collectors.toList());
128+
List<Specimen> preExistingSpecimens = diagnosticReport.getSpecimen()
129+
.stream()
130+
.map(specimenReference -> inputBundleHolder.getResource(specimenReference.getReferenceElement()))
131+
.flatMap(Optional::stream)
132+
.map(Specimen.class::cast)
133+
.collect(Collectors.toList());
134+
135+
specimens.addAll(preExistingSpecimens);
136+
137+
return specimens;
138+
129139
}
130140

131-
private void fixOrphanedTestResults(DiagnosticReport diagnosticReport) {
141+
private boolean hasOrphanedTestResults(List<Observation> observations) {
142+
for (Observation observation : observations) {
143+
if (!observation.hasSpecimen()){
144+
return true;
145+
}
146+
}
147+
148+
return false;
149+
}
132150

151+
private List<Observation> fixOrphanedTestResults(List<Observation> observations, List<Specimen> specimens, DiagnosticReport diagnosticReport) {
133152

134-
if (diagnosticReport.hasResult()){
135-
List<Reference> results = diagnosticReport.getResult();
136-
List<Reference> specimens = diagnosticReport.getSpecimen();
137-
for (Reference specimen : specimens){
153+
Specimen dummySpecimen = new Specimen();
138154

155+
for (Specimen specimen : specimens) {
156+
if (specimen.getId().contains(DUMMY_SPECIMEN_ID_PREFIX)){
157+
dummySpecimen = specimen;
158+
break;
139159
}
140-
for (Reference result : results) {
141-
//
142-
//check each test result one by one, and if it doesn't have a dummy assigned to it, assign it.
160+
}
161+
162+
for (Observation observation : observations) {
163+
if (!observation.hasSpecimen()){
164+
Reference dummySpecimenReference = new Reference();
165+
dummySpecimenReference.setReference(dummySpecimen.getId());
166+
dummySpecimenReference.setResource(dummySpecimen);
167+
168+
observation.setSpecimen(dummySpecimenReference);
143169
}
144170
}
171+
172+
return observations;
145173
}
146174

147175
private Specimen generateDefaultSpecimen(DiagnosticReport diagnosticReport) {
@@ -156,10 +184,6 @@ private Specimen generateDefaultSpecimen(DiagnosticReport diagnosticReport) {
156184
}
157185

158186
private List<Observation> fetchObservations(DiagnosticReport diagnosticReport) {
159-
if (!diagnosticReport.hasResult()) {
160-
return Collections.singletonList(generateDefaultObservation(diagnosticReport));
161-
}
162-
163187
InputBundle inputBundleHolder = messageContext.getInputBundleHolder();
164188
return diagnosticReport.getResult().stream()
165189
.map(Reference::getReferenceElement)

0 commit comments

Comments
 (0)