| [613] | 1 | ORALWORD        ; SLC/JMH - Utilities for Checking if an order can be ordered ; 5/10/07 5:55am
 | 
|---|
 | 2 |         ;;3.0;ORDER ENTRY/RESULTS REPORTING;**243**;Dec 17, 1997;Build 242
 | 
|---|
 | 3 |         ;
 | 
|---|
 | 4 | ALLWORD(ORY,DFN,ORX,ORTYPE,PROV)        ;
 | 
|---|
 | 5 |         N OROI,ORYS,QOIEN,QPIEN,ORCLOZ,QOAA
 | 
|---|
 | 6 |         S OROI=0
 | 
|---|
 | 7 |         ;
 | 
|---|
 | 8 |         ;ORTYPE used to determine the type of data coming into the call
 | 
|---|
 | 9 |         ;ORYTPE="E" existing order, ORX equal the IEN from file 100 (used with
 | 
|---|
 | 10 |         ;copy,edit functionality)
 | 
|---|
 | 11 |         ;ORTYPE="Q" Quick Order, ORX equal the IEN from file 101.43
 | 
|---|
 | 12 |         ;ORTYPE="N" New order, ORX equal the IEN from file 101.41
 | 
|---|
 | 13 |         ;
 | 
|---|
 | 14 |         I ORTYPE="E" S OROI=$G(^OR(100,ORX,.1,1,0))
 | 
|---|
 | 15 |         I ORTYPE="Q" D
 | 
|---|
 | 16 |         .S QPIEN=$O(^ORD(101.41,"AB","OR GTX ORDERABLE ITEM","")) Q:QPIEN'>0
 | 
|---|
 | 17 |         .S QOIEN=$O(^ORD(101.41,ORX,6,"D",QPIEN,"")) Q:QOIEN'>0
 | 
|---|
 | 18 |         .S OROI=$G(^ORD(101.41,ORX,6,QOIEN,1))
 | 
|---|
 | 19 |         .S QOAA=$P($G(^ORD(101.41,ORX,5)),U,8)
 | 
|---|
 | 20 |         I ORTYPE="N" S OROI=ORX
 | 
|---|
 | 21 |         Q:OROI'>0
 | 
|---|
 | 22 |         S ORY=0
 | 
|---|
 | 23 |         ;checks if the orderable item (OROI) is a clozapine med
 | 
|---|
 | 24 |         ;  if not returns ORY=0
 | 
|---|
 | 25 |         S ORCLOZ=$$ISCLOZ(OROI),ORY=ORY_U_ORCLOZ,ORY(0)=U_ORCLOZ
 | 
|---|
 | 26 |         Q:'ORCLOZ
 | 
|---|
 | 27 |         N ORQUIT
 | 
|---|
 | 28 |         S ORQUIT=0
 | 
|---|
 | 29 |         I '$G(PROV) S PROV=DUZ
 | 
|---|
 | 30 |         I $G(PROV) D
 | 
|---|
 | 31 |         .I '$L($$DEA^XUSER(,PROV)) D
 | 
|---|
 | 32 |         ..S ORQUIT=1,ORY=1
 | 
|---|
 | 33 |         ..S ORQUIT=1,ORY=1
 | 
|---|
 | 34 |         ..S ORY(1)="*** You are not authorized to place Clozapine orders."
 | 
|---|
 | 35 |         ..S ORY(2)="You must have a DEA#.  Please contact your"
 | 
|---|
 | 36 |         ..S ORY(3)="CAC or IRM for more information. ***"
 | 
|---|
 | 37 |         .Q:ORQUIT
 | 
|---|
 | 38 |         .I '$D(^XUSEC("YSCL AUTHORIZED",PROV)) D
 | 
|---|
 | 39 |         ..S ORQUIT=1,ORY=1
 | 
|---|
 | 40 |         ..S ORY(1)="*** You are not authorized to place Clozapine orders."
 | 
|---|
 | 41 |         ..S ORY(2)="You must hold key YSCL AUTHORIZED.  Please contact your"
 | 
|---|
 | 42 |         ..S ORY(3)="CAC or IRM for more information on this key. ***"
 | 
|---|
 | 43 |         Q:ORQUIT
 | 
|---|
 | 44 |         ;  if is a cloz med , check if patient (DFN) can have a clozapine med
 | 
