Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: APSPFNC2

APSPFNC2.m

Go to the documentation of this file.
  1. APSPFNC2 ;IHS/MSC/PLS - Prescription Creation Support ;07-Jul-2015 15:21;DU
  1. ;;7.0;IHS PHARMACY MODIFICATIONS;**1005,1006,1007,1008,1009,1011,1013,1015,1016,1017,1019**;Sep 23, 2004;Build 4
  1. ;=================================================================
  1. ; Create a verified prescription
  1. MAKEVRX(DATA,RXORD) ;
  1. F RXORD=0:0 S RXORD=$O(RXORD(RXORD)) Q:'RXORD D
  1. .D CREATE(RXORD(RXORD),1)
  1. Q
  1. ; Call Pharmacy Package
  1. CREATE(ORIEN,FORCE) ;
  1. N PSOX,NODE0,ORD,OR0,USER1,SIGOK,PSODRUG,PSONEW,PSOMAX,PSOMSG,PSODFN,PSOCOU
  1. N PSOCOUU,PSOCS,PSOFDR,PSONOOR,PSOPAR,PSORX,PSOSITE,RXFL,RXORD,SEG1,SPEED
  1. N TALK,ARY,RET,PRC,PSOINSFL,IEN,INSTIEN,EPHMFLG,RNWORDER,PICKUP,APSPPRIO
  1. S FORCE=$G(FORCE,0)
  1. S IEN=0
  1. S ORIEN=+$G(ORIEN)
  1. Q:'ORIEN
  1. S PSOSITE=$$LOC(ORIEN)
  1. Q:'PSOSITE
  1. S INSTIEN=+$$GET1^DIQ(59,PSOSITE,100,"I")
  1. S ORD=$G(^OR(100,ORIEN,4)) ; Get pending order #
  1. Q:ORD'["S" ; Not a pending outpatient med order or already processed
  1. S ORD=+ORD
  1. Q:'ORD!('$D(^PS(52.41,ORD,0)))
  1. S EPHMFLG=$$GET^XPAR("DIV.`"_DUZ(2)_"^SYS","APSP AUTO RX")
  1. S OR0=^PS(52.41,ORD,0)
  1. S PSONEW("ELECTRONIC PHARMACY")=$$VALUE^ORCSAVE2(+OR0,"PHARMACY")
  1. S PSONEW("DAW")=$$VALUE^ORCSAVE2(+OR0,"DAW")
  1. S PICKUP=$$VALUE^ORCSAVE2(+OR0,"PICKUP")
  1. S:(EPHMFLG=2)&(PICKUP="C") FORCE=1 ;P11
  1. S:(EPHMFLG>0)&(PICKUP="P") FORCE=1 ;P11
  1. I 'FORCE Q:((EPHMFLG=1!(EPHMFLG=2))&'PSONEW("ELECTRONIC PHARMACY"))
  1. S PSODFN=+$P(OR0,U,2)
  1. S RNWORDER=$P(OR0,U,21)
  1. S APSPPRIO="" ;P13 Set priority variable
  1. S (OI,PSODRUG("OI"))=+$P(OR0,U,8),PSODRUG("OIN")=$P(^PS(50.7,$P(OR0,"^",8),0),"^"),OID=$P(OR0,"^",9)
  1. I $P($G(OR0),"^",9) S POERR=1,DREN=$P(OR0,"^",9) D DRG^PSOORDRG K POERR
  1. E D DREN^PSOORNW2
  1. I '$G(PSODRUG("IEN")) D Q ; No drug
  1. .N DFN,POIN
  1. .S DFN=+$P(OR0,U,2)
  1. .S POIN=$$GET1^DIQ(50.7,$P(OR0,U,8),.01)
  1. .D NOTIF(DUZ,DFN,ORIEN,"Unable to generate "_POIN_" prescription for "_$$GET1^DIQ(2,DFN,.01),"Missing Drug")
  1. .D AFLOG(.RET,+OR0,0,"No available drug for "_POIN)
  1. ;
  1. DRG I $P($G(^PSDRUG(+$G(PSODRUG("IEN")),"CLOZ1")),"^")="PSOCLO1" D CLOZ^PSOORFI2
  1. S PSODRUG("DEA")=1
  1. I $G(PSODRUG("DEA"))]"" D
  1. .S PSOCS=0 K DIR,DIC,PSOX
  1. .F DEA=1:1 Q:$E(PSODRUG("DEA"),DEA)="" I $E(+PSODRUG("DEA"),DEA)>1,$E(+PSODRUG("DEA"),DEA)<6 S $P(PSOCS,"^")=1 S:$E(+PSODRUG("DEA"),DEA)=2 $P(PSOCS,"^",2)=1
  1. .S PSOMAX=$S($G(CLOZPAT)=0:0,$G(CLOZPAT)=1:1,PSOCS&('$G(CLOZPAT)):5,1:11) I '$G(CLOZPAT) I PSODRUG("DEA")["A"&(PSODRUG("DEA")'["B")!(PSODRUG("DEA")["F") S PSOMAX=0
  1. E S PSOMAX=$S($G(CLOZPAT)=1:1,1:$P(OR0,"^",11))
  1. ;
  1. D DOSE(ORD)
  1. ;
  1. D AUTO^PSONRXN
  1. S PSONEW("RX #")="X"_PSONEW("RX #")
  1. S PSOX=PSONEW("RX #")
  1. S PSONEW("AUTOFIN")=1
  1. ;
  1. S PSONEW("ISSUE DATE")=$S($P($G(OR0),U,6):$E($P(OR0,U,6),1,7),1:DT)
  1. S PSONEW("PATIENT STATUS")=$S(+$G(^PS(55,PSODFN,"PS")):+$G(^PS(55,PSODFN,"PS")),1:"")
  1. S:'PSONEW("PATIENT STATUS") PSONEW("PATIENT STATUS")=$S($$GET^XPAR("DIV.`"_INSTIEN_"^SYS","APSP AUTO RX DEF PT STATUS"):$$GET^XPAR("DIV.`"_INSTIEN_"^SYS","APSP AUTO RX DEF PT STATUS"),1:"")
  1. S PSONEW("PROVIDER")=+$P(OR0,U,5)
  1. S PSONEW("QTY")=$P(OR0,U,10)
  1. S PSONEW("MAIL/WINDOW")=$S($P(OR0,U,17)="M":"M",1:"W")
  1. D USER^PSOORFI2($P(OR0,U,5))
  1. S PSONEW("CLERK CODE")=$P(OR0,U,4),PSONEW("PROVIDER")=$P(OR0,U,5),PSONEW("PROVIDER NAME")=USER1
  1. S PSONEW("CM")=$S($L($$VALUE^ORCSAVE2(+OR0,"CMF")):$$VALUE^ORCSAVE2(+OR0,"CMF"),1:"N")
  1. S PSONEW("CLININD")=$S($L($$VALUE^ORCSAVE2(+OR0,"CLININD")):$$VALUE^ORCSAVE2(+OR0,"CLININD"),1:"")
  1. S PSONEW("CLININD2")=$S($L($$VALUE^ORCSAVE2(+OR0,"CLININD2")):$$VALUE^ORCSAVE2(+OR0,"CLININD2"),1:"")
  1. S PSONEW("SNMDCNPTID")=$S($L($$VALUE^ORCSAVE2(+OR0,"SNMDCNPTID")):$$VALUE^ORCSAVE2(+OR0,"SNMDCNPTID"),1:"")
  1. S PSONEW("DSCMED")=$S($L($$VALUE^ORCSAVE2(+OR0,"DSCMED")):$$VALUE^ORCSAVE2(+OR0,"DSCMED"),1:"") ;P1017
  1. S PSONEW("DAYS SUPPLY")=$P(OR0,U,22)
  1. S PSONEW("ELECTRONIC PHARMACY")=$S($$VALUE^ORCSAVE2(+OR0,"PHARMACY"):$$VALUE^ORCSAVE2(+OR0,"PHARMACY"),1:"")
  1. S PSONEW("# OF REFILLS")=$P(OR0,U,11) ;$S(+$P(OR0,"^",11)>+$P(^PS(53,RXPT,0),"^",4):+$P(^PS(53,RXPT,0),"^",4),1:+$P(OR0,"^",11))
  1. S PSONEW("CLINIC")=+$P(OR0,"^",13)
  1. S PSONEW("LOGIN DATE")=+$P(OR0,U,12)
  1. S (Y,PSONEW("FILL DATE"))=$S($E($P(OR0,"^",6),1,7)<DT:DT,1:DT) X ^DD("DD") S PSORX("FILL DATE")=Y
  1. S PSONEW("DISPENSE DATE")=DT
  1. S PSONEW("EXPIRATION DATE")=$$FMADD^XLFDT(DT,$S(+$P(OR0,U,22)>0:+$P(OR0,U,22),1:10))
  1. S PSONEW("STOP DATE")=PSONEW("EXPIRATION DATE")
  1. S PSONEW("LAST DISPENSE DATE")=DT
  1. S PSONEW("POE")=1
  1. ;IHS/MSC/PLS - added $S - p1019
  1. S PSONEW("REMARKS")=$S(EPHMFLG=2&(PICKUP="C"):"AUTOFINISHED ADMINISTERED IN CLINIC",1:"AUTOFINISHED PRESCRIPTION")
  1. ;IHS/MSC/MGH Patch 13 get pickup type
  1. S PSONEW("PICKUP")=PICKUP
  1. S SPEED=1
  1. S PSONEW("STATUS")=0 ;Set STATUS to Active
  1. S PSOFDR=1
  1. S PSOINSFL=$P($G(^PS(52.41,ORD,"INS")),"^",2) ; Patient Instruction Flag
  1. D INSCMT
  1. D INS1
  1. D SIG
  1. D GETPRVI
  1. ;
  1. D EN^PSON52(.PSONEW)
  1. S ARY("COM")="Autofinished RX for external fill"
  1. S ARY("REASON")="B"
  1. S ARY("RX REF")=0
  1. D UPTLOG(.RET,+$G(PSONEW("IRXN")),0,.ARY)
  1. D AFLOG(.RET,+OR0,1)
  1. D EN^PSOHLSN1(PSONEW("IRXN"),"SC","CM")
  1. D EN^PSOHLSN1(PSONEW("IRXN"),"OK","CM")
  1. D EN^APSPELRX(PSONEW("IRXN"),PSONEW("ELECTRONIC PHARMACY"))
  1. ;Handle renewed prescription
  1. D CHKRNW(PSONEW("IRXN"))
  1. Q
  1. ;
  1. ; Find a site
  1. LOC(ORIEN) ; PEP
  1. Q $$LOC^APSPFNC6(ORIEN)
  1. ;
  1. INSCMT ; Extract provider comments
  1. I $O(^PS(52.41,ORD,2,0)) D
  1. .S PHI=^PS(52.41,ORD,2,0),T=0 D
  1. ..F S T=$O(^PS(52.41,ORD,2,T)) Q:'T S PHI(T)=^PS(52.41,ORD,2,T,0)
  1. I $O(^PS(52.41,ORD,3,0)) D
  1. .S PRC=^PS(52.41,ORD,3,0),T=0 D
  1. ..F S T=$O(^PS(52.41,ORD,3,T)) Q:'T S PRC(T)=^PS(52.41,ORD,3,T,0)
  1. Q
  1. INS1 ;
  1. N INST,MIG,SG,JUNK,IEN,SINS1
  1. S IEN=1
  1. S INST=0 F S INST=$O(^PS(52.41,ORD,"INS1",INST)) Q:'INST S (MIG,PSONEW("SIG",INST))=^PS(52.41,ORD,"INS1",INST,0) D
  1. .F SG=1:1:$L(MIG," ") S IEN=IEN+1,$P(JUNK("PSOPO",$J,IEN,0)," ",20)=" " S JUNK("PSOPO",$J,IEN,0)=$G(JUNK("PSOPO",$J,IEN,0))_" "_$P(MIG," ",SG)
  1. I $P($G(^PS(55,PSODFN,"LAN")),"^"),$O(^PS(52.41,ORD,"INS1",0)) D
  1. .I $G(^PS(50.7,PSODRUG("OI"),"INS1"))]"" S (X,PSONEW("SINS"))=^PS(50.7,PSODRUG("OI"),"INS1") D SSIG^PSOHELP
  1. .I $G(SINS1)]"" S PSONEW("SINS")=$E(SINS1,2,250)
  1. .S IEN=IEN+1,JUNK("PSOPO",$J,IEN,0)=" Other Pat Instruct: "_$S($G(PSONEW("SINS"))]"":PSONEW("SINS"),1:"")
  1. Q
  1. ;
  1. SIG ;
  1. S SIG=0,PSOFINFL=1 F S SIG=$O(^PS(52.41,ORD,"SIG",SIG)) Q:'SIG D
  1. .S SIG(SIG)=^PS(52.41,ORD,"SIG",SIG,0)
  1. D EN^PSOFSIG(.PSONEW)
  1. S:$O(SIG(0)) SIGOK=1
  1. F D=0:0 S D=$O(^PS(52.41,ORD,"INS1",D)) Q:'D D
  1. .S PSONEW("INS",D)=^PS(52.41,ORD,"INS1",D,0)
  1. Q
  1. ; Update activity or label log and return success flag
  1. ; Input: RX - IEN to Prescription File (52)
  1. ; TYPE - 0=Activity, 1=Label, 2=Reprint
  1. ; ARY - Holds data for log type
  1. UPTLOG(DATA,RX,TYPE,ARY) ;EP
  1. N FDA,ERR,FN,IENS,USR
  1. S IENS="+1,"_RX_","
  1. S USR=$S($G(ARY("USER")):ARY("USER"),1:DUZ)
  1. S DATA=0
  1. I '$G(TYPE)!($G(TYPE)=2) D ;Activity Log
  1. .S FN=52.3
  1. .S FDA(FN,IENS,.01)=$$NOW^XLFDT()
  1. .S FDA(FN,IENS,.02)=$G(ARY("REASON"))
  1. .S FDA(FN,IENS,.03)=USR
  1. .S FDA(FN,IENS,.04)=$G(ARY("RX REF"))
  1. .S FDA(FN,IENS,.05)=$E($G(ARY("COM")),1,75)
  1. .S FDA(FN,IENS,9999999.01)=$G(ARY("DEV"))
  1. .S FDA(FN,IENS,9999999.02)=$G(ARY("TYPE"))
  1. E I $G(TYPE)=1 D ;Print Label Log
  1. .S FN=52.032
  1. .S FDA(FN,IENS,.01)=$$NOW^XLFDT()
  1. .S FDA(FN,IENS,1)=$G(ARY("RX REF"))
  1. .S FDA(FN,IENS,2)=$G(ARY("COM"))
  1. .S FDA(FN,IENS,3)=USR
  1. .S FDA(FN,IENS,5)=$G(ARY("DEV"))
  1. D UPDATE^DIE(,"FDA",,"ERR")
  1. I '$D(ERR) S DATA=1
  1. E S DATA="0^Unable to update log"
  1. Q
  1. ;
  1. ; Log autofinish activity
  1. ; Input: OIEN - Order IEN
  1. ; SUC - Successful flag
  1. ; COM - Comment for unsuccessful
  1. AFLOG(DATA,OIEN,SUC,COM) ;EP
  1. N FDA,ERR,FN
  1. I '$G(SUC),$O(^APSPAF("C",+$G(OIEN),0)) Q
  1. S IENS="+1,"
  1. S DATA=0
  1. S FN=9009033.92
  1. S FDA(FN,IENS,.01)=$$NOW^XLFDT()
  1. S FDA(FN,IENS,.02)=$G(OIEN)
  1. S FDA(FN,IENS,.03)=$G(SUC)
  1. S FDA(FN,IENS,.04)=$G(COM)
  1. D UPDATE^DIE(,"FDA",,"ERR")
  1. I '$D(ERR) S DATA=1
  1. E S DATA="0^Unable to update log"
  1. Q
  1. ;
  1. GETPRVI ; EP-Get provider instructions
  1. Q:'$O(PRC(0))!'$$GET^XPAR("DIV.`"_INSTIEN_"^SYS","APSP AUTO RX ADD PRV COMMENT")
  1. N NI,NC
  1. S PSOPRC=1,NI=0 F I=0:0 S I=$O(PSONEW("SIG",I)) Q:'I S NI=I
  1. D EXPPRC^PSOORFI4(.PRC)
  1. S NC=0 F I=0:0 S I=$O(PRC(I)) Q:'I S NC=NC+1
  1. I NI'>1,NC=1,($L($G(PSONEW("SIG",NI)))+$L(PRC(1)))'>250 D
  1. .S PSONEW("SIG",1)=$G(PSONEW("SIG",NI))_" "_PRC(1)
  1. .S:$E(PSONEW("SIG",1))=" " PSONEW("SIG",1)=$E(PSONEW("SIG",1),2,250) S PSONEW("INS")=PSONEW("SIG",1)
  1. E D
  1. .F I=0:0 S I=$O(PRC(I)) Q:'I S NI=NI+1,(PSONEW("SIG",NI),PSONEW("INS",NI))=PRC(I)
  1. .I $E(PSONEW("SIG",1))=" " S PSONEW("SIG",1)=$E(PSONEW("SIG",1),2,250)
  1. D EN^PSOFSIG(.PSONEW)
  1. Q
  1. ;
  1. ADDPCSIG ;EP - Add provider comments to SIG
  1. N LP,LP1,SCNT
  1. S SCNT=$O(SIG($C(1)),-1)
  1. S LP=0 F S LP=$O(PSONEW("SIG",LP)) Q:'LP D
  1. .S SCNT=SCNT+1 S SIG(SCNT)=$G(PSONEW("SIG",LP))
  1. .S SIG(SCNT)=$$UP^XLFSTR(SIG(SCNT))
  1. Q
  1. DOSE(ORD) ;pending orders
  1. N DOSE,DOSE1,I,UNITS,ROUTE,DOENT
  1. S DOENT=0
  1. F I=0:0 S I=$O(^PS(52.41,ORD,1,I)) Q:'I S DOSE=$G(^PS(52.41,ORD,1,I,1)),DOSE1=$G(^(2)) D
  1. .S PSONEW("DOSE",I)=$P(DOSE1,"^"),PSONEW("DOSE ORDERED",I)=$P(DOSE1,"^",2),PSONEW("UNITS",I)=$P(DOSE,"^",9),PSONEW("NOUN",I)=$P(DOSE,"^",5)
  1. .S:$P(DOSE,"^",9) UNITS=$P(^PS(50.607,$P(DOSE,"^",9),0),"^")
  1. .S PSONEW("VERB",I)=$P(DOSE,"^",10),PSONEW("ROUTE",I)=$P(DOSE,"^",8)
  1. .S:$P(DOSE,"^",8) ROUTE=$P(^PS(51.2,$P(DOSE,"^",8),0),"^")
  1. .S PSONEW("SCHEDULE",I)=$P(DOSE,"^"),PSONEW("DURATION",I)=$P(DOSE,"^",2)
  1. .S PSONEW("DURATION",I)=$S($E(PSONEW("DURATION",I),1)'?.N:$E(PSONEW("DURATION",I),2,99)_$E(PSONEW("DURATION",I),1),1:PSONEW("DURATION",I)) ;IHS/MSC/MGH - P1013
  1. .;S DOENT=$G(DOENT)+1 S PSONEW("CONJUNCTION",I)=$S($P(DOSE,"^",6)="A":"AND",$P(DOSE,"^",6)="S":"THEN",$P(DOSE,"^",6)="X":"EXCEPT",1:"") ;IHSMSC/PLS - P1015
  1. .S DOENT=$G(DOENT)+1 S PSONEW("CONJUNCTION",I)=$P(DOSE,"^",6)
  1. S PSONEW("ENT")=DOENT
  1. Q
  1. ;Return list of pharmacies from APSP PHARMACY LIST
  1. PHMLST(DATA,ZIP,RAD) ;EP
  1. N IEN,CNT,ZARY,ZC,PTYPE
  1. S DATA=$NA(^TMP("APSPOPHM",$J))
  1. K @DATA
  1. Q:'$G(ZIP)
  1. D GETZC(.ZARY,ZIP,RAD)
  1. S ZC="",CNT=0 F S ZC=$O(ZARY(ZC)) Q:'$L(ZC) D
  1. .S IEN=0 F S IEN=$O(^APSPOPHM("ZIP",ZC,IEN)) Q:'IEN D ADDPHM(IEN,ZARY(ZC))
  1. I $$GET^XPAR("ALL","APSP SS PHARMACY MAILORDER") D
  1. .S PTYPE=1
  1. .S LP=0
  1. .F S LP=$O(^APSPOPHM(LP)) Q:'LP D
  1. ..D:$$SPECID^APSPFNC5(LP,PTYPE,1) ADDPHM(LP,99)
  1. Q
  1. ;Return list of pharmacies from IEN list
  1. PHMLST2(DATA,IEN) ;EP
  1. N CNT
  1. S DATA=$NA(^TMP("APSPOPHM",$J))
  1. K @DATA
  1. S:$G(IEN) IEN(-1)=IEN
  1. S IEN="",CNT=0
  1. F S IEN=$O(IEN(IEN)) Q:IEN="" D ADDPHM(+IEN(IEN),,0)
  1. Q
  1. ADDPHM(IEN,DIST,NEWRX) ;
  1. N N0,N1,N2,N7,N8,I,ID,SPEC,SVL
  1. S SPEC=""
  1. S NEWRX=$G(NEWRX,1)
  1. S N0=$G(^APSPOPHM(IEN,0)),N1=$G(^(1)),N2=$G(^(2)),N7=$G(^(7))
  1. Q:'$L(N0)
  1. S SVL=$P(N0,U,5)
  1. I NEWRX Q:'(SVL#2) ;P12 Only return NEWRX service level
  1. I N7,DT<N7 Q
  1. I $P(N7,U,2),DT>$P(N7,U,2) Q
  1. S CNT=CNT+1,DIST=$G(DIST)
  1. ;IHS/MSC/MGH Update for specialty IDs
  1. I $D(^APSPOPHM(IEN,8)) D
  1. .S I=0 F S I=$O(^APSPOPHM(IEN,8,I)) Q:I="" D
  1. ..S ID=$G(^APSPOPHM(IEN,8,I,0))
  1. ..S ID=$S(ID=1:"MAIL ORDER",ID=2:"FAX",ID=8:"RETAIL",ID=16:"SPECIALTY",ID=32:"LONG-TERM CARE",ID=64:"24 HOUR",1:"")
  1. ..I ID'="" D
  1. ...I SPEC="" S SPEC=ID
  1. ...E S SPEC=SPEC_","_ID
  1. ; IEN^StoreName^Address1 Address2^City^State^Zip^PFAX^PPhone^Distance^Specialty
  1. S @DATA@(+DIST,CNT)=IEN_U_$P(N0,U,10)_U_$P(N1,U)_" "_$P(N1,U,2)_U_$P(N1,U,3)_U_$P(N1,U,4)_U_$P(N1,U,5)_U_$P(N2,U,2)_U_$P(N2,U)_U_$FN(DIST,"",2)_U_SPEC
  1. Q
  1. ; Return array of zipcodes for given zipcode
  1. ; Input: ARY - return array - pass by reference
  1. ; ZIP - 5 DIGIT ZIP CODE
  1. ; R - radius
  1. ; Output: ARY(ZC)=radius
  1. ;
  1. GETZC(ARY,ZIP,R) ;EP
  1. N ZIEN,ZC,D,RAD
  1. K ARY
  1. S ZIEN=$O(^APSPZCPX("B",ZIP,0)) Q:'ZIEN D
  1. .S RAD="" F S RAD=$O(^APSPZCPX(ZIEN,1,"B",RAD)) Q:RAD=""!(RAD>R) D
  1. ..S ZC=0 F S ZC=$O(^APSPZCPX(ZIEN,1,"B",RAD,ZC)) Q:'ZC D
  1. ...S ARY($P(^APSPZCPX(ZC,0),U))=RAD
  1. Q
  1. ; Returns ability of user to e-prescribe
  1. ; Input: USR - IEN to New Person File
  1. ; Output: 0 = e-Prescribing is not available to user
  1. ; 1 = e-Prescribing is available to user
  1. ERXUSER(DATA,USR) ; EP
  1. S DATA=1
  1. I $G(USR) D
  1. .S DATA=''$L($$SPI^APSPES1(USR))
  1. .S:'DATA DATA=+$$GET^XPAR($$ENT^CIAVMRPC("APSP AUTO RX ELECTRONIC",.ENT,USR),"APSP AUTO RX ELECTRONIC")
  1. Q
  1. ; Returns availablity of Orderable Item to be e-prescribed
  1. ; Input: OIIEN - Orderable Item IEN
  1. ; SCH - String of schedules - defaults to 2345
  1. ERXOI(DATA,OIIEN,SCH) ; EP
  1. N PSOI
  1. S DATA=1,SCH=$G(SCH,"2345")
  1. I $G(OIIEN) D
  1. .S PSOI=+$P($G(^ORD(101.43,+OIIEN,0)),U,2) ; Pharmacy Orderable Item IEN
  1. .S DIEN=0 F S DIEN=$O(^PSDRUG("ASP",PSOI,DIEN)) Q:'DIEN D Q:'DATA
  1. ..S DATA='$$ISSCH(DIEN,SCH)
  1. Q
  1. ; Returns result of DEA Special Handling Comparison
  1. ; Input : ORD = Order ID
  1. ; CLS = Drug class
  1. DEACLS(DATA,ORD,CLS) ; EP -
  1. N PSOI,OIIEN
  1. S OIIEN=$$VALUE^ORCSAVE2(+ORD,"ORDERABLE")
  1. S DATA=0
  1. I $G(OIIEN) D
  1. .S PSOI=+$P($G(^ORD(101.43,+OIIEN,0)),U,2) ; Pharmacy Orderable Item IEN
  1. .S DIEN=0 F S DIEN=$O(^PSDRUG("ASP",PSOI,DIEN)) Q:'DIEN D Q:DATA
  1. ..S DATA=$$ISSCH(DIEN,CLS)
  1. Q
  1. ; Check for schedule drugs
  1. ISSCH(DRUG,SCH) ;PEP - Returns boolean value
  1. N DS,RES
  1. S RES=0
  1. S DS=+$P(^PSDRUG(DRUG,0),U,3)
  1. S RES=SCH[DS
  1. Q RES
  1. ; Notify user of autofinish failure
  1. ; Input: USR - User IEN
  1. ; DFN - Patient IEN
  1. ; ORIEN - Order IEN
  1. ; MSG - Message text
  1. ; ALRTD - Alert data
  1. NOTIF(USR,DFN,ORIEN,MSG,ALRTD) ;EP -
  1. N XQA,XQAID,XQADATA,XQAMSG
  1. S XQA(USR)=""
  1. S XQAMSG="Autofinish Failure:"_$G(MSG)
  1. S XQAID="OR"_","_DFN_","_99003
  1. S:$G(ORIEN) XQADATA=ORIEN_"@"_$G(ALRTD)
  1. D SETUP^XQALERT
  1. Q
  1. ; Check for renewed prescription
  1. ; Input: RXIEN- IEN to File 52
  1. CHKRNW(RXIEN) ;
  1. ;Check Placer ID of RXIEN
  1. ; Check Replaced Order # field value
  1. ; Check Status of Replaced Order order
  1. ; If RENEWED then set:
  1. ; - Activity Log - RENEWED
  1. Q:'$G(RXIEN)
  1. N PLACER,ORGIEN,RENEWED,ORGPKGID,ORXNUM ;,PSORENW,PSONEW
  1. N REA,DA,MSG,PSCAN
  1. S PLACER=$$GET1^DIQ(52,RXIEN,39.3)
  1. Q:'PLACER
  1. S ORGIEN=$$GET1^DIQ(100,PLACER,9,"I")
  1. Q:'ORGIEN ;No renewed order
  1. S RENEWED=$$GET1^DIQ(100,ORGIEN,5,"I")=15
  1. Q:'RENEWED
  1. S ORGPKGID=+$$GET1^DIQ(100,ORGIEN,33,"I")
  1. Q:'ORGPKGID
  1. S ORXNUM=$$GET1^DIQ(52,ORGPKGID,.01)
  1. S REA="C",DA=ORGPKGID
  1. S MSG="Renewed/Updated from RPMS EHR"
  1. S PSCAN(ORXNUM)=DA_"^C"
  1. D CAN^PSOCAN
  1. D:RNWORDER
  1. .D SETDATA(RNWORDER,52,"39.5///"_"`"_RXIEN)
  1. .D SETDATA(RXIEN,52,"39.4///"_"`"_RNWORDER)
  1. Q
  1. ;
  1. SETDATA(DA,DIE,DR) ;
  1. D ^DIE
  1. Q