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

PSORESK.m

Go to the documentation of this file.
  1. PSORESK ;BIR/SAB-return to stock ;14-Nov-2017 14:48;DU
  1. ;;7.0;OUTPATIENT PHARMACY;**15,9,27,40,47,55,85,130,1002,1006,1007,185,184,196,148,201,259,261,1014,1015,1018,1022**;DEC 1997;Build 20
  1. ;
  1. ; Modified - IHS/CIA/PLS - 03/31/04 - Lines BC1+35 and PAR+30
  1. ; 12/07/04 - New RXLKUP entry point
  1. ; Line RXP
  1. ; IHS/MSC/PLS - 10/18/07 - BC1+1 -Outside Pharmacy
  1. ; 08/21/08 - Added additional parameter to CALLPOS calls.
  1. ; 04/06/12 - Line RXLKUP+2
  1. ; IHS/MSC/PB 03/26/13 - Added lines BC1+43 and BC1+44 to update expiration date to the issue date
  1. ; IHS/MSC/MGH 01/07/14 - Added call to $$CHECK^PSORESK1
  1. ; IHS/MSC/PLS 10/02/17 - Added logic to set STATUS to active if expiration date exceeds today
  1. ;REF/IA
  1. ;^PSDRUG/221
  1. ;^PS(59.7/694
  1. ;L, UL, PSOL, and PSOUL^PSSLOCK/2789
  1. ;^PS(55/2228
  1. ;PSDRTS^PSDOPT0/3064
  1. ;
  1. ;*259 - if refill was Not deleted, then stop RTS from continuing
  1. ;
  1. AC I '$D(PSOPAR) D ^PSOLSET I '$D(PSOPAR) W !!,"Outpatient Pharmacy Site Parameters are required!" Q
  1. S RESK=1 K PSODEF,^UTILITY($J,"PSOPCE") S PSOPCECT=1
  1. BC K PSOWHERE,PSODEFLG,PSOINVTX,XTYPE W !! S DIR("A")="Enter/Wand PRESCRIPTION number",DIR("?")="^D HP^PSORESK1",DIR(0)="FO" D ^DIR K DIR I $D(DIRUT) K PSODEF G EX
  1. I X'["-" D BCI W:'$G(RXP) !,"INVALID Rx" G:'$G(RXP) BC G BC1
  1. I X["-" D I $P(X,"-")'=$G(PSORESST) W !,$C(7),$C(7)," INVALID STATION NUMBER !!",$C(7),$C(7),! K PSORESST G BC
  1. .K PSORESST S PSORESSX=$G(X) K PSORESAR S DA=$P($$SITE^VASITE(),"^") I $G(DA) S DIC=4,DIQ(0)="I",DIQ="PSORESAR",DR="99" D EN^DIQ1 S PSORESST=$G(PSORESAR(4,DA,99,"I")) K PSORESAR,DIQ,DA,DR S X=$G(PSORESSX) K PSORESSX
  1. I X["-" S RXP=$P(X,"-",2) I '$D(^PSRX(+$G(RXP),0))!($G(RXP)']"") W !,$C(7),$C(7),$C(7)," NON-EXISTENT Rx" G BC
  1. G:$D(^PSRX(RXP,0)) BC1 W !,$C(7),$C(7),$C(7)," IMPROPER BARCODE FORMAT" G BC
  1. BC1 ;
  1. ;IHS/MSC/PLS - 10/18/07
  1. I $P($G(^PSRX(RXP,999999921)),U,3) D G BC
  1. .W !,"Outside Pharmacy prescriptions can't be returned to stock!"
  1. S PSORRDFN=+$P($G(^PSRX(RXP,0)),"^",2)
  1. D ICN^PSODPT(PSORRDFN)
  1. S PSOPLCK=$$L^PSSLOCK(PSORRDFN,0) I '$G(PSOPLCK) D LOCK^PSOORCPY K PSOPLCK G BC
  1. K PSOPLCK D PSOL^PSSLOCK(RXP) I '$G(PSOMSG) W !!,$S($P($G(PSOMSG),"^",2)'="":$P($G(PSOMSG),"^",2),1:"Another person is editing this order."),! K PSOMSG D UL^PSSLOCK(+$G(PSORRDFN)) G BC
  1. S PSOLOUD=1 D:$P($G(^PS(55,+$P(^PSRX(RXP,0),"^",2),0)),"^",6)'=2 EN^PSOHLUP($P(^PSRX(RXP,0),"^",2)) K PSOLOUD
  1. I $S('+$P($G(^PSRX(+RXP,"STA")),"^"):0,$P(^("STA"),"^")=11:0,$P(^("STA"),"^")=12:0,$P(^("STA"),"^")=14:0,$P(^("STA"),"^")=15:0,1:1) D STAT^PSORESK1 D UL G BC
  1. S COPAYFLG=1,QDRUG=$P($G(^PSRX(RXP,0)),"^",6),QTY=$P($G(^(0)),"^",7) I $O(^PSRX(RXP,1,0)) G REF
  1. S Y="O" I $O(^PSRX(RXP,"P",0)) D I $D(DUOUT)!($D(DTOUT)) D UL G BC
  1. .S DIR(0)="SA^O:ORIGINAL;P:PARTIAL",DIR("B")="ORIGINAL",DIR("A",1)="",DIR("A",2)="There are Partials for this Rx.",DIR("A")="Which are you Returning To Stock? "
  1. .S DIR("?")=" Press return for Original. Enter 'P' for Partial" D ^DIR K DIR
  1. S XTYPE=$S(Y="O":"O",1:"P") G:Y="P" PAR
  1. I $P($G(^PSRX(RXP,2)),"^",15) D G BC
  1. .W !,$C(7),$C(7),"Original fill for Rx # "_$P(^PSRX(RXP,0),"^")_" was Returned to Stock." D UL
  1. I '$P($G(^PSRX(RXP,2)),"^",13) W !,$C(7),$C(7),"Rx # "_$P(^PSRX(RXP,0),"^")_" was NOT released !" D UL G BC
  1. S PSOLOCRL=$P($G(^PSRX(RXP,2)),"^",13),PSOWHERE=$S($D(^PSRX("AR",+$G(PSOLOCRL),RXP,0)):1,1:0)
  1. W ! S DIR("B")="YES",DIR("A",1)="Are you sure you want to RETURN TO STOCK Rx # "_$P(^PSRX(RXP,0),"^")
  1. S DIR("A",2)="for "_$P(^DPT($P(^PSRX(RXP,0),"^",2),0),"^")_" ("_$E($P(^(0),"^",9),6,9)_")",DIR("A")="Drug: "_$P(^PSDRUG($P(^PSRX(RXP,0),"^",6),0),"^")
  1. I $G(PSOWHERE) S DIR("A",3)=" ",DIR("A",4)=" *** This prescription was filled at the CMOP *** ",DIR("A",5)=" "
  1. S DIR(0)="YO" D ^DIR K DIR I Y=0!($D(DIRUT)) D UL G BC
  1. ;ORI
  1. D D UL,EX S (RESK,PSOPCECT)=1 G BC
  1. .;VMP OIFO BAY PINES;PSO*7.0*196;KILL PSDS
  1. .I $T(PSDRTS^PSDOPT0)]"" D PSDRTS^PSDOPT0(RXP,"O^"_0,$P(^PSRX(RXP,2),"^",9),$P(^PSRX(RXP,0),"^",7)) D MSG K PSDS
  1. .Q:$G(RETSK)
  1. .K PSOINVTX,PSODEFLG I $G(PSOWHERE),$G(^PSDRUG(QDRUG,660.1)) D INVT^PSORXDL I $G(PSODEFLG) W !!?5,"Prescription Not Returned to Stock!",! Q
  1. .I +$G(^PSRX(RXP,"IB"))!($P($G(^PSRX(RXP,"PFS")),"^",2)) N PSOPFS S:$P($G(^PSRX(RXP,"PFS")),"^",2) PSOPFS="1^"_$P(^PSRX(RXP,"PFS"),"^",1,2) D CP^PSORESK1 Q:'$G(COPAYFLG)
  1. .;Ask comments until answered, do not allow exiting.
  1. .F D I '$D(DIRUT) Q
  1. ..K DIR,DUOUT,DTOUT,DIRUT,X,Y
  1. ..S DIR(0)="F0^10:75",DIR("A")="Comments",DIR("?")="Comments are required, 10-75 characters."
  1. ..S DIR("B")=$S($D(PSODEF):PSODEF,1:"Per Pharmacy Request")
  1. ..D ^DIR I $D(DIRUT) W !?5,"Comments are required, 10-75 characters.",! Q
  1. ..S (PSODEF,COM)=$G(Y) K DIR,X,Y
  1. ..Q
  1. .I $G(^PSDRUG(QDRUG,660.1)) D
  1. ..I $G(PSOWHERE),'$G(PSOINVTX) Q
  1. ..S ^PSDRUG(QDRUG,660.1)=^PSDRUG(QDRUG,660.1)+QTY
  1. .I $G(PSOWHERE) K ^PSRX("AR",+$G(PSOLOCRL),RXP,0)
  1. .;MSC/IHS/PB - 3/1/13 Added the next two lines to update the expiration date to the issue date if the rts is an original
  1. .;IHS/MSC/MGH - 01/07/13 - Change the call to get expiration date
  1. .S ISDT=$P(^PSRX(RXP,0),"^",13)
  1. .I $G(ISDT)'="" D NOW^%DTC S DA=RXP,DIE="^PSRX(",DR="26////"_$$CHECK^PSORESK1(RXP)_";31///@;32.1///"_% D ^DIE K DIE,DR,DA ;Q:$D(Y)
  1. .D NOW^%DTC S DA=RXP,DA=RXP,DIE="^PSRX(",DR="31///@;32.1///"_% D ^DIE K DIE,DR,DA Q:$D(Y)
  1. .D ACT^PSORESK1 S DA=$O(^PS(52.5,"B",RXP,0)) I DA S DIK="^PS(52.5," D ^DIK
  1. .I $$GET1^DIQ(52,RXP,26,"I")>$G(DT) D ;IHS/MSC/PLS - 10/2/2017 P1022
  1. ..N STATUS
  1. ..S STATUS=+$P($G(^PSRX(RXP,"STA")),U)
  1. ..Q:STATUS=0 ;Already active
  1. ..Q:STATUS'=11 ;Must be expired
  1. ..N DIE,DA,DR
  1. ..S DA=RXP,DIE="^PSRX(",DR="100///0" D ^DIE
  1. .D CALLPOS^APSPFUNC(RXP,"","D","Returned to stock.") ; IHS/CIA/PLS - 03/31/04
  1. .D REVERSE^PSOBPSU1(RXP,0,"RS",4,,1)
  1. .D EN^PSOHLSN1(RXP,"ZD") W !,"Rx # "_$P(^PSRX(RXP,0),"^")_" Returned to Stock.",!
  1. .Q
  1. ;
  1. REF I $O(^PSRX(RXP,1,0)),$O(^PSRX(RXP,"P",0)) D I $D(DTOUT)!($D(DUOUT)) D UL G BC
  1. .S DIR(0)="SA^R:REFILL;P:PARTIAL",DIR("B")="REFILL",DIR("A",1)="",DIR("A",2)="There are Refills and Partials for this Rx.",DIR("A")="Which are you Returning To Stock? "
  1. .S DIR("?")=" Press return for Refill. Enter 'P' for Partial" D ^DIR K DIR
  1. I $O(^PSRX(RXP,1,0)),$O(^PSRX(RXP,"P",0)) S XTYPE=$S(Y="R":1,1:"P")
  1. PAR S:$G(XTYPE)']"" XTYPE=1 S TYPE=0 F YY=0:0 S YY=$O(^PSRX(RXP,XTYPE,YY)) Q:'YY S TYPE=YY
  1. I 'TYPE D UL,EX S (RESK,PSOPCECT)=1 G BC
  1. I $P($G(^PSRX(RXP,XTYPE,TYPE,0)),"^",16) W $C(7),!!,"Last Fill Already Returned to Stock !",! D UL,EX S (RESK,PSOPCECT)=1 G BC
  1. I '$P(^PSRX(RXP,XTYPE,TYPE,0),"^",$S(XTYPE:18,1:19)) W !!,$C(7),$C(7),$S(XTYPE:"Refill",1:"PARTIAL")_" #"_TYPE_" was NOT released !",! D UL G BC
  1. W ! K DIR,DUOUT,DTOUT
  1. K PSOLOCRL,PSOWHERE I $G(XTYPE) S PSOLOCRL=$P($G(^PSRX(RXP,XTYPE,+$G(TYPE),0)),"^",18),PSOWHERE=$S($D(^PSRX("AR",+$G(PSOLOCRL),RXP,+$G(TYPE))):1,1:0)
  1. W ! S DIR("B")="YES",DIR("A",1)="Are you sure you want to RETURN TO STOCK Rx # "_$P(^PSRX(RXP,0),"^")_$S(XTYPE:" Refill ",1:" Partial ")_"# "_TYPE,DIR(0)="Y"
  1. S DIR("A",2)="for "_$P(^DPT($P(^PSRX(RXP,0),"^",2),0),"^")_" ("_$E($P(^(0),"^",9),6,9)_")",DIR("A")="Drug: "_$P(^PSDRUG($P(^PSRX(RXP,0),"^",6),0),"^")
  1. I $G(PSOWHERE) S DIR("A",3)=" ",DIR("A",4)=" *** This prescription was filled at the CMOP *** ",DIR("A",5)=" "
  1. D ^DIR K DIR I 'Y!($D(DUOUT))!($D(DTOUT)) D UL G BC
  1. I $T(PSDRTS^PSDOPT0)]"" D
  1. .;VMP OIFO BAY PINES;PSO*7.0*196;KILL PSDS
  1. .I XTYPE D PSDRTS^PSDOPT0(RXP,"R^"_TYPE,$P(^PSRX(RXP,1,TYPE,0),"^",9),$P(^(0),"^",4)) D MSG K PSDS Q
  1. .D PSDRTS^PSDOPT0(RXP,"P^"_TYPE,$P(^PSRX(RXP,"P",TYPE,0),"^",9),$P(^(0),"^",4)) D MSG K PSDS
  1. I $G(RETSK) D UL,EX G BC
  1. K PSOINVTX,PSODEFLG I $G(PSOWHERE),$G(^PSDRUG(QDRUG,660.1)) D INVT^PSORXDL I $G(PSODEFLG) W !!?5,"Prescription Not Returned to Stock!",! D UL G BC
  1. I XTYPE I +$G(^PSRX(RXP,"IB"))!($P($G(^PSRX(RXP,1,TYPE,"PFS")),"^",2)) N PSOPFS S:$P($G(^PSRX(RXP,1,TYPE,"PFS")),"^",2) PSOPFS="1^"_$P(^PSRX(RXP,1,TYPE,"PFS"),"^",1,2) D CP^PSORESK1 I '$G(COPAYFLG) D UL G BC
  1. ;Ask comments until answered, do not allow exiting.
  1. F D I '$D(DIRUT) Q
  1. .K DIR,DIRUT,DTOUT,DUOUT,X,Y
  1. .S DIR(0)="F0^10:75",DIR("A")="Comments",DIR("?")="Comments are required, 10-75 characters."
  1. .S DIR("B")=$S($D(PSODEF):PSODEF,1:"Per Pharmacy Request")
  1. .D ^DIR K DIR I $D(DIRUT) W !?5,"Comments are required, 10-75 characters.",! Q
  1. .Q
  1. S (PSODEF,COM)=$G(Y) K X,Y
  1. D NOW^%DTC S QTY=$P(^PSRX(RXP,XTYPE,TYPE,0),"^",4) I $G(^PSDRUG(QDRUG,660.1)) D
  1. .I $G(PSOWHERE),'$G(PSOINVTX) Q
  1. .S ^PSDRUG(QDRUG,660.1)=^PSDRUG(QDRUG,660.1)+$G(QTY)
  1. I $G(PSOWHERE) K ^PSRX("AR",+$G(PSOLOCRL),RXP,$G(TYPE))
  1. I XTYPE D REVERSE^PSOBPSU1(RXP,TYPE,"RS",4,,1)
  1. ;
  1. ;save release dates in case can't perform the delete of .01 *259
  1. S:XTYPE SVRELDT=$P(^PSRX(RXP,XTYPE,TYPE,0),"^",18)
  1. S:'XTYPE SVRELDT=$P(^PSRX(RXP,XTYPE,TYPE,0),"^",19)
  1. ;
  1. ;del rel date 1st and then attempt to del .01 field
  1. S DA(1)=RXP,DA=TYPE,DIE="^PSRX("_DA(1)_","_$S(XTYPE:1,1:"""P""")_",",DR=$S(XTYPE:"17////@",1:"8////@")_";.01///@"
  1. W ! D ^DIE
  1. ;
  1. ;if node still exists then fileman could not delete .01 *259
  1. I $D(^PSRX(RXP,XTYPE,TYPE,0)) D G BC
  1. . W " - Not Returned!"
  1. . S DA(1)=RXP,DA=TYPE,DIE="^PSRX("_DA(1)_","_$S(XTYPE:1,1:"""P""")_","
  1. . S DR=$S(XTYPE:"17////",1:"8////")_SVRELDT ;put back saved rel dte
  1. . D ^DIE,UL
  1. ;
  1. ;fall thru and perform RTS for refills/partials
  1. D:XTYPE'="P" NPF D ACT^PSORESK1
  1. N ISDT
  1. S ISDT=$P(^PSRX(RXP,0),"^",13)
  1. I $G(ISDT)'="" D
  1. .S DA=RXP,DIE="^PSRX(",DR="26///"_$$CHECK^PSORESK1(RXP) D ^DIE K DIE,DR,DA ;IHS/MSC/MGH - 01/07/14 - Change the expiration date if necessary
  1. I $$GET1^DIQ(52,RXP,26,"I")>$G(DT) D ;IHS/MSC/PLS - 10/2/2017 P1022
  1. .N STATUS
  1. .S STATUS=+$P($G(^PSRX(RXP,"STA")),U)
  1. .Q:STATUS=0 ;Already active
  1. .Q:STATUS'=11 ;Must be expired
  1. .N DIE,DA,DR
  1. .S DA=RXP,DIE="^PSRX(",DR="100///0" D ^DIE
  1. D CALLPOS^APSPFUNC(RXP,$S(TYPE:TYPE,1:""),"D","Returned to stock.") ; IHS/CIA/PLS - 03/31/04 - Call POS Hook
  1. W !!,"Rx # "_$P(^PSRX(RXP,0),"^")_$S(XTYPE:" REFILL",1:" PARTIAL")_" #"_TYPE_" Returned to Stock" S DA=$O(^PS(52.5,"B",RXP,0)) I DA S DIK="^PS(52.5," D ^DIK
  1. K PSODISPP S:'XTYPE PSODISPP=1 D:XTYPE EN^PSOHDR("PRES",RXP) D EN^PSOHLSN1(RXP,"ZD") K PSODISPP
  1. D UL G BC
  1. EX ;
  1. K DA,DR,DIE,X,X1,X2,Y,RXP,REC,DIR,XDT,REC,RDUZ,DIRUT,PSOCPN,PSOCPRX,YY,QDRUG,QTY,TYPE,XTYPE,I,%,DIRUT,COPAYFLG,PSOINVTX,RESK,PSOPCECT,COM,PSOWHERE,PSOLOCRL,PSODEFLG,PSORRDFN,PSOMSG,PSOPLCK,PSDCS,PSDRS,RETSK
  1. K DIC,DIK,PSOPFS
  1. Q
  1. MSG I $G(PSDCS),'$G(PSDRS) W !!,"The PSDMGR key is required to return a CONTROLLED SUBSTANCE Rx to stock and",!,"update corresponding vault balances." S RETSK=1
  1. Q
  1. BCI S RXP=0
  1. ; IHS/CIA/PLS - 12/07/04 - Change lookup to Extrinsic call
  1. RXP ;S RXP=$O(^PSRX("B",X,RXP)) I $P($G(^PSRX(+RXP,"STA")),"^")=13 G RXP
  1. S RXP=$$RXLKUP(X)
  1. Q
  1. UL ;
  1. I $G(RXP) D PSOUL^PSSLOCK(RXP)
  1. D UL^PSSLOCK(+$G(PSORRDFN))
  1. Q
  1. NPF N PSOY I $G(TYPE)-1>0,+$P(^PSRX(RXP,1,TYPE-1,0),"^") D
  1. .S X1=+$P(^PSRX(RXP,1,$G(TYPE)-1,0),"^"),X2=$P(^PSRX(RXP,0),"^",8)-10\1
  1. .D C^%DTC S PSOY=X,X1=$P(^PSRX(RXP,2),"^",2),X2=TYPE*$P(^PSRX(RXP,0),"^",8)-10\1
  1. .D C^%DTC S X=$S(PSOY<X:X,1:PSOY)
  1. I $G(TYPE)-1<1 D
  1. .S X1=$P(^PSRX(RXP,2),"^",2),X2=$P(^PSRX(RXP,0),"^",8)-10\1
  1. .D C^%DTC S:$P(^PSRX(RXP,3),"^",8) X=""
  1. I $G(X) S DA=RXP,DIE=52,DR="102///"_X D ^DIE K DIE
  1. Q
  1. ; IHS/CIA/PLS - 12/07/04
  1. ; IHS/MSC/PLS - 04/06/12 - Added parameter and condition
  1. ; Perform lookup given partial or full prescription number.
  1. ; Screen allows non-deleted scripts and scripts for user selected division.
  1. RXLKUP(X) ; EP
  1. N DIC,Y
  1. I $$GET^XPAR("ALL","APSP ALLOW RTS FROM ANY RX DIV") D
  1. .S DIC("S")="I $P($G(^(""STA"")),U)'=13"
  1. E S DIC("S")="I $P($G(^(2)),U,9)=PSOSITE&($P($G(^(""STA"")),""^"")'=13)"
  1. S DIC(0)="EMQZ",DIC="^PSRX(" D ^DIC
  1. Q $S(+Y>0:+Y,1:0)