From ea3231e60d7d52c9995acd9af47e7f314f05f31d Mon Sep 17 00:00:00 2001 From: jorge Lopez Date: Wed, 23 Oct 2024 09:24:42 -0700 Subject: [PATCH] refactoring + all tests pass --- .../custom/MapLocalObservationCodes.java | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/custom/MapLocalObservationCodes.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/custom/MapLocalObservationCodes.java index 96c9e6be9..6af55c43a 100644 --- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/custom/MapLocalObservationCodes.java +++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/etor/ruleengine/transformation/custom/MapLocalObservationCodes.java @@ -8,7 +8,6 @@ import gov.hhs.cdc.trustedintermediary.wrappers.Logger; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.Coding; import org.hl7.fhir.r4.model.Observation; @@ -29,14 +28,20 @@ public void transform(HealthData resource, Map args) { var codingMap = getMapFromArgs(args); var bundle = (Bundle) resource.getUnderlyingData(); + var msh41Identifier = extractMsh41Identifier(bundle); + var messageId = HapiHelper.getMessageControlId(bundle); var observations = HapiHelper.resourcesInBundle(bundle, Observation.class); observations - .map(Observation::getCode) - .map(code -> code.getCoding().stream().findFirst().orElse(null)) - .filter(Objects::nonNull) - .filter(this::isLocalCode) - .forEach(coding -> processCoding(bundle, coding, codingMap)); + .filter(this::hasValidCoding) + .forEach( + observation -> + processCoding(observation, codingMap, msh41Identifier, messageId)); + } + + private boolean hasValidCoding(Observation observation) { + var codingList = observation.getCode().getCoding(); + return codingList.size() == 1 && isLocalCode(codingList.get(0)); } private boolean isLocalCode(Coding coding) { @@ -44,18 +49,26 @@ private boolean isLocalCode(Coding coding) { coding, HapiHelper.EXTENSION_ALT_CODING, HapiHelper.LOCAL_CODE); } + private String extractMsh41Identifier(Bundle bundle) { + var msh41Identifier = HapiHelper.getMSH4_1Identifier(bundle); + return msh41Identifier != null ? msh41Identifier.getValue() : null; + } + private void processCoding( - Bundle bundle, Coding coding, Map codingMap) { - IdentifierCode identifier = codingMap.get(coding.getCode()); + Observation observation, + Map codingMap, + String msh41Identifier, + String messageId) { + var originalCoding = observation.getCode().getCoding().get(0); + IdentifierCode identifier = codingMap.get(originalCoding.getCode()); if (identifier == null) { - logUnmappedLocalCode(bundle, coding); + logUnmappedLocalCode(originalCoding, msh41Identifier, messageId); + return; } - Coding mappedCoding = getMappedCoding(identifier); - coding.addExtension(HapiHelper.EXTENSION_CWE_CODING, mappedCoding); - coding.addExtension( - HapiHelper.EXTENSION_CODING_SYSTEM, new StringType(identifier.codingSystem())); + var mappedCoding = getMappedCoding(identifier); + observation.getCode().getCoding().add(0, mappedCoding); } private String validateField(String field, String fieldName) { @@ -65,15 +78,13 @@ private String validateField(String field, String fieldName) { return field; } - private void logUnmappedLocalCode(Bundle bundle, Coding coding) { - var msh41Identifier = HapiHelper.getMSH4_1Identifier(bundle); - var msh41Value = msh41Identifier != null ? msh41Identifier.getValue() : null; + private void logUnmappedLocalCode(Coding coding, String msh41Identifier, String messageId) { logger.logWarning( "Unmapped local code detected: '{}', from sender: '{}', message Id: '{}'", coding.getCode(), - msh41Value, - HapiHelper.getMessageControlId(bundle)); + msh41Identifier, + messageId); } private Coding getMappedCoding(IdentifierCode identifierCode) {