maintenance: title: SCH_Func_Creatinine_Clearance;; mlmname: SCH_Func_Creatinine_Clearance;; arden: version 2;; version: 5.50;; institution: St Clair Hospital;; author: Teresa Spicuzza, Allscripts;; specialist: ;; date: 2012-07-11;; validation: testing;; library: purpose: This MLM Calcualtes Creatinine Clearance based on SCH Guidelines. Adapted from Form_MLM_Creatinine_Clearance ;; explanation: Uses SCH guidelines to choose the correct weight, round serum where necessary and calculate creatinine Uses SCH modified cockcrauft gault formula ;; keywords: Called MLMs, Form fields, Cockcrauft Gault, Creatinine 03.16.2018 TMS CSR 36322 Updated to use only actual body weight for Dabigatran (Pradaxa) and Rivaroxaban (Xarelto) renal dosing alerts. ;; knowledge: type: data-driven;; data: // This MLM is passed three arguments, ... (client_visit_guid, chart_guid, client_guid, CPSVal) := ARGUMENT; standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}}; include standard_libs; /*******************Make Changes To Spelling And Flags In This Section*******************/ /* Set to true if a decision.log is needed.*/ log_execution_info := FALSE; /***************************************************************************************/ // Initialize error message error_message:=""; /* What is the HEIGHT limit for using the Ideal weight calculation? */ /* The calculation will be done if the height is GREATER THAN OR EQUAL TO this number listed below */ ideal_WT_height_limit:= 150; /* cm */ wtgm := read last { " Select Text from CV3PhysicalNoteDeclaration " || " where ClientGUID = " || SQL(client_guid) || " and ClientVisitGUID = " || SQL(client_visit_guid) || " and TypeCode = {{{SINGLE-QUOTE}}}weight{{{SINGLE-QUOTE}}} " || " order by Entered asc " }; wt := (wtgm as number) / 1000; htcm := read last { " Select Text from CV3PhysicalNoteDeclaration " || " where ClientGUID = " || SQL(client_guid) || " and ClientVisitGUID = " || SQL(client_visit_guid) || " and TypeCode = {{{SINGLE-QUOTE}}}height{{{SINGLE-QUOTE}}} " || " order by Entered asc " }; ht := htcm as number; If CPSVal is null then CPSVal := read last {"Select top 1 bo.value " || " From cv3order as o with (nolock) " || " join cv3basicobservation as bo with (nolock) " || " on o.clientguid = bo.clientguid " || " and o.chartguid = bo.chartguid " || " and o.guid = bo.orderguid " || " and bo.status = {{{SINGLE-QUOTE}}}F{{{SINGLE-QUOTE}}} " || " and bo.Active = 1 " || " And bo.IsHistory = 0 " || " join cv3ordercatalogmasteritem as ocmi with (nolock) " || " on ocmi.guid = o.ordercatalogmasteritemguid " || " and ocmi.active = 1 " || " where o.clientguid = " || SQL(client_guid) // || " and o.chartguid = " || SQL(chart_guid) || " and o.performeddtm >= (DATEADD(hour, -24, getdate())) " || " and bo.itemname = {{{SINGLE-QUOTE}}}Creatinine Plasma/Serum{{{SINGLE-QUOTE}}} " || " order by o.performeddtm desc " }; endif; // use for testing on patient with no serum creat TESTING only remove for PROD // dialogResult := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "\n cpsval: " || cpsval ,"Alert","OK" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; // if not exist CPSVal then // if tempcreat is not null then // cpsval := tempcreat as number; // endif; endif; // dialogResult := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "\n cpsvalTEST: " || cpsval ,"Alert","OK" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; // end of value for serum creatinine for TESTING only CPSValNum := CPSVal As Number; If exist CPSVal then crclmgdl := (int ((CPSValNum + 0.05) * 10))/10; crclumoll := (int (((crclmgdl * 88.4) + 0.05) * 10))/10; endif; domore := true; // Get the patient age (birthdate,dobM,dobD,birth_year, patientgender ) := read last { ClientInfo: BirthDate, BirthMonthNum, BirthDayNum, BirthYearNum, gendercode }; patientAge := (NOW - birthdate) / (1 year); patientage:= (int (patientage)); ;; evoke: // No evoke statement ;; logic: If not exist wt or not exist ht or not exist crclmgdl then domore := false; endif; if patientage < 18 then domore := false; else actualwt:= wt; // now ideal if patientgender = "Female" then WeightKg:= ((((ht /2.54)-60)* 2.3)+45.5); else WeightKg:= ((((ht /2.54)-60)* 2.3)+50); endif; //if patientgender = "F" idealwt := (int ((WeightKg+ 0.005) * 100))/100; extraideal := ""; if ht < ideal_WT_height_limit then extraideal := "(Patient < 60 inches)"; if patientgender = "Female" then idealwt := 45.5; else idealwt := 50; endif; endif; // now adjusted adjustedwt := ((actualwt - idealwt)* 0.4) + idealwt; // now round all actualwt := (int ((actualwt + 0.005) * 100))/100; idealwt := (int ((idealwt + 0.005) * 100))/100; adjustedwt := (int ((adjustedwt + 0.005) * 100))/100; commfield:="Calculated with age of " || patientage || ", Actual Weight:" || actualwt || ", Ideal Weight:" || idealwt || ", Adjusted Weight " || adjustedwt || " Gender:" || patientgender; // Added "ActualWeightOnly" TMS CSR 36322 If evokingobject.name matches pattern "Dabigatran%" or evokingobject.name matches pattern "Rivaroxaban%" then ActualWeightOnly := true; else ActualWeightOnly := false; endif; if actualwt < idealwt or ActualWeightOnly = true then weightused:= actualwt; else weightused:= adjustedwt; endif; commfield := commfield || ", WEIGHT USED:" || weightused; EstCrClval := ((140 - patientage) * weightused ) / (72 * crclmgdl); commfield := commfield || ", FORMULA USED:((140 - Age) x Wt / (72 x SerumCreat))"; if patientgender = "Female" then EstCrClval := EstCrClval * 0.85; commfield := commfield || " x 0.85"; endif; //gender = "F" EstCrClval := (int ((EstCrClval + 0.05) * 10))/ 10; crclestd:= EstCrClval; endif; conclude domore; ;; action: // This MLM returns two parameters, of types communication_type and form_type respectively. return commfield, crclestd, cpsval, wt, patientage; // return commfield, EstCrClval; ;; end: