/** * The contents of this file are subject to the OpenMRS Public License * Version 1.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://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ /******************************************************************** Title : HiRiskLeadScreen Filename: HiRiskLeadScreen Version : 1 . 0 Institution : iCHSR Author : Steve Downs Specialist : Pediatrics Validation : Purpose : PWS prompt to obtain blood lead if child has a risk factor Explanation : Keywords : lead risk based screening PWS Citations : Links : ********************************************************************/ package org.openmrs.arden.compiled; import java.util.HashMap; import java.util.Map; import org.openmrs.Concept; import org.openmrs.Patient; import org.openmrs.arden.ArdenClause; import org.openmrs.arden.ArdenDataSource; import org.openmrs.arden.ArdenRule; import org.openmrs.arden.ArdenValue; public class HiRiskLeadScreen implements ArdenRule { private Patient patient; private String firstname; private ArdenDataSource dataSource; private HashMap<String, String> userVarMap; private HashMap<String, ArdenValue> valueMap; private ArdenClause ardenClause; //Constructor public HiRiskLeadScreen(Patient p, ArdenDataSource d) { patient = p; dataSource = d; ardenClause = new ArdenClause(); userVarMap = new HashMap<String, String>(); valueMap = new HashMap<String, ArdenValue>(); firstname = patient.getPersonName().getGivenName(); userVarMap.put("firstname", firstname); initAction(); } public ArdenRule getChildren() { ArdenRule rule = null; return rule; } public ArdenRule getInstance() { ArdenRule rule = null; if (this != null) { rule = this; } return rule; } private ArdenValue Last_Pb() { Concept c = new Concept(); c.setConceptId(31); // BLOOD LEAD LEVEL //return dataSource.eval(patient, Aggregation.last(2), c, DateCriteria.within(Duration.past(Days(330))) ); return dataSource.eval(patient, ardenClause.concept(c).last(2).within().past().Days(330)); } private ArdenValue Qual_Pb() { Concept c = new Concept(); c.setConceptId(8); // CHICA REPORTED LEAD //return dataSource.eval(patient, Aggregation.last(1), c, DateCriteria.within(Duration.past(Days(330))) ); return dataSource.eval(patient, ardenClause.concept(c).last(1).within().past().Days(330)); } private ArdenValue EnvHx() { Concept c = new Concept(); c.setConceptId(3); // ENVIRONMENTAL HISTORY //return dataSource.eval(patient, Aggregation.last(1), c, DateCriteria.within(Duration.past(Days(365))) ); return dataSource.eval(patient, ardenClause.concept(c).last(1).within().past().Days(365)); } public boolean evaluate() { return evaluate_logic(); } private boolean evaluate_logic() { boolean retVal = false; ArdenValue val; if ((val = Last_Pb()) != null) { if (val.getValueNumeric() >= 14) { //LeadRisk = "has lead level greater than 14 mg/dcl" userVarMap.put("LeadRisk", "has lead level greater than 14 mg/dcl"); valueMap.put("Last_Pb", val); } } if ((val = Qual_Pb()) != null) { //LESS THAN 10 MG/DL if (val.getValueCoded() == 24) { //conclude here retVal = false; valueMap.put("Qual_Pb", val); return retVal; } } if ((val = EnvHx()) != null) { //HOME BUILT BEFORE 1960 if (val.getValueCoded() == 4) { //LeadRisk = "lives in a house built before 1950" userVarMap.put("LeadRisk", "lives in a house built before 1950"); valueMap.put("EnvHx", val); } } else if ((val = EnvHx()) != null) { //HOME RENOVATED BEFORE 1978 if (val.getValueCoded() == 55) { //LeadRisk = "lives in a house built before 1950" userVarMap.put("LeadRisk", "lives in a house built before 1950"); valueMap.put("EnvHx", val); } } else if ((val = EnvHx()) != null) { //TB EXPOSURE if (val.getValueCoded() == 104) { //LeadRisk = "lives in a house built before 1950" userVarMap.put("LeadRisk", "lives in a house built before 1950"); valueMap.put("EnvHx", val); } } else { //conclude here retVal = false; return retVal; } //conclude here retVal = true; return retVal; } public void initAction() { userVarMap.put("ActionStr", "||firstname|| reportedly ||LeadRisk||. Drawing a blood lead level is recommended annually:"); } public String doAction() { int index = 0, nindex = 0, endindex = 0, startindex = 0; String tempstr, variable, outStr = ""; String inStr = userVarMap.get("ActionStr"); tempstr = inStr; index = tempstr.indexOf("||", nindex); if (index != -1) { if (index == 0) { // At the beginning nindex = tempstr.indexOf("||", index + 1); startindex = index + 2; endindex = nindex; variable = inStr.substring(startindex, endindex).trim(); outStr += userVarMap.get(variable); index = tempstr.indexOf("||", nindex + 2); } while (index > 0) { if (nindex == 0) { // Are we starting now startindex = nindex; endindex = index; outStr += tempstr.substring(startindex, endindex); } else { startindex = nindex + 2; endindex = index; outStr += tempstr.substring(startindex, endindex); } nindex = tempstr.indexOf("||", index + 2); startindex = index + 2; endindex = nindex; variable = inStr.substring(startindex, endindex).trim(); outStr += userVarMap.get(variable); index = tempstr.indexOf("||", nindex + 2); } outStr += tempstr.substring(nindex + 2); } else { outStr += tempstr; } return outStr; } public void printDebug() { for (Map.Entry<String, ArdenValue> entry : valueMap.entrySet()) { System.out.println("__________________________________"); System.out.println(entry.getKey() + ": "); ArdenValue val = entry.getValue(); val.PrintObsMap(); System.out.println("__________________________________"); } } }