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

PSOCAN2.m

Go to the documentation of this file.
  1. PSOCAN2 ;BHAM ISC/JMB - rx cancel with speed ability drug check ; 2/16/12 3:40pm
  1. ;;7.0;OUTPATIENT PHARMACY;**8,18,62,46,88,164,235,148,259,281,287,251,375,379,396,390,372,416,411**;DEC 1997;Build 95
  1. ;External reference to ^PSDRUG supported by DBIA 221
  1. REINS N DODR,ORN,PSOREINO S PSOREINO=1
  1. I $G(PSODFN)'=$G(PSOODOSP) K PSORX("DOSING OFF"),PSOREINF S PSOODOSP=PSODFN
  1. I $P(^PSRX(DA,2),"^",6)<DT D Q
  1. .S Y=$P(^PSRX(DA,2),"^",6) X ^DD("DD")
  1. .W !!,"Rx: "_$P(^PSRX(DA,0),"^")_" Drug: "_$S($D(^PSDRUG($P(^PSRX(DA,0),"^",6),0)):$P(^(0),"^"),1:""),!,"Expired "_Y_" and cannot be Reinstated!",!
  1. .D PAUSE^VALM1
  1. I $D(^PSRX("APSOD",$P(^PSRX(DA,0),"^",2),DA)) S PSCAN($P(^PSRX(DA,0),"^"))=DA_"^R",DODR=1 D AUTOD G ACT
  1. I $P(PSOPAR,"^",2),'$D(^XUSEC("PSORPH",DUZ)) N PSOVODA S PSOVODA=DA D DRGDRG Q:$G(PSOQUIT)&($G(PSOREINS)) S DA=PSOVODA Q:PSORX("DFLG") D VERIFY D D AREC^PSOCAN1 Q
  1. .S RX1=$P(^PSRX(DA,0),"^") S:'$D(PSCAN(RX1)) PSCAN(RX1)=DA_"^R" K RX1
  1. ACT W ! F I=1:1:80 W "="
  1. D ^PSOBUILD S DRG=+$P(^PSRX(DA,0),"^",6),DRG=$S($D(^PSDRUG(DRG,0)):$P(^(0),"^"),1:""),HOLDRX=RX
  1. W !!,RX_" "_DRG I $G(POERR) S HPOERR=POERR
  1. D DRGDRG Q:$G(PSOQUIT)&($G(PSOREINS))
  1. S:$G(HPOERR) POERR=HPOERR S:$G(PSORX("DFLG"))'=1 PSORX("DFLG")=0
  1. S RX=HOLDRX K HOLDRX,HPOERR Q:$P(^PSRX(+PSCAN(RX),"STA"),"^")'=12!($G(PSORX("DFLG")))
  1. S DA=+PSCAN(RX),REA=$P(PSCAN(RX),"^",2) D CAN^PSOCAN W !
  1. N RXIEN S RXIEN=DA
  1. ;Takes action on reinstated Rx's
  1. S RFCNT=0 F RF=0:0 S RF=$O(^PSRX(DA,1,RF)) Q:'RF S RFCNT=RF
  1. S (LPRT,LREF,XRELDT,XFDT)="" F LL=0:0 S LL=$O(^PSRX(DA,"L",LL)) Q:'LL S LPRT=$P($G(^PSRX(DA,"L",LL,0)),"."),LREF=$P($G(^(0)),"^",2)
  1. I 'RFCNT S FDT=$S($P($G(^PSRX(DA,2)),"^",2)'="":$P($G(^PSRX(DA,2)),"^",2),1:$P($G(^PSRX(DA,2)),"^")) S RELDT=$P(^(2),"^",13),RELDT=$P(RELDT,".")
  1. I RFCNT S FDT=$P($G(^PSRX(DA,1,RFCNT,0)),"^"),RELDT=$P(^(0),"^",18),RELDT=$P(RELDT,".")
  1. S Y=FDT D DD^%DT S XFDT=Y I RELDT'="" S Y=RELDT D DD^%DT S XRELDT=Y
  1. I LPRT'="" S Y=LPRT D DD^%DT S XLPDT=Y
  1. ;If Rx was released, do nothing
  1. I RELDT'="" W !,RX_" Reinstated -- ",!?3,$S('RFCNT:"Filled",1:"Refilled # "_LREF)_": "_XFDT,?32,"Printed: "_$S(LREF=RFCNT:XLPDT,1:""),?56,"Released: "_$G(XRELDT) H 3 Q
  1. ;If Rx not released, check fill/refill date for action
  1. I $G(PSXSYS) D REINS^PSOCMOPA I $G(XFLAG) K XFLAG Q
  1. W !,"Prescription #"_RX_" REINSTATED!"
  1. ;
  1. N PSOTRIC S PSOTRIC="",PSOTRIC=$$TRIC^PSOREJP1(RXIEN,RFCNT,PSOTRIC)
  1. D SUBMIT^PSOREJU3(RXIEN,RFCNT,PSOTRIC)
  1. ;
  1. W !?3,"Prescription #",RX_": "
  1. W !?6,$S('RFCNT:" Filled",1:" Refilled # "_LREF)_": "_XFDT," Printed: "_$S(LREF=RFCNT:XLPDT,1:"")," Released: "_$G(XRELDT),!
  1. I FDT<DT D
  1. .Q:$$FIND^PSOREJUT(RXIEN) ;No label for Rx's with unresolved claims rejects
  1. .Q:PSOTRIC&($$STATUS^PSOBPSUT(RXIEN,RFCNT)["IN PROGRESS") ;No labels for TRICARE/CHAMPVA in progress Rx *396
  1. .I PSOTRIC,$P($G(^PSRX(RXIEN,"STA")),"^")=12 Q ;No label for TRICARE/CHAMPVA if discontinued via Reject Notification screen *396
  1. .S DIR("A")=" ** Do you want to print the label now",DIR("B")="N",DIR(0)="Y",DIR("?")="Enter 'Y' to print the label now. If 'N' is entered, the label may be reprinted through reprint at a later date."
  1. .D ^DIR K DIR Q:$G(DIRUT)!('Y) S PPL=RXIEN D Q^PSORXL Q
  1. I FDT=DT D
  1. . Q:$$FIND^PSOREJUT(RXIEN) ;No label for Rx's with unresolved claims rejects
  1. . Q:PSOTRIC&($$STATUS^PSOBPSUT(RXIEN,RFCNT)["IN PROGRESS") ;No labels for TRICARE/CHAMPVA in progress Rx *396
  1. . I PSOTRIC,$P($G(^PSRX(RXIEN,"STA")),"^")=12 Q ;No label for TRICARE/CHAMPVA if discontinued via Reject Notification screen *396
  1. . W !?5,"Either print the label using the reprint option "
  1. . W !?7,"or check later to see if the label has been printed." D WAIT^PSODRG Q
  1. I FDT>DT&('$G(DODR)) W !?5,"Placing Rx on suspense. Please wait..." D SUS
  1. K DODR
  1. Q
  1. SUS ;Adds rec to suspense
  1. S ACT=1,RXN=DA,RX0=^PSRX(DA,0),RXS=$O(^PS(52.5,"B",DA,0)) I RXS S DA=RXS,DIK="^PS(52.5," D ^DIK S DA=RXN
  1. S RXP=$S($D(RXP):RXP,1:0),DIC="^PS(52.5,",DIC(0)="L",X=RXN,DIC("DR")=".02///"_FDT_";.03///"_$P(RX0,"^",2)_";.04///M;.05///"_RXP_";.06////"_$G(PSOSITE)_";2///0" K DD,DO D FILE^DICN
  1. I +$G(Y),$G(RFCNT)'="" S $P(^PS(52.5,+Y,0),"^",13)=$G(RFCNT)
  1. S DA=RXN,$P(^PSRX(DA,"STA"),"^")=5,LFD=$E($P(^PSRX(DA,3),"^"),4,5)_"-"_$E($P(^(3),"^"),6,7)_"-"_$E($P(^(3),"^"),2,3)
  1. S ACOM="RX Placed on Suspense until "_LFD D AREC^PSOCAN1 S ST="SC",PHST="ZS" D EN^PSOHLSN1(DA,ST,PHST,ACOM) K ST,PHST
  1. Q
  1. DRGDRG ;Checks for drug/drug interaction, duplicate drug and class
  1. Q:$P(^PSRX(DA,2),"^",6)<DT
  1. S (PSORX("DFLG"),PSORXED("DFLG"))=0
  1. S STA="ACTIVE^NON-VERIFIED^R^HOLD^NON-VERIFIED^ACTIVE^^^^^^ACTIVE^DISCONTINUED^^DISCONTINUED^DISCONTINUED^HOLD"
  1. S STAT=$P(STA,"^",$P(^PSRX(DA,"STA"),"^")+1)
  1. S X=$P(^PSRX(DA,0),"^",6),DIC="^PSDRUG(",DIC(0)="MZO" D ^DIC K DIC Q:$D(DTOUT)!(Y<0)
  1. K HOLD S NAME=$P(Y(0),"^") I +$G(PSOSD(STAT,NAME))=+PSCAN(RX) S HOLD(STAT,NAME)=$G(PSOSD(STAT,NAME)) K PSOSD(STAT,NAME)
  1. S:$G(PSONEW("OLD VAL"))=+Y PSODRG("QFLG")=1
  1. K PSOY,PSOTECCK S PSOY=Y,PSOY(0)=Y(0)
  1. I '$D(^XUSEC("PSORPH",DUZ)) S PSOTECCK=1 N ZRXN
  1. S (ZRXN,PSORENW("OIRXN"))=DA D SET^PSODRG,POST^PSODRG Q:$G(PSOREINS)&$G(PSOQUIT)
  1. D:'$G(PSORX("DFLG")) DOSCK^PSODOSUT("C")
  1. S REA=$P(PSCAN($P(^PSRX(PSORENW("OIRXN"),0),"^")),"^",2)
  1. W ! S:$G(HOLD(STAT,NAME))]"" PSOSD(STAT,NAME)=$G(HOLD(STAT,NAME)) K HOLD,STA,STAT,PSORENW("OIRXN")
  1. ;saves drug allergy order chks pso*7*390
  1. ;I +$G(^TMP("PSODAOC",$J,1,0)) D
  1. I $D(^TMP("PSODAOC",$J)) D
  1. .N RXN,PSODAOC S RXN=ZRXN,PSODAOC="Rx Reinstate Order Acceptance_OP"
  1. .D DAOC^PSONEW
  1. .K ^TMP("PSODAOC",$J),RET
  1. Q
  1. VERIFY ;Put in non-verify file
  1. S PSRXDA=DA,DIC="^PS(52.4,",DLAYGO=52.4,(X,DINUM)=PSRXDA,DIC(0)="ML",DIC("DR")="1////"_PSODFN_";2////"_DUZ_";4////"_DT
  1. K DD,DO D FILE^DICN K DIC,DLAYGO,DINUM
  1. S DA=PSRXDA S $P(^PSRX(DA,"STA"),"^")=1
  1. S ST="SC",PHST="IP",VCOM="Put in non-verified status" D EN^PSOHLSN1(DA,ST,PHST,VCOM) K ST,PHST,VCOM
  1. Q
  1. HLD N PSDTEST,PDA,CMOP,SUSD I $P(^PSRX(DA,"STA"),"^")=3 D
  1. .S ACOM=$S(REA="C":"Discontinued",1:"Reinstated")_" while on hold during Rx cancel. " K:$P(^PSRX(DA,"H"),"^") ^PSRX("AH",$P(^PSRX(DA,"H"),"^"),DA) S ^PSRX(DA,"H")=""
  1. .I $P(^PSRX(DA,0),"^",13),'$O(^PSRX(DA,1,0)) S DIE=52,DR="22///"_$E($P(^PSRX(DA,0),"^",13),1,7) D ^DIE K DIE,DR Q
  1. .S (IFN,SUSD)=0 F S IFN=$O(^PSRX(DA,1,IFN)) Q:'IFN S SUSD=IFN,RFDT=$P(^PSRX(DA,1,IFN,0),"^")
  1. .Q:'$G(SUSD) I '$P(^PSRX(DA,1,SUSD,0),"^",18) S PSDTEST=0 D I 'PSDTEST K ^PSRX(DA,1,SUSD),^PSRX("AD",RFDT,DA,SUSD),^PSRX(DA,1,"B",RFDT,SUSD),IFN,SUSD,RFDT
  1. ..F PDA=0:0 S PDA=$O(^PSRX(DA,"L",PDA)) Q:'PDA I $P($G(^PSRX(DA,"L",PDA,0)),"^",2)=SUSD S PSDTEST=1
  1. ..K CMOP D ^PSOCMOPA I $G(CMOP(CMOP("L")))="",$G(CMOP("S"))'="L" Q
  1. ..S PSDTEST=1
  1. Q
  1. REF S IFN=0 F S IFN=$O(^PSRX(DA,1,IFN)) Q:'IFN I $P($G(^PSRX(DA,1,IFN,0)),"^")=SUSD,'$P(^(0),"^",18) D
  1. .D DELREF I $G(PSORFDEL) K PSORFDEL Q
  1. .;PSO*7*259;CHECK IF REFILL RELEASED OR LABEL PRINTED
  1. .I $P($G(^PSRX(DA,1,IFN,0)),"^",18)]"" Q ;REFILL RELEASED
  1. .N PSONODEL,PSOLBL S PSONODEL=0
  1. .I $P(^PSRX(DA,"STA"),"^")=5 D REF^PSOCAN4 Q:PSONODEL
  1. .S PSOLBL="" F S PSOLBL=$O(^PSRX(DA,"L",PSOLBL),-1) Q:'PSOLBL Q:PSONODEL Q:$P(^PSRX(DA,"L",PSOLBL,0),"^",2)<IFN I $P(^PSRX(DA,"L",PSOLBL,0),"^",2)=IFN S PSONODEL=1
  1. .Q:PSONODEL
  1. .K PSORFDEL K ^PSRX(DA,1,IFN),^PSRX("AD",SUSD,DA,IFN),^PSRX(DA,1,"B",SUSD,IFN)
  1. .S $P(^PSRX(DA,1,0),"^",4)=$P(^PSRX(DA,1,0),"^",4)-1,DA(1)=DA
  1. .S NODE=0 D SPR^PSOUTL K DA(1),RF,NODE
  1. S IFN=0 F S IFN=$O(^PSRX(DA,1,IFN)) Q:'IFN I '$O(^PSRX(DA,1,IFN)) S $P(^PSRX(DA,3),"^")=+$P(^PSRX(DA,1,IFN,0),"^"),$P(^(3),"^",2)=SUSD
  1. I '$O(^PSRX(DA,1,0)) S $P(^PSRX(DA,3),"^")=$P(^PSRX(DA,2),"^",2),$P(^PSRX(DA,3),"^",2)=SUSD
  1. K IFN,SUSD
  1. Q
  1. KILL K %,ACNT,ACOM,ACT,ALL,BCNUM,CMOP,CNT,DA,DAYS360,DEAD,DRG,DIRUT,DR,DRUG,DTOUT,DUOUT,FDT,HOLD,I,II,IN,IT,JJ,LC,LFD,LINE,LL,LPRT,LREF,LSI,NAME,NDF,NOEXP,NSF,OUT,RXSP,EN,WARN K:'$G(POERR) INCOM
  1. K PSODRUG,PCNT,POP,PPL,PS,PSFROM,PSINV,PLINE,PSI,PSINV,PSOCAN,PSOCMOP,PSODFN,PSODRG,PSOOPT,PSOSD,PSPOP,PSRXDA,PSS,PSVC,PSONOOR
  1. K REA,RELDT,RF,RFDATE,RFCNT,RFL,RFL1,RFLL,RP,RX,RX0,RXCNT,RXDA,RXN,RXNUM,RXP,RXREC,RXREF,RXS,SDATE,SPCANC,SS,STAT,SUB,X,XFDT,XLPDT,XRELDT,Y D KVA^VADPT Q
  1. DELREF ;
  1. N RDL,PSCNODE
  1. S PSORFDEL=0
  1. F RDL=0:0 S RDL=$O(^PSRX(DA,4,RDL)) Q:'RDL I $G(IFN)=$P($G(^PSRX(DA,4,RDL,0)),"^",3) S PSCNODE=$G(^(0))
  1. I $G(PSCNODE)="" Q
  1. I +$P(PSCNODE,"^",4)<3 S PSORFDEL=1
  1. Q
  1. AUTOD ;reinstates Rxs dc'd by date of death
  1. I $G(^PSRX(DA,"DDSTA"))']"" K ^PSRX("APSOD",+$P(^PSRX(DA,0),"^",2),DA),DODR Q
  1. S DODS=$P(^PSRX(DA,"DDSTA"),"^"),DODD=$P(^("DDSTA"),"^",2,245)
  1. S FILE=$P(DODS,";"),STA=$P(DODS,";",2)
  1. I FILE=52.4 D Q
  1. .S RXN=DA,^PS(52.4,DA,0)=DODD,DIK="^PS(52.4," D IX^DIK K DIK,DA S DA=RXN,$P(^PSRX(DA,"STA"),"^")=STA
  1. .S ST="SC",PHST="IP",ACOM="Date of Death Deleted. Returned to Non-Verified status."
  1. .K ^PSRX("APSOD",$P(^PSRX(DA,0),"^",2),DA),^PSRX(DA,"DDSTA")
  1. .S DA=RXN D LOG D EN^PSOHLSN1(DA,ST,PHST,ACOM) K ST,PHST,ACOM,RXN
  1. I FILE=52.5 D Q
  1. .;Adds rec to suspense
  1. .S RXN=DA,RXS=$O(^PS(52.5,"B",DA,0)) I RXS S DA=RXS,DIK="^PS(52.5," D ^DIK
  1. .S DIC="^PS(52.5,",DIC(0)="L",X=RXN K DD,DO D FILE^DICN S DA=+Y
  1. .S ^PS(52.5,DA,0)=DODD,^PS(52.5,DA,"P")=0,LFD=$E($P(^PS(52.5,DA,0),"^",2),4,5)_"-"_$E($P(^(0),"^",2),6,7)_"-"_$E($P(^(0),"^",2),2,3)
  1. .S DIK="^PS(52.5," D IX^DIK K DIK,DA S DA=RXN,$P(^PSRX(DA,"STA"),"^")=STA
  1. .S ACOM="Date of Death Deleted. RX Placed on Suspense until "_LFD
  1. .K ^PSRX("APSOD",PSODFN,DA),^PSRX(DA,"DDSTA")
  1. .I STA=5 S ST="SC",PHST="ZS" D LOG D EN^PSOHLSN1(DA,ST,PHST,ACOM) K ST,PHST,ACOM,LFD
  1. I FILE=52 S ^PSRX(DA,"STA")=STA I STA=3!(STA=16) D Q
  1. .S ^PSRX(DA,"H")=DODD,^PSRX("AH",$P(^PSRX(DA,"H"),"^"),DA)=""
  1. .S ACOM="Date of Death Deleted. Medication Returned to"_$S(STA=16:" Provider",1:"")_" Hold Status "_$E(DT,4,5)_"/"_$E(DT,6,7)_"/"_$E(DT,2,3)_"."
  1. .D LOG,EN^PSOHLSN1(DA,"OH","",ACOM) K ACOM
  1. .K ^PSRX("APSOD",PSODFN,DA),^PSRX(DA,"DDSTA")
  1. S ACOM="Date of Death Deleted. Prescription Reinstated." D EN^PSOHLSN1(DA,"SC","CM",ACOM),LOG K ACOM
  1. K ^PSRX("APSOD",PSODFN,DA),^PSRX(DA,"DDSTA")
  1. Q
  1. LOG K ACNT F SUB=0:0 S SUB=$O(^PSRX(DA,"A",SUB)) Q:'SUB S ACNT=$G(ACNT)+1
  1. S RFCNT=0 F RF=0:0 S RF=$O(^PSRX(DA,1,RF)) Q:'RF S RFCNT=$G(RFCNT)+1 S:RF>5 RFCNT=$G(RFCNT)+1
  1. S ACNT=$G(ACNT)+1
  1. D NOW^%DTC S ^PSRX(DA,"A",0)="^52.3DA^"_ACNT_"^"_ACNT S ^PSRX(DA,"A",ACNT,0)=%_"^R^"_DUZ_"^"_RFCNT_"^"_ACOM
  1. K ^PSRX("APSOD",PSODFN,DA),ACNT,RFCNT,RF,%
  1. I $P(^PSRX(DA,3),"^",10) S $P(^PSRX(DA,3),"^")=$P(^PSRX(DA,3),"^",10) ;*396
  1. S $P(^PSRX(DA,3),"^",2)=$P(^PSRX(DA,3),"^",8)
  1. S $P(^PSRX(DA,3),"^",5)="",$P(^(3),"^",8)=""
  1. Q
  1. NVER ;Called from PSOCAN3, needs DA defined
  1. N PSONVC,PSONVCP,PSONVCC
  1. S PSONVC="SC",PSONVCP="IP",PSONVCC="Put in non-verified status" D EN^PSOHLSN1(DA,PSONVC,PSONVCP,PSONVCC)
  1. Q
  1. RMB(IDX) ;remove Rx if found in array BBRX() (Bingo Board)
  1. N ST4,ST5,ST6,K
  1. S ST4=BBRX(IDX) Q:ST4'[(DA_",")
  1. S ST6=""
  1. F K=1:1 S ST5=$P(ST4,",",K) Q:'ST5 D
  1. . S:ST5'=DA ST6=ST6_$S('ST6:"",1:",")_ST5
  1. . S:ST6]"" BBRX(IDX)=ST6_"," K:ST6="" BBRX(IDX)
  1. I '$D(BBRX) K BINGCRT
  1. Q
  1. ;