2626import lombok .RequiredArgsConstructor ;
2727import lombok .extern .slf4j .Slf4j ;
2828import uk .nhs .adaptors .gp2gp .common .service .RandomIdGeneratorService ;
29+ import uk .nhs .adaptors .gp2gp .ehr .exception .EhrMapperException ;
2930import uk .nhs .adaptors .gp2gp .ehr .mapper .parameters .EncounterTemplateParameters ;
3031import uk .nhs .adaptors .gp2gp .ehr .mapper .parameters .EncounterTemplateParameters .EncounterTemplateParametersBuilder ;
3132import uk .nhs .adaptors .gp2gp .ehr .utils .BloodPressureValidator ;
3435import uk .nhs .adaptors .gp2gp .ehr .utils .TemplateUtils ;
3536import uk .nhs .adaptors .gp2gp .ehr .utils .XpathExtractor ;
3637
38+ import javax .swing .text .html .Option ;
39+
3740@ RequiredArgsConstructor (onConstructor = @ __ (@ Autowired ))
3841@ Component
3942@ Slf4j
@@ -73,30 +76,13 @@ public class NonConsultationResourceMapper {
7376 );
7477
7578 public List <String > mapRemainingResourcesToEhrCompositions (Bundle bundle ) {
76- var mappedResources = bundle .getEntry ()
77- .stream ()
79+
80+
81+ var mappedResources = bundle .getEntry ().stream ()
7882 .map (Bundle .BundleEntryComponent ::getResource )
7983 .filter (this ::isMappableNonConsultationResource )
8084 .sorted (this ::compareProcessingOrder )
81- .filter (resource -> {
82- if (hasIdBeenMapped (resource ) || isIgnoredResource (resource )) {
83- return false ;
84- }
85-
86- if (resource instanceof MedicationRequest medicationRequest ) {
87-
88- if (!medicationRequest .hasBasedOn () || medicationRequest .getBasedOn ().isEmpty ()) {
89- return true ;
90- }
91-
92- String referenceId = medicationRequest .getBasedOn ().getFirst ().getReference ();
93- //String medRequestId = reference.replaceFirst("MedicationRequest/", "");
94- var referencedResource = messageContext .getInputBundleHolder ().getResource (new IdType (referenceId ));
95- return referencedResource .isEmpty () || !hasIdBeenMapped (referencedResource .get ());
96- }
97- return true ;
98- })
99- //.filter(resource -> !hasIdBeenMapped(resource) && !isIgnoredResource(resource))
85+ .filter (this ::shouldMapResource )
10086 .map (this ::mapResourceToEhrComposition )
10187 .flatMap (Optional ::stream )
10288 .collect (Collectors .toList ());
@@ -120,6 +106,35 @@ public List<String> mapRemainingResourcesToEhrCompositions(Bundle bundle) {
120106 return mappedResources ;
121107 }
122108
109+ private boolean shouldMapResource (Resource resource ) {
110+ if (hasIdBeenMapped (resource ) || isIgnoredResource (resource )) {
111+ return false ;
112+ }
113+ if (resource instanceof MedicationRequest medicationRequest ) {
114+ return shouldMapMedicationRequest (medicationRequest );
115+ }
116+ return true ;
117+ }
118+
119+ private boolean shouldMapMedicationRequest (MedicationRequest medicationRequest ) {
120+ if (!medicationRequest .hasBasedOn () || medicationRequest .getBasedOn ().isEmpty ()) {
121+ return true ;
122+ }
123+
124+ String referenceId = medicationRequest .getBasedOn ().getFirst ().getReference ();
125+
126+ try {
127+ Optional <Resource > referencedResource =
128+ messageContext .getInputBundleHolder ().getResource (new IdType (referenceId ));
129+
130+ return referencedResource .isEmpty () || !hasIdBeenMapped (referencedResource .get ());
131+
132+ } catch (EhrMapperException e ) {
133+ LOGGER .info ("MedicationRequest {} cannot be mapped" , referenceId );
134+ return true ;
135+ }
136+ }
137+
123138 private Resource replaceId (Resource resource ) {
124139 resource .setIdElement (new IdType (resource .getResourceType ().name (), randomIdGeneratorService .createNewId ()));
125140 return resource ;
0 commit comments