|---|
 | 45 |         S ORYS=$$CL^YSCLTST2(DFN)
 | 
|---|
 | 46 |         ;    if yes returns ORY=0
 | 
|---|
 | 47 |         I +ORYS>0 D BEFQUIT  Q
 | 
|---|
 | 48 |         ;    if no 
 | 
|---|
 | 49 |         ;      returns 
 | 
|---|
 | 50 |         ;    ORY=1
 | 
|---|
 | 51 |         ;    ORY(0)=CAPTION FOR DIALOG BOX
 | 
|---|
 | 52 |         ;    ORY(1-N)=MESSAGE TO DISPLAY
 | 
|---|
 | 53 |         S ORY=1_U_ORCLOZ,ORY(0)="Problem Ordering Clozapine Related Medication"_U_ORCLOZ
 | 
|---|
 | 54 |         ;patient not in clozapine patient program
 | 
|---|
 | 55 |         I +ORYS<0 D  Q
 | 
|---|
 | 56 |         .S ORY(1)="*** This patient is not registered in the clozapine treatment "
 | 
|---|
 | 57 |         .S ORY(2)="program or has been discontinued from the program and must "
 | 
|---|
 | 58 |         .S ORY(3)="have a new registration number assigned.  Contact the NCCC to "
 | 
|---|
 | 59 |         .S ORY(4)="get this patient registered in the program. ***"
 | 
|---|
 | 60 |         ;problem with lab tests
 | 
|---|
 | 61 |         I +ORYS=0 D  Q
 | 
|---|
 | 62 |         .I $$OVERRIDE^YSCLTST2(DFN) S ORY=0_U_ORCLOZ,ORY(0)=U_ORCLOZ D BEFQUIT  Q  ;override allowed
 | 
|---|
 | 63 |         .N COUNT S COUNT=0
 | 
|---|
 | 64 |         .S COUNT=COUNT+1,ORY(COUNT)="*** This clozapine drug may not be dispensed to the patient at this "
 | 
|---|
 | 65 |         .S COUNT=COUNT+1,ORY(COUNT)="time based on the available lab tests related to the clozapine "
 | 
|---|
 | 66 |         .S COUNT=COUNT+1,ORY(COUNT)="treatment program. Please contact the NCCC to request an override in"
 | 
|---|
 | 67 |         .S COUNT=COUNT+1,ORY(COUNT)="order to proceed with dispensing this drug. ***"
 | 
|---|
 | 68 |         .Q:'$L($P(ORYS,U,3))!('$L($P(ORYS,U,5)))
 | 
|---|
 | 69 |         .S COUNT=COUNT+1,ORY(COUNT)="Related Lab Test(s)"
 | 
|---|
 | 70 |         .S COUNT=COUNT+1,ORY(COUNT)="==================="
 | 
|---|
 | 71 |         .;the lab values returned by Mental Health are given in 4 digit numbers to be standard with 
 | 
|---|
 | 72 |         .;reporting formats to the NCCC, we are dividing by 1000 to align it with the display of the
 | 
|---|
 | 73 |         .;labs on the lab tab
 | 
|---|
 | 74 |         .;S:$L($P(ORYS,U,3)) COUNT=COUNT+1,ORY(COUNT)=$P(ORYS,U,3)_":  "_($P(ORYS,U,2)/1000)_" K/cmm"
 | 
|---|
 | 75 |         .;S:$L($P(ORYS,U,5)) COUNT=COUNT+1,ORY(COUNT)=$P(ORYS,U,5)_":  "_($P(ORYS,U,4)/1000)_" K/cmm"
 | 
|---|
 | 76 |         .S:$L($P(ORYS,U,3)) COUNT=COUNT+1,ORY(COUNT)="WBC:  "_($P(ORYS,U,2)/1000)_" K/cmm"
 | 
|---|
 | 77 |         .S:$L($P(ORYS,U,5)) COUNT=COUNT+1,ORY(COUNT)="ANC:  "_($P(ORYS,U,4)/1000)_" K/cmm"
 | 
|---|
 | 78 |         .S COUNT=COUNT+1,ORY(COUNT)="Date/Time of last tests: "_$$DATE^ORU($P(ORYS,U,6))
 | 
|---|
 | 79 |         Q
 | 
|---|
 | 80 | BEFQUIT ;
 | 
|---|
 | 81 |         Q:'$G(QOAA)
 | 
|---|
 | 82 |         N QODS,QORF,ORMAX,ORCLPAT
 | 
|---|
 | 83 |         S QODS=$O(^ORD(101.41,"AB","OR GTX DAYS SUPPLY","")) Q:QODS'>0
 | 
|---|
 | 84 |         S QODS=$O(^ORD(101.41,ORX,6,"D",QODS,"")) Q:QOIEN'>0
 | 
|---|
 | 85 |         S QODS=$G(^ORD(101.41,ORX,6,QODS,1))
 | 
|---|
 | 86 |         S QORF=$O(^ORD(101.41,"AB","OR GTX REFILLS","")) Q:QORF'>0
 | 
|---|
 | 87 |         S QORF=$O(^ORD(101.41,ORX,6,"D",QORF,"")) Q:QOIEN'>0
 | 
|---|
 | 88 |         S QORF=$G(^ORD(101.41,ORX,6,QORF,1))
 | 
|---|
 | 89 |         S QORF=QORF+1
 | 
|---|
 | 90 |         S ORCLPAT=$P(ORYS,U,7)
 | 
|---|
 | 91 |         S ORMAX=$S(ORYS="M":28,ORYS="B":14,ORYS="W":7,1:90)
 | 
|---|
 | 92 |         I QORF*QODS>ORMAX D
 | 
|---|
 | 93 |         .K ORY
 | 
|---|
 | 94 |         .S ORY=1_U_ORCLOZ,ORY(0)="Problem Ordering Clozapine Related Medication"_U_ORCLOZ
 | 
|---|
 | 95 |         .S ORY(1)="*** This patient is only allowed an order with a maximum Days Supply of "_ORMAX_"."
 | 
|---|
 | 96 |         .S ORY(2)="This includes the amounts added by any refills entered in with the order also."
 | 
|---|
 | 97 |         Q
 | 
|---|
 | 98 | ISCLOZ(OROI)    ;
 | 
|---|
 | 99 |         N ORPSOI,ORPSDRUG
 | 
|---|
 | 100 |         S ORPSOI=$P(^ORD(101.43,OROI,0),U,2)
 | 
|---|
 | 101 |         I $P(ORPSOI,";",2)'="99PSP" Q 0
 | 
|---|
 | 102 |         K ^TMP($J,"ORCLOZ")
 | 
|---|
 | 103 |         D ASP^PSS50(+ORPSOI,,,"ORCLOZ")
 | 
|---|
 | 104 |         S ORPSDRUG=$O(^TMP($J,"ORCLOZ",0))
 | 
|---|
 | 105 |         I 'ORPSDRUG K ^TMP($J,"ORCLOZ") Q 0
 | 
|---|
 | 106 |         K ^TMP($J,"ORCLOZ")
 | 
|---|
 | 107 |         D CLOZ^PSS50(ORPSDRUG,,,,,"ORCLOZ")
 | 
|---|
 | 108 |         I $G(^TMP($J,"ORCLOZ",ORPSDRUG,"CLOZ",0))>0 K ^TMP($J,"ORCLOZ") Q 1
 | 
|---|
 | 109 |         K ^TMP($J,"ORCLOZ")
 | 
|---|
 | 110 |         Q 0
 | 
|---|
 | 111 | ALLWRN(ORY,ORN,REFILLS) ;allow order to be renewed
 | 
|---|
 | 112 |         ;ORN is the order number
 | 
|---|
 | 113 |         ;REFILLS is the number of refills to be included with the renewed order
 | 
|---|
 | 114 |         N ORDS,ORQT,ORUPD,ORSCH,ORDUR,ORDFN,ORDRG,OROI,ORMAXDS,ORMAXQT,ORCLOZ,ORREF,ORMAXREF
 | 
|---|
 | 115 |         ;default return 1 (ORY=1 means allow renew)
 | 
|---|
 | 116 |         S ORY=1
 | 
|---|
 | 117 |         ;get DFN (ORDFN)
 | 
|---|
 | 118 |         S ORDFN=+$P(^OR(100,ORN,0),U,2)
 | 
|---|
 | 119 |         Q:'ORDFN
 | 
|---|
 | 120 |         ;get if order is a clozapine order (ORCLOZ)
 | 
|---|
 | 121 |         S OROI=$G(^OR(100,ORN,.1,1,0)) Q:'OROI
 | 
|---|
 | 122 |         S ORCLOZ=$$ISCLOZ(OROI)
 | 
|---|
 | 123 |         ;quit if order is not clozapine
 | 
|---|
 | 124 |         I 'ORCLOZ Q
 | 
|---|
 | 125 |         ;get schedule from order (ORSCH)
 | 
|---|
 | 126 |         S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","SCHEDULE",0)),1))
 | 
|---|
 | 127 |         ;get units per dose from order (ORUPD)
 | 
|---|
 | 128 |         S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","DOSE",0)),1))
 | 
|---|
 | 129 |         S ORSCH=$P(ORSCH,"&",3)
 | 
|---|
 | 130 |         ;get duration from order (ORDUR)
 | 
|---|
 | 131 |         I '$O(^OR(100,ORN,4.5,"ID","DURATION",0)) S ORDUR="~^"
 | 
|---|
 | 132 |         E  S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","DURATION",0)),1))
 | 
|---|
 | 133 |         ;get days supply from order (ORDS)
 | 
|---|
 | 134 |         S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","SUPPLY",0)),1))
 | 
|---|
 | 135 |         ;get drug (ptr50) from order (ORDRG)
 | 
|---|
 | 136 |         S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","DRUG",0)),1))
 | 
|---|
 | 137 |         ;get refills from order (ORREF)
 | 
|---|
 | 138 |         S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","REFILLS",0)),1))
 | 
|---|
 | 139 |         ;get quantity from order (ORQT)
 | 
|---|
 | 140 |         S ORSCH=$G(^OR(100,ORN,4.5,$O(^OR(100,ORN,4.5,"ID","QTY",0)),1))
 | 
|---|
 | 141 |         ;get max days supply for order (ORMAXDS)
 | 
|---|
 | 142 |         S ORMAXDS=$$DEFSPLY^ORWDPS1(ORDFN)
 | 
|---|
 | 143 |         ;if ds from order is > max ds return 0 (ORY=0)
 | 
|---|
 | 144 |         I ORDS>ORMAXDS D  Q
 | 
|---|
 | 145 |         .S ORY=0
 | 
|---|
 | 146 |         .S ORY(0)="Problem Renewing Clozapine Related Medication"_U_ORCLOZ
 | 
|---|
 | 147 |         .S ORY(1)="The Days Supply set for this order is greater than the Max Days Supply"
 | 
|---|
 | 148 |         .S ORY(2)="    allowed for this patient."
 | 
|---|
 | 149 |         ;get max quantity for order (ORMAXQT)
 | 
|---|
 | 150 |         D DAY2QTY^ORWDPS2(.ORMAXQT,ORDS,ORUPD,ORSCH,ORDUR,ORDFN,ORDRG)
 | 
|---|
 | 151 |         ;if qt from order is > max qt return 0 (ORY=0)
 | 
|---|
 | 152 |         I ORQT>ORMAXQT D  Q
 | 
|---|
 | 153 |         .S ORY=0
 | 
|---|
 | 154 |         .S ORY(0)="Problem Renewing Clozapine Related Medication"_U_ORCLOZ
 | 
|---|
 | 155 |         .S ORY(1)="The Quantity set for this order is greater than the Max Quantity"
 | 
|---|
 | 156 |         .S ORY(2)="    allowed for this patient."
 | 
|---|
 | 157 |         ;get max refills for order (ORMAXREF)
 | 
|---|
 | 158 |         D MAXREF^ORWDPS2(.ORMAXREF,ORDFN,ORDRG,ORDS,OROI,1)
 | 
|---|
 | 159 |         ;if refill from order is > max refills return 0 (ORY=0)
 | 
|---|
 | 160 |         I ORREF>ORMAXREF D  Q
 | 
|---|
 | 161 |         .S ORY=0
 | 
|---|
 | 162 |         .S ORY(0)="Problem Renewing Clozapine Related Medication"_U_ORCLOZ
 | 
|---|
 | 163 |         .S ORY(1)="The Refills field set for this order is greater than the Refills"
 | 
|---|
 | 164 |         .S ORY(2)="    allowed for this patient with the order having a Days Supply "
 | 
|---|
 | 165 |         .S ORY(3)="    of "_ORDS_"."
 | 
|---|
 | 166 |         Q
 | 
|---|