| [613] | 1 | PSOUTIL ;IHS/DSD/JCM - outpatient pharmacy utility routine ; 03/28/93 20:46
 | 
|---|
 | 2 |  ;;7.0;OUTPATIENT PHARMACY;**64**;DEC 1997
 | 
|---|
 | 3 |  W !!,$C(7),"This routine not callable from PSOUTIL.."
 | 
|---|
 | 4 |  Q
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 | NPSOSD(PSORX) ; Entry point to add newly added rx to patients PSOSD array
 | 
|---|
 | 7 |  S STA="ACTIVE^NON-VERIFIED^R^HOLD^NON-VERIFIED^ACTIVE^^^^^^ACTIVE^DISCONTINUE^^DISCONTINUE^DISCONTINUE^HOLD"
 | 
|---|
 | 8 |  S STAT=$P(STA,"^",$P(^PSRX(PSORX("IRXN"),"STA"),"^")+1)
 | 
|---|
 | 9 |  I $D(PSOSD(STAT,PSODRUG("NAME"))),$P(PSOSD(STAT,PSODRUG("NAME")),"^",2)<10 D
 | 
|---|
 | 10 |  . S PSOSD(STAT,PSODRUG("NAME")_"^"_PSORX("IRXN"))=PSORX("IRXN")_"^"_$P($G(^PSRX(PSORX("IRXN"),"STA")),"^")_"^^^"_PSODRUG("VA CLASS")_"^"_$P(^PSRX(PSORX("IRXN"),0),"^",9)_"^"_PSODRUG("NDF")_"^"_$P(^PSRX(PSORX("IRXN"),0),"^",8)_"^1"
 | 
|---|
 | 11 |  E  S PSOSD(STAT,PSODRUG("NAME"))=PSORX("IRXN")_"^"_$P($G(^PSRX(PSORX("IRXN"),"STA")),"^")_"^^^"_PSODRUG("VA CLASS")_"^"_$P(^PSRX(PSORX("IRXN"),0),"^",9)_"^"_PSODRUG("NDF")_"^"_$P(^PSRX(PSORX("IRXN"),0),"^",8)_"^1"
 | 
|---|
 | 12 |  S PSOSD=$S($G(PSOSD)]"":PSOSD+1,1:1),^TMP("PS",$J,STAT,PSODRUG("NAME"))=1
 | 
|---|
 | 13 |  Q
 | 
|---|
 | 14 |  ;
 | 
|---|
 | 15 | RNPSOSD ;update PSOSD array for renewals
 | 
|---|
 | 16 |  S STA="ACTIVE^NON-VERIFIED^R^HOLD^NON-VERIFIED^ACTIVE^^^^^^ACTIVE^DISCONTINUE^^DISCONTINUE^DISCONTINUE^HOLD"
 | 
|---|
 | 17 |  S STAT=$P(STA,"^",$P(^PSRX(PSORENW("OIRXN"),"STA"),"^")+1)
 | 
|---|
 | 18 |  I $D(PSOSD(STAT,PSODRUG("NAME")_"^"_PSORENW("OIRXN"))) D
 | 
|---|
 | 19 |  . S PSOSD(STAT,PSODRUG("NAME")_"^"_PSORENW("IRXN"))=PSOSD(STAT,PSODRUG("NAME")_"^"_PSORENW("OIRXN")),$P(PSOSD(STAT,PSODRUG("NAME")_"^"_PSORENW("IRXN")),"^",2)=$P($G(^PSRX(PSORENW("IRXN"),"STA")),"^")
 | 
|---|
 | 20 |  . S $P(PSOSD(STAT,PSODRUG("NAME")_"^"_PSORENW("IRXN")),"^",6)=$P(^PSRX(PSORENW("IRXN"),0),"^",9)
 | 
|---|
 | 21 |  . K PSOSD(STAT,PSODRUG("NAME")_"^"_PSORENW("OIRXN")) Q
 | 
|---|
 | 22 |  E  D
 | 
|---|
 | 23 |  .S $P(PSOSD(STAT,PSODRUG("NAME")),"^")=PSORENW("IRXN"),$P(PSOSD(STAT,PSODRUG("NAME")),"^",2)=$P($G(^PSRX(PSORENW("IRXN"),"STA")),"^")
 | 
|---|
 | 24 |  .S $P(PSOSD(STAT,PSODRUG("NAME")),"^",6)=$P(^PSRX(PSORENW("IRXN"),0),"^",9)
 | 
|---|
 | 25 |  .S ^TMP("PS",$J,STAT,PSODRUG("NAME"))=1
 | 
|---|
 | 26 |  Q
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 | PROV(PSORENW) ;called from psoornew
 | 
|---|
 | 29 | CHKPRV ;check inactive providers and cosinging providers called from PSORENW (renew rx)
 | 
|---|
 | 30 |  I '$D(^VA(200,PSORENW("PROVIDER"),0)) D   G:PSORENW("DFLG") CHKPRVX
 | 
|---|
 | 31 |  .W !,$C(7),"Provider not in New Person File .. You must select a new provider"
 | 
|---|
 | 32 |  .S PSODIR("FIELD")=0 K PSORENW("PROVIDER") D PROV^PSODIR(.PSORENW)
 | 
|---|
 | 33 |  .S:$G(PSORENW("PROVIDER"))']"" PSORENW("DFLG")=1
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 |  I '$G(^VA(200,PSORENW("PROVIDER"),"PS")) D   G:PSORENW("DFLG") CHKPRVX
 | 
|---|
 | 36 |  .W !,$C(7),$P(^VA(200,PSORENW("PROVIDER"),0),"^")_" is not a Valid provider .. You must select a new provider"
 | 
|---|
 | 37 |  .S PSODIR("FIELD")=0 K PSORENW("PROVIDER") D PROV^PSODIR(.PSORENW)
 | 
|---|
 | 38 |  .S:$G(PSORENW("PROVIDER"))']"" PSORENW("DFLG")=1
 | 
|---|
 | 39 |  ;
 | 
|---|
 | 40 |  K PSOX S PSOX=$P($G(^VA(200,PSORENW("PROVIDER"),"PS")),"^",4)
 | 
|---|
 | 41 |  I PSOX,PSOX<DT D   G:PSORENW("DFLG") CHKPRVX
 | 
|---|
 | 42 |  .W !,$C(7),$P(^VA(200,PSORENW("PROVIDER"),0),"^")_" is inactive as a provider .. You must select a new provider"
 | 
|---|
 | 43 |  .S PSODIR("FIELD")=0 K PSORENW("PROVIDER") D PROV^PSODIR(.PSORENW)
 | 
|---|
 | 44 |  .I $G(PSORENW("PROVIDER"))']"" S PSORENW("DFLG")=1
 | 
|---|
 | 45 |  ;
 | 
|---|
 | 46 |  I '$D(PSORENW("COSIGNING PROVIDER")),$D(PSORENW("COSIGNER")) K PSOX S PSOX=$P(^VA(200,PSORENW("COSIGNER"),"PS"),"^",4) I PSOX,PSOX<DT D
 | 
|---|
 | 47 |  .W !,$C(7),"Inactive Cosigning Provider .. You must select a new cosigner"
 | 
|---|
 | 48 |  .S PSODIR("FIELD")=0,PSODIR("PROVIDER")=$S($D(PSORENW("PROVIDER")):PSORENW("PROVIDER"),1:PSORENW("PROVIDER"))
 | 
|---|
 | 49 |  .D COSIGN^PSODIR I '$D(PSODIR("COSIGNING PROVIDER")) S PSORENW("DFLG")=1
 | 
|---|
 | 50 |  .S PSORENW("COSIGNING PROVIDER")=PSODIR("COSIGNING PROVIDER")
 | 
|---|
 | 51 |  ;
 | 
|---|
 | 52 | CHKPRVX K PSODIR,PSOX
 | 
|---|
 | 53 |  Q
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 | NEXT(PSOX) ;
 | 
|---|
 | 56 |  S PSOX("RX0")=^PSRX(PSOX("IRXN"),0)
 | 
|---|
 | 57 |  S PSOX("RX2")=^PSRX(PSOX("IRXN"),2)
 | 
|---|
 | 58 |  S PSOX("RX3")=^PSRX(PSOX("IRXN"),3)
 | 
|---|
 | 59 |  S PSOX1=$P(PSOX("RX2"),"^",2)
 | 
|---|
 | 60 |  I '$O(^PSRX(PSOX("IRXN"),1,0)) D  G NEXTX
 | 
|---|
 | 61 |  . S $P(PSOX("RX3"),"^")=PSOX1,X1=PSOX1
 | 
|---|
 | 62 |  . S X2=$P(PSOX("RX0"),"^",8)-10\1
 | 
|---|
 | 63 |  . D C^%DTC
 | 
|---|
 | 64 |  . S:'$P(PSOX("RX3"),"^",8) $P(PSOX("RX3"),"^",2)=X
 | 
|---|
 | 65 |  . K X Q
 | 
|---|
 | 66 |  ;
 | 
|---|
 | 67 |  S PSOY2=0
 | 
|---|
 | 68 |  F PSOY=0:0 S PSOY=$O(^PSRX(PSOX("IRXN"),1,PSOY)) Q:'PSOY  S PSOY1=PSOY,PSOY2=PSOY2+1
 | 
|---|
 | 69 |  S PSOY=^PSRX(PSOX("IRXN"),1,PSOY1,0)
 | 
|---|
 | 70 |  S PSOX2=$P(PSOY,"^")
 | 
|---|
 | 71 |  S $P(PSOX("RX3"),"^")=PSOX2,X1=PSOX2
 | 
|---|
 | 72 |  S X2=$P(PSOX("RX0"),"^",8)-10\1
 | 
|---|
 | 73 |  D C^%DTC S PSOY3=X
 | 
|---|
 | 74 |  S X1=PSOX1,X2=(PSOY2+1)*$P(PSOX("RX0"),"^",8)-10\1
 | 
|---|
 | 75 |  D C^%DTC S PSOY4=X
 | 
|---|
 | 76 |  S $P(PSOX("RX3"),"^",2)=$S(PSOY3<PSOY4:PSOY4,1:PSOY3)
 | 
|---|
 | 77 | NEXTX ;
 | 
|---|
 | 78 |  K X,PSOX1,PSOX2,PSOY,PSOY1,PSOY2,PSOY3,PSOY4
 | 
|---|
 | 79 |  Q
 | 
|---|
 | 80 |  ;
 | 
|---|
 | 81 | SUSDATE(PSOX) ;
 | 
|---|
 | 82 |  S PSOX("OLD FILL DATE")=PSOX("FILL DATE")
 | 
|---|
 | 83 |  S PSORX("OLD FILL DATE")=PSORX("FILL DATE")
 | 
|---|
 | 84 |  S PSOX("FILL DATE")=$P(PSOX("RX3"),"^",2)
 | 
|---|
 | 85 |  I $O(^PS(52.5,"B",PSOX("IRXN"),0)),'$G(^PS(52.5,+$O(^PS(52.5,"B",PSOX("IRXN"),0)),"P")) S PSOX("FILL DATE")=$P(PSOX("RX3"),"^")
 | 
|---|
 | 86 |  S Y=PSOX("FILL DATE")
 | 
|---|
 | 87 |  X ^DD("DD") S PSORX("FILL DATE")=Y K Y
 | 
|---|
 | 88 |  Q
 | 
|---|
 | 89 |  ;
 | 
|---|
 | 90 | SUSDATEK(PSOX) ;
 | 
|---|
 | 91 |  S PSOX("FILL DATE")=PSOX("OLD FILL DATE")
 | 
|---|
 | 92 |  I $G(PSORX("OLD FILL DATE"))="",$G(PSORENW("OLD FILL DATE")) S Y=PSORENW("OLD FILL DATE") D DD^%DT S PSORX("OLD FILL DATE")=Y K Y
 | 
|---|
 | 93 |  S PSORX("FILL DATE")=PSORX("OLD FILL DATE")
 | 
|---|
 | 94 |  K PSOX("OLD FILL DATE"),PSORX("OLD FILL DATE")
 | 
|---|
 | 95 |  Q
 | 
|---|
 | 96 |  ;
 | 
|---|
 | 97 | STATUS(PSOREA,PSOSTAT) ;
 | 
|---|
 | 98 |  S DSMSG="Cannot "_$S($G(PSOOPT)=3:"renew",1:"refill")_" Rx. " S:$G(OR0) ACOM=DSMSG
 | 
|---|
 | 99 |  I PSOREA["A" W:$G(SPEED) ", Inactive Drug.",! D
 | 
|---|
 | 100 |  .S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"Inactive Drug.",VALMBCK="R" W:'$G(POERR) !," Inactive Drug"
 | 
|---|
 | 101 |  .S:$G(OR0) ACOM=ACOM_" Inactive Drug."
 | 
|---|
 | 102 |  I PSOREA["M" W:$G(SPEED) ", Drug no longer used by Outpatient.",! D
 | 
|---|
 | 103 |  .S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"Drug no longer used by Outpatient.",VALMBCK="R" W:'$G(POERR) !," Drug no longer used by Outpatient."
 | 
|---|
 | 104 |  .S:$G(OR0) ACOM=ACOM_" Drug no longer used by Outpatient."
 | 
|---|
 | 105 |  ;
 | 
|---|
 | 106 |  I PSOREA["B" W:$G(SPEED) ", Narcotic Drug." D
 | 
|---|
 | 107 |  .W:'$G(POERR) !,"Narcotic Drug" S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"Narcotic Drug.",VALMBCK="R"
 | 
|---|
 | 108 |  .S:$G(OR0) ACOM=ACOM_" Narcotic Drug."
 | 
|---|
 | 109 |  ;
 | 
|---|
 | 110 |  I PSOREA["C" W:$G(SPEED) ", Non-Renewable Drug." D
 | 
|---|
 | 111 |  .W:'$G(POERR) !,"Non-Renewable Drug" S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"Non-Renewable Drug.",VALMBCK="R"
 | 
|---|
 | 112 |  .S:$G(OR0) ACOM=ACOM_" Non-Renewable Drug."
 | 
|---|
 | 113 |  ;
 | 
|---|
 | 114 |  I PSOREA["D" W:$G(SPEED) ", Non-Renewable Patient Status." D
 | 
|---|
 | 115 |  .W:'$G(POERR) !,"Non-Renewable Patient Status" S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"Non-Renewable Patient Status.",VALMBCK="R"
 | 
|---|
 | 116 |  .S:$G(OR0) ACOM=ACOM_" Non-Renewable Patient Status."
 | 
|---|
 | 117 |  ;
 | 
|---|
 | 118 |  I PSOREA["E" W:$G(SPEED) ", Non-Verified Rx." D
 | 
|---|
 | 119 |  .W:'$G(POERR) !,"Non-Verified Rx" S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"Non-Verified Rx.",VALMBCK="R"
 | 
|---|
 | 120 |  .S:$G(OR0) ACOM=ACOM_" Non-Verified Rx."
 | 
|---|
 | 121 |  ;
 | 
|---|
 | 122 |  I PSOREA["F" W:$G(SPEED) ", Maximum of 26 Renewals." D
 | 
|---|
 | 123 |  .W:'$G(POERR) !,"Maximum of 26 Renewals" S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"Maximum of 26 Renewals.",VALMBCK="R"
 | 
|---|
 | 124 |  .S:$G(OR0) ACOM=ACOM_" Maximum of 26 Renewals."
 | 
|---|
 | 125 |  ;
 | 
|---|
 | 126 |  I PSOREA["G",PSOREA'["B" W:$G(SPEED) ", No more refills left." W:'$G(POERR) !,"No more refills left" S:$G(POERR)&('$G(SPEED)) VALMSG=DSMSG_"No more refills left.",VALMBCK="R"
 | 
|---|
 | 127 |  ;
 | 
|---|
 | 128 |  I PSOREA["Z" D
 | 
|---|
 | 129 |  . S:PSOSTAT=4 PSOSTAT=1
 | 
|---|
 | 130 |  . S PSOA=";"_PSOSTAT,PSOB=$P(^DD(52,100,0),"^",3),PSOA=$F(PSOB,PSOA),PSOA=$P($E(PSOB,PSOA,999),";",1)
 | 
|---|
 | 131 |  . W:$G(SPEED) ", Rx is in "_$P(PSOA,":",2)_" status."
 | 
|---|
 | 132 |  . W:'$G(POERR)&('$G(SPEED)) !,"Rx is in "_$P(PSOA,":",2)_" status"
 | 
|---|
 | 133 |  .S:$G(POERR)&($G(VALMSG)']"")&('$G(SPEED)) VALMSG=DSMSG_"Rx is in "_$P(PSOA,":",2)_" status.",VALMBCK="R"
 | 
|---|
 | 134 |  . K PSOA,PSOB
 | 
|---|
 | 135 |  . Q
 | 
|---|
 | 136 |  I $G(SPEED) K DIR S DIR(0)="E",DIR("A")="Press Return to Continue" D ^DIR K DIRUT,DUOUT,DTOUT,DIR
 | 
|---|
 | 137 |  Q
 | 
|---|
 | 138 | ACP I $P(^PSRX(PSOX("IRXN"),0),"^",11)="W",$G(^("IB")) S ^PSRX("ACP",$P(^PSRX(PSOX("IRXN"),0),"^",2),$P(^(2),"^",2),0,PSOX("IRXN"))=""
 | 
|---|
 | 139 |  Q
 | 
|---|
 | 140 |  ;
 | 
|---|
 | 141 | RENFDT(PSOX) ;gets the correct fill date
 | 
|---|
 | 142 |  S PSOX("OLD FILL DATE")=PSOX("FILL DATE")
 | 
|---|
 | 143 |  S PSORX("OLD FILL DATE")=PSORX("FILL DATE")
 | 
|---|
 | 144 |  S PSOX("FILL DATE")=$P(PSOX("RX3"),"^",2)
 | 
|---|
 | 145 |  N RXY,LBL,SUPN,LBP,RF,RFN,RFD
 | 
|---|
 | 146 |  S RXY=PSOX("IRXN"),RFN=0
 | 
|---|
 | 147 |  I '$O(^PSRX(RXY,1,0)) D GFDT G SDTX
 | 
|---|
 | 148 |  F RF=0:0 S RF=$O(^PSRX(RXY,1,RF)) Q:'RF  S RFN=RF
 | 
|---|
 | 149 |  S RF=^PSRX(RXY,1,RFN,0) D GFDT
 | 
|---|
 | 150 |  I PSOX("FILL DATE")<DT,PSOX("FILL DATE")<PSORNW("FILL DATE") S PSOX("FILL DATE")=DT
 | 
|---|
 | 151 | SDTX ;
 | 
|---|
 | 152 |  S Y=PSOX("FILL DATE")
 | 
|---|
 | 153 |  X ^DD("DD") S PSORX("FILL DATE")=Y K Y
 | 
|---|
 | 154 |  Q
 | 
|---|
 | 155 | GFDT ;
 | 
|---|
 | 156 |  I 'RFN,$P(^PSRX(RXY,2),"^",13) Q
 | 
|---|
 | 157 |  I RFN,$P(RF,"^",18) Q
 | 
|---|
 | 158 |  F LBL=0:0 S LBL=$O(^PSRX(RXY,"L",LBL)) Q:'LBL  I $P(^PSRX(RXY,"L",LBL,0),"^",2)=RFN S LBP=1 Q
 | 
|---|
 | 159 |  Q:$G(LBP)
 | 
|---|
 | 160 |  S SUPN=$O(^PS(52.5,"B",RXY,0))
 | 
|---|
 | 161 |  I SUPN,$P($G(^PS(52.5,SUPN,0)),"^",7)="L"!($P($G(^(0)),"^",7)="X") Q
 | 
|---|
 | 162 |  S:RFN RFD=$E($P(RF,"^"),1,7) S:'RFN RFD=$P(PSOX("RX3"),"^")
 | 
|---|
 | 163 |  I SUPN,RFD,$D(^PS(52.5,"C",RFD,SUPN)),$G(^PS(52.5,SUPN,"P"))=1 Q
 | 
|---|
 | 164 |  S PSOX("FILL DATE")=$P(PSOX("RX3"),"^")
 | 
|---|
 | 165 |  Q
 | 
|---|
 | 166 |  ;
 | 
|---|