ORALWORD ; SLC/JMH - Utilities for Checking if an order can be ordered ; 5/10/07 5:55am ;;3.0;ORDER ENTRY/RESULTS REPORTING;**243**;Dec 17, 1997;Build 242 ; ALLWORD(ORY,DFN,ORX,ORTYPE,PROV) ; N OROI,ORYS,QOIEN,QPIEN,ORCLOZ,QOAA S OROI=0 ; ;ORTYPE used to determine the type of data coming into the call ;ORYTPE="E" existing order, ORX equal the IEN from file 100 (used with ;copy,edit functionality) ;ORTYPE="Q" Quick Order, ORX equal the IEN from file 101.43 ;ORTYPE="N" New order, ORX equal the IEN from file 101.41 ; I ORTYPE="E" S OROI=$G(^OR(100,ORX,.1,1,0)) I ORTYPE="Q" D .S QPIEN=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM","")) Q:QPIEN'>0 .S QOIEN=$O(^ORD(101.41,ORX,6,"D",QPIEN,"")) Q:QOIEN'>0 .S OROI=$G(^ORD(101.41,ORX,6,QOIEN,1)) .S QOAA=$P($G(^ORD(101.41,ORX,5)),U,8) I ORTYPE="N" S OROI=ORX Q:OROI'>0 S ORY=0 ;checks if the orderable item (OROI) is a clozapine med ; if not returns ORY=0 S ORCLOZ=$$ISCLOZ(OROI),ORY=ORY_U_ORCLOZ,ORY(0)=U_ORCLOZ Q:'ORCLOZ N ORQUIT S ORQUIT=0 I '$G(PROV) S PROV=DUZ I $G(PROV) D .I '$L($$DEA^XUSER(,PROV)) D ..S ORQUIT=1,ORY=1 ..S ORQUIT=1,ORY=1 ..S ORY(1)="*** You are not authorized to place Clozapine orders." ..S ORY(2)="You must have a DEA#. Please contact your" ..S ORY(3)="CAC or IRM for more information. ***" .Q:ORQUIT .I '$D(^XUSEC("YSCL AUTHORIZED",PROV)) D ..S ORQUIT=1,ORY=1 ..S ORY(1)="*** You are not authorized to place Clozapine orders." ..S ORY(2)="You must hold key YSCL AUTHORIZED. Please contact your" ..S ORY(3)="CAC or IRM for more information on this key. ***" Q:ORQUIT ; if is a cloz med , check if patient (DFN) can have a clozapine med S ORYS=$$CL^YSCLTST2(DFN) ; if yes returns ORY=0 I +ORYS>0 D BEFQUIT Q ; if no ; returns ; ORY=1 ; ORY(0)=CAPTION FOR DIALOG BOX ; ORY(1-N)=MESSAGE TO DISPLAY S ORY=1_U_ORCLOZ,ORY(0)="Problem Ordering Clozapine Related Medication"_U_ORCLOZ ;patient not in clozapine patient program I +ORYS<0 D Q .S ORY(1)="*** This patient is not registered in the clozapine treatment " .S ORY(2)="program or has been discontinued from the program and must " .S ORY(3)="have a new registration number assigned. Contact the NCCC to " .S ORY(4)="get this patient registered in the program. ***" ;problem with lab tests I +ORYS=0 D Q .I $$OVERRIDE^YSCLTST2(DFN) S ORY=0_U_ORCLOZ,ORY(0)=U_ORCLOZ D BEFQUIT Q ;override allowed .N COUNT S COUNT=0 .S COUNT=COUNT+1,ORY(COUNT)="*** This clozapine drug may not be dispensed to the patient at this " .S COUNT=COUNT+1,ORY(COUNT)="time based on the available lab tests related to the clozapine " .S COUNT=COUNT+1,ORY(COUNT)="treatment program. Please contact the NCCC to request an override in" .S COUNT=COUNT+1,ORY(COUNT)="order to proceed with dispensing this drug. ***" .Q:'$L($P(ORYS,U,3))!('$L($P(ORYS,U,5))) .S COUNT=COUNT+1,ORY(COUNT)="Related Lab Test(s)" .S COUNT=COUNT+1,ORY(COUNT)="===================" .;the lab values returned by Mental Health are given in 4 digit numbers to be standard with .;reporting formats to the NCCC, we are dividing by 1000 to align it with the display of the .;labs on the lab tab .;S:$L($P(ORYS,U,3)) COUNT=COUNT+1,ORY(COUNT)=$P(ORYS,U,3)_": "_($P(ORYS,U,2)/1000)_" K/cmm" .;S:$L($P(ORYS,U,5)) COUNT=COUNT+1,ORY(COUNT)=$P(ORYS,U,5)_": "_($P(ORYS,U,4)/1000)_" K/cmm" .S:$L($P(ORYS,U,3)) COUNT=COUNT+1,ORY(COUNT)="WBC: "_($P(ORYS,U,2)/1000)_" K/cmm" .S:$L($P(ORYS,U,5)) COUNT=COUNT+1,ORY(COUNT)="ANC: "_($P(ORYS,U,4)/1000)_" K/cmm" .S COUNT=COUNT+1,ORY(COUNT)="Date/Time of last tests: "_$$DATE^ORU($P(ORYS,U,6)) Q BEFQUIT ; Q:'$G(QOAA) N QODS,QORF,ORMAX,ORCLPAT S QODS=$O(^ORD(101.41,"AB","OR GTX DAYS SUPPLY","")) Q:QODS'>0 S QODS=$O(^ORD(101.41,ORX,6,"D",QODS,"")) Q:QOIEN'>0 S QODS=$G(^ORD(101.41,ORX,6,QODS,1)) S QORF=$O(^ORD(101.41,"AB","OR GTX REFILLS","")) Q:QORF'>0 S QORF=$O(^ORD(101.41,ORX,6,"D",QORF,"")) Q:QOIEN'>0 S QORF=$G(^ORD(101.41,ORX,6,QORF,1)) S QORF=QORF+1 S ORCLPAT=$P(ORYS,U,7) S ORMAX=$S(ORYS="M":28,ORYS="B":14,ORYS="W":7,1:90) I QORF*QODS>ORMAX D .K ORY .S ORY=1_U_ORCLOZ,ORY(0)="Problem Ordering Clozapine Related Medication"_U_ORCLOZ .S ORY(1)="*** This patient is only allowed an order with a maximum Days Supply of "_ORMAX_"." .S ORY(2)="This includes the amounts added by any refills entered in with the order also." Q ISCLOZ(OROI) ; N ORPSOI,ORPSDRUG S ORPSOI=$P(^ORD(101.43,OROI,0),U,2) I $P(ORPSOI,";",2)'="99PSP" Q 0 K ^TMP($J,"ORCLOZ") D ASP^PSS50(+ORPSOI,,,"ORCLOZ") S ORPSDRUG=$O(^TMP($J,"ORCLOZ",0)) I 'ORPSDRUG K ^TMP($J,"ORCLOZ") Q 0 K ^TMP($J,"ORCLOZ") D CLOZ^PSS50(ORPSDRUG,,,,,"ORCLOZ") I $G(^TMP($J,"ORCLOZ",ORPSDRUG,"CLOZ",0))>0 K ^TMP($J,"ORCLOZ") Q 1 K ^TMP($J,"ORCLOZ") Q 0 ALLWRN(ORY,ORN,REFILLS) ;allow order to be renewed ;ORN is the order number ;REFILLS is the number of refills to be included with the renewed order N ORDS,ORQT,ORUPD,ORSCH,ORDUR,ORDFN,ORDRG,OROI,ORMAXDS,ORMAXQT,ORCLOZ,ORREF,ORMAXREF ;default return 1 (ORY=1 means allow renew) S ORY=1 ;get DFN (ORDFN) S ORDFN=+$P(^OR(100,ORN,0),U,2) Q:'ORDFN ;get if order is a clozapine order (ORCLOZ) S OROI=$G(^OR(100,ORN,.1,1,0)) Q:'OROI S ORCLOZ=$$ISCLOZ(OROI) ;quit if order is not clozapine I 'ORCLOZ Q ;get schedule from order (ORSCH) S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","SCHEDULE",0)),1)) ;get units per dose from order (ORUPD) S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","DOSE",0)),1)) S ORSCH=$P(ORSCH,"&",3) ;get duration from order (ORDUR) I '$O(^OR(100,ORN,4.5,"ID","DURATION",0)) S ORDUR="~^" E S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","DURATION",0)),1)) ;get days supply from order (ORDS) S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","SUPPLY",0)),1)) ;get drug (ptr50) from order (ORDRG) S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","DRUG",0)),1)) ;get refills from order (ORREF) S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","REFILLS",0)),1)) ;get quantity from order (ORQT) S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","QTY",0)),1)) ;get max days supply for order (ORMAXDS) S ORMAXDS=$$DEFSPLY^ORWDPS1(ORDFN) ;if ds from order is > max ds return 0 (ORY=0) I ORDS>ORMAXDS D Q .S ORY=0 .S ORY(0)="Problem Renewing Clozapine Related Medication"_U_ORCLOZ .S ORY(1)="The Days Supply set for this order is greater than the Max Days Supply" .S ORY(2)=" allowed for this patient." ;get max quantity for order (ORMAXQT) D DAY2QTY^ORWDPS2(.ORMAXQT,ORDS,ORUPD,ORSCH,ORDUR,ORDFN,ORDRG) ;if qt from order is > max qt return 0 (ORY=0) I ORQT>ORMAXQT D Q .S ORY=0 .S ORY(0)="Problem Renewing Clozapine Related Medication"_U_ORCLOZ .S ORY(1)="The Quantity set for this order is greater than the Max Quantity" .S ORY(2)=" allowed for this patient." ;get max refills for order (ORMAXREF) D MAXREF^ORWDPS2(.ORMAXREF,ORDFN,ORDRG,ORDS,OROI,1) ;if refill from order is > max refills return 0 (ORY=0) I ORREF>ORMAXREF D Q .S ORY=0 .S ORY(0)="Problem Renewing Clozapine Related Medication"_U_ORCLOZ .S ORY(1)="The Refills field set for this order is greater than the Refills" .S ORY(2)=" allowed for this patient with the order having a Days Supply " .S ORY(3)=" of "_ORDS_"." Q