/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.nifi.processors.ccda;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import org.apache.nifi.util.MockFlowFile;
import org.apache.nifi.util.TestRunner;
import org.apache.nifi.util.TestRunners;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openhealthtools.mdht.uml.cda.consol.ConsolFactory;
import org.openhealthtools.mdht.uml.cda.consol.ContinuityOfCareDocument;
import org.openhealthtools.mdht.uml.cda.consol.ProblemConcernAct;
import org.openhealthtools.mdht.uml.cda.consol.ProblemObservation;
import org.openhealthtools.mdht.uml.cda.consol.ProblemSection;
import org.openhealthtools.mdht.uml.cda.consol.ProblemStatus;
import org.openhealthtools.mdht.uml.cda.consol.VitalSignObservation;
import org.openhealthtools.mdht.uml.cda.consol.VitalSignsOrganizer;
import org.openhealthtools.mdht.uml.cda.consol.VitalSignsSection;
import org.openhealthtools.mdht.uml.cda.util.CDAUtil;
public class TestExtractCCDAAttributes {
private TestRunner runner;
@BeforeClass
public static void setup() {
System.setProperty("org.slf4j.simpleLogger.log.org.apache.nifi", "INFO");
}
@Before
public void init() {
runner = TestRunners.newTestRunner(ExtractCCDAAttributes.class);
}
@Test
public void testProcessor() throws Exception {
Map<String, String> expectedAttributes = new HashMap<String, String>();
expectedAttributes.put("code.code", "34133-9");
expectedAttributes.put("code.codeSystem", "2.16.840.1.113883.6.1");
expectedAttributes.put("code.codeSystemName", "LOINC");
expectedAttributes.put("code.displayName", "Summarization of Episode Note");
expectedAttributes.put("problemSection.code.code", "11450-4");
expectedAttributes.put("problemSection.code.codeSystem", "2.16.840.1.113883.6.1");
expectedAttributes.put("problemSection.code.codeSystemName", "LOINC");
expectedAttributes.put("problemSection.code.displayName", "Problem List");
expectedAttributes.put("problemSection.act.code.code", "CONC");
expectedAttributes.put("problemSection.act.code.codeSystem", "2.16.840.1.113883.5.6");
expectedAttributes.put("problemSection.act.code.codeSystemName", "HL7ActClass");
expectedAttributes.put("problemSection.act.code.displayName", "Concern");
expectedAttributes.put("problemSection.act.observation.problemStatus.code.code", "33999-4");
expectedAttributes.put("problemSection.act.observation.problemStatus.code.codeSystem", "2.16.840.1.113883.6.1");
expectedAttributes.put("problemSection.act.observation.problemStatus.code.codeSystemName", "LOINC");
expectedAttributes.put("problemSection.act.observation.problemStatus.code.displayName", "Status");
expectedAttributes.put("problemSection.act.observation.problemStatus.statusCode.code", "completed");
expectedAttributes.put("problemSection.act.observation.statusCode.code", "completed");
expectedAttributes.put("vitalSignsSection.code.code", "8716-3");
expectedAttributes.put("vitalSignsSection.code.codeSystem", "2.16.840.1.113883.6.1");
expectedAttributes.put("vitalSignsSection.code.codeSystemName", "LOINC");
expectedAttributes.put("vitalSignsSection.code.displayName", "Vital Signs");
expectedAttributes.put("vitalSignsSection.organizer.code.code", "46680005");
expectedAttributes.put("vitalSignsSection.organizer.code.codeSystem", "2.16.840.1.113883.6.96");
expectedAttributes.put("vitalSignsSection.organizer.code.codeSystemName", "SNOMEDCT");
expectedAttributes.put("vitalSignsSection.organizer.code.displayName", "Vital signs");
expectedAttributes.put("vitalSignsSection.organizer.statusCode.code", "completed");
expectedAttributes.put("vitalSignsSection.organizer.observations.code.codeSystem", "2.16.840.1.113883.6.1");
expectedAttributes.put("vitalSignsSection.organizer.observations.code.codeSystemName", "LOINC");
expectedAttributes.put("vitalSignsSection.organizer.observations.statusCode.code", "completed");
ContinuityOfCareDocument doc = ConsolFactory.eINSTANCE.createContinuityOfCareDocument().init();
ProblemConcernAct problemAct = ConsolFactory.eINSTANCE.createProblemConcernAct().init();
ProblemObservation problemObservation = ConsolFactory.eINSTANCE.createProblemObservation().init();
ProblemStatus problemStatus = ConsolFactory.eINSTANCE.createProblemStatus().init();
ProblemSection problemSection = ConsolFactory.eINSTANCE.createProblemSection().init();
doc.addSection(problemSection);
problemSection.addAct(problemAct);
problemAct.addObservation(problemObservation);
problemObservation.addObservation(problemStatus);
VitalSignsOrganizer vitalSignsOrganizer = ConsolFactory.eINSTANCE.createVitalSignsOrganizer().init();
VitalSignObservation vitalSignObservation = ConsolFactory.eINSTANCE.createVitalSignObservation().init();
VitalSignsSection vitalSignsSection = ConsolFactory.eINSTANCE.createVitalSignsSection().init();
doc.addSection(vitalSignsSection);
vitalSignsSection.addOrganizer(vitalSignsOrganizer);
vitalSignsOrganizer.addObservation(vitalSignObservation);
StringWriter writer = new StringWriter();
CDAUtil.save(doc, writer);
runTests(writer.toString(), expectedAttributes, true, true);
}
private void runTests(final String content, Map<String, String> expectedAttributes, final boolean skipValidation, final boolean prettyPrinting) throws IOException{
runner.setProperty(ExtractCCDAAttributes.SKIP_VALIDATION, String.valueOf(skipValidation));
runner.enqueue(content);
runner.run();
runner.assertAllFlowFilesTransferred(ExtractCCDAAttributes.REL_SUCCESS, 1);
final MockFlowFile flowFile = runner.getFlowFilesForRelationship(ExtractCCDAAttributes.REL_SUCCESS).get(0);
for (final Map.Entry<String, String> entry : expectedAttributes.entrySet()) {
flowFile.assertAttributeEquals(entry.getKey(), entry.getValue());
}
}
}