| [613] | 1 | PSOCPD ;BHAM ISC/BaB - MULTIPLE COPAY CHARGE REMOVAL ;05/27/92
 | 
|---|
 | 2 |  ;;7.0;OUTPATIENT PHARMACY;**71,85,201**;DEC 1997
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ;REF/IA
 | 
|---|
 | 5 |  ;^IBARX/125
 | 
|---|
 | 6 |  ; Originally released as part of the copayment enhancement patch
 | 
|---|
 | 7 |  ; Mill Bill Copay enhancement -- entry point ASKCAN - called from PSOCPB
 | 
|---|
 | 8 | CR I '$D(PSOPAR) S PSOINDPT="" D ^PSOLSET G CR ; Setup site parameters
 | 
|---|
 | 9 | ASK K PSPEED,PSPEEDA,PSPOUT W ! R !,"PRESCRIPTION(s): ",PSX:DTIME S:'$T PSX="^" G LASTEX:"^"[PSX
 | 
|---|
 | 10 |  I PSX["?"!($L(PSX)>245)!(PSX?.AP) W !?5,"Enter prescription number(s) for removal of charges. If more than one",!,"separate with commas.  Do not exceed 245 characters including commas." G ASK
 | 
|---|
 | 11 |  G SPEED:PSX[","
 | 
|---|
 | 12 |  I '$D(^PSRX("B",PSX)) W !!,PSX," is not a valid RX #!!" G ASK
 | 
|---|
 | 13 |  S PSODA=$O(^PSRX("B",PSX,"")) W:PSODA="" !!,PSX," is not a valid RX #!!" G ASK:PSODA=""
 | 
|---|
 | 14 |  I '$D(^PSRX(PSODA,"IB")) W !!,"Rx # ",$P($G(^PSRX(PSODA,0)),"^")," is NOT a COPAY transaction...NO action taken." G EXIT
 | 
|---|
 | 15 |  D REASON G:Y<0 LASTEX D SPEED1,LASTEX
 | 
|---|
 | 16 |  Q
 | 
|---|
 | 17 | REASON ;
 | 
|---|
 | 18 |  ;          Get Cancellation reason
 | 
|---|
 | 19 |  W ! S DIC="^IBE(350.3,",DIC("S")="I $P(^(0),U,3)'=2",DIC(0)="AEQMZ",DIC("A")="Select CHARGE REMOVAL REASON : " D ^DIC K DIC D ENDMSG:Y<0 Q:Y<0  S PSORSN=+Y
 | 
|---|
 | 20 |  S PREA="C-CPD"
 | 
|---|
 | 21 |  Q
 | 
|---|
 | 22 | SPEED ;
 | 
|---|
 | 23 |  S PSPEED=1 D REASON G:Y<0 LASTEX
 | 
|---|
 | 24 |  F PSOI=1:1 S X=$P(PSX,",",PSOI) Q:$P(PSX,",",PSOI,99)=""!($G(PSPOUT))  I X S DIC=52,DIC(0)="M" D ^DIC K DIC S:Y<0 PSINV(X)="" I Y>0 S PSODA=+Y D SPEED1
 | 
|---|
 | 25 | INVALD G:'$D(PSINV) ASK
 | 
|---|
 | 26 |  W !!,"The following are INVALID choices:" S PSOI="" F PSOJ=0:0 S PSOI=$O(PSINV(PSOI)) Q:PSOI'>0  W !?10,PSOI
 | 
|---|
 | 27 |  K PSINV
 | 
|---|
 | 28 |  G ASK
 | 
|---|
 | 29 | SPEED1 ;
 | 
|---|
 | 30 |  S PSOFLAG=0
 | 
|---|
 | 31 |  S PSO=1 ; Remove Co-Pay charge
 | 
|---|
 | 32 |  S PSORXN=$P(^PSRX(PSODA,0),"^") ;..........Rx #
 | 
|---|
 | 33 |  ;          Determine if Rx is COPAY 
 | 
|---|
 | 34 |  I '$D(^PSRX(PSODA,"IB")) W !,"Rx # ",PSORXN," is NOT a COPAY transaction...NO action taken." G EXIT
 | 
|---|
 | 35 |  S PSOIB=^PSRX(PSODA,"IB")
 | 
|---|
 | 36 |  G:($P(PSOIB,"^",2)'>0)&('$D(^PSRX(PSODA,1))) ERRBIL ;No bill#/no refills
 | 
|---|
 | 37 |  ;
 | 
|---|
 | 38 |  ;          Determine last entry in ^PSRX
 | 
|---|
 | 39 |  S PSOREF=0
 | 
|---|
 | 40 |  G:'$D(^PSRX(PSODA,1)) CANCEL
 | 
|---|
 | 41 |  F PSZ=0:0 S PSZ=$O(^PSRX(PSODA,1,PSZ)) Q:PSZ'>0  S PSOREF=PSZ
 | 
|---|
 | 42 |  G:$S('$D(^PSRX(PSODA,1,PSOREF,"IB")):1,(+^("IB"))'>0:1,1:0) ERRBIL ;..No bill #
 | 
|---|
 | 43 |  S:PSOREF>0 PSOIB=^PSRX(PSODA,1,PSOREF,"IB")
 | 
|---|
 | 44 | CANCEL ;
 | 
|---|
 | 45 |  I '$G(PSPEED) W ! K DIR S DIR(0)="Y",DIR("B")="Y",DIR("A")="Are you sure you want to remove Copay charges for Rx # "_$G(PSORXN) D ^DIR K DIR I Y'=1 W !!,"No action taken.",! G EXIT
 | 
|---|
 | 46 |  I $G(PSPEED),'$G(PSPEEDA) W ! K DIR S DIR(0)="Y",DIR("B")="Y",DIR("A")="Are you sure you want to remove Copay charges for these Rx's" D ^DIR K DIR S PSPEEDA=1 I Y'=1 W !!,"No action taken.",! S PSPOUT=1 G EXIT
 | 
|---|
 | 47 |  W ! K X
 | 
|---|
 | 48 |  ;          Set x=service^dfn^^user duz
 | 
|---|
 | 49 |  ;              x(n)=IB number^cancellation reason
 | 
|---|
 | 50 |  ;
 | 
|---|
 | 51 |  S X=PSOPAR7_"^"_+$P(^PSRX(PSODA,0),"^",2)_"^^"_DUZ
 | 
|---|
 | 52 |  S:PSOREF=0 X(PSORXN)=+$P(PSOIB,"^",2)_"^"_PSORSN ; Original Rx
 | 
|---|
 | 53 |  S:PSOREF>0 X(PSORXN)=+^PSRX(PSODA,1,PSOREF,"IB")_"^"_PSORSN ; Refill Rx
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 |  D CANCEL^IBARX
 | 
|---|
 | 56 |  ;
 | 
|---|
 | 57 |  ;          Return y=1 if success, -1^error code if error
 | 
|---|
 | 58 |  ;                 y(n)=IB number^total charge^AR bill number
 | 
|---|
 | 59 |  ;
 | 
|---|
 | 60 |  I +Y=-1 W !,"......No action taken." G EXIT
 | 
|---|
 | 61 |  G EXIT:'$D(Y(PSORXN))
 | 
|---|
 | 62 | FILE ;
 | 
|---|
 | 63 |  ;          File new Bill # in ^PSRX
 | 
|---|
 | 64 |  ;
 | 
|---|
 | 65 |  S:PSOREF=0 $P(^PSRX(PSODA,"IB"),"^",2)=+Y(PSORXN) ;...Original Rx
 | 
|---|
 | 66 |  S:PSOREF>0 ^PSRX(PSODA,1,PSOREF,"IB")=+Y(PSORXN) ; ...Refill Rx
 | 
|---|
 | 67 |  W:PSO=1 !!,"Co-Pay transaction for Rx # ",PSORXN,$S(PSOREF>0:" refill # "_PSOREF,1:"")," has been cancelled."
 | 
|---|
 | 68 |  ;
 | 
|---|
 | 69 |  D ACTLOG^PSOCPA
 | 
|---|
 | 70 |  ;
 | 
|---|
 | 71 |  G EXIT
 | 
|---|
 | 72 | ERRBIL W !!,"No Entry # for Rx # "_$P($G(^PSRX(PSODA,0)),"^")_" ...No action taken."
 | 
|---|
 | 73 | EXIT ;
 | 
|---|
 | 74 |  K PREA,C,PSO,PSODA,PSOIB,PSOPARNT,PSOREF,PSORXN,PSZ,X,Y
 | 
|---|
 | 75 |  Q
 | 
|---|
 | 76 | LASTEX ;
 | 
|---|
 | 77 |  K PSO,PSPOUT,PSPEED,PSPEEDA,PSOCPUN,PSODA,PSOFLAG,PSOIB,PSOPARNT,PSOREF,PSORSN,PSORXN,PSZ,X,Y,PSINV,PSOI,PSX,PSOJ,PREA,C
 | 
|---|
 | 78 |  I $D(PSOINDPT) K PSOINDPT D FINAL^PSOLSET
 | 
|---|
 | 79 |  Q
 | 
|---|
 | 80 | ENDMSG ;
 | 
|---|
 | 81 |  W !!,"Unable to process without REASON entry."
 | 
|---|
 | 82 |  Q
 | 
|---|
 | 83 |  ;
 | 
|---|
 | 84 | ASKCAN ; if any charges currently, give option to cancel some or all
 | 
|---|
 | 85 |  I '$D(^PSRX(PSODA,"IB")) Q  ;ok to quit based on IB node for PFSS because always have IB node when copay is billed.
 | 
|---|
 | 86 |  N J,PSOREF,PSOCAN,CANTYPE
 | 
|---|
 | 87 |  K X,XX
 | 
|---|
 | 88 |  S J=0
 | 
|---|
 | 89 |  I $P($G(^PSRX(PSODA,"PFS")),"^",2) S X(PSODA)="",J=1,PSOCAN(J)=PSODA_"^"_X(PSODA),$P(PSOCAN(J),"^",10)="PFS" ;if PFS and it has charge id
 | 
|---|
 | 90 |  I $P(^PSRX(PSODA,"IB"),"^",2)>0 S X(PSORXN)=$P(^PSRX(PSODA,"IB"),"^",2),J=1,PSOCAN(J)=PSORXN_"^"_X(PSORXN) ; original fill
 | 
|---|
 | 91 |  I $P(^PSRX(PSODA,"IB"),"^",4)>0,'$D(X(PSORXN)) S XX(PSORXN)=$P(^PSRX(PSODA,"IB"),"^",4),J=1,PSOCAN(J)=PSORXN_"^"_XX(PSORXN)_"^CAP" ; original fill
 | 
|---|
 | 92 | PFS D REFILL^PSOCPB
 | 
|---|
 | 93 |  I '$D(X),'$D(XX) Q  ; no "IB" numbers on original or refills
 | 
|---|
 | 94 |  S PSOREF="" F  S PSOREF=$O(X(PSOREF)) Q:PSOREF=""  Q:PSOREF>12  S J=J+1,PSOCAN(J)=PSOREF_"^"_X(PSOREF) S:$P($G(^PSRX(PSODA,1,PSOREF,"PFS")),"^",2) $P(PSOCAN(J),"^",10)="PFS"
 | 
|---|
 | 95 |  S PSOREF="" F  S PSOREF=$O(XX(PSOREF)) Q:PSOREF=""  Q:PSOREF>12  S J=J+1,PSOCAN(J)=PSOREF_"^"_XX(PSOREF)_"^CAP" S:$P($G(^PSRX(PSODA,1,PSOREF,"PFS")),"^",2) $P(PSOCAN(J),"^",10)="PFS"
 | 
|---|
 | 96 | ASKCAN2 W !!,"Do you want to cancel any charges (Y/N)? "
 | 
|---|
 | 97 |  R X:DTIME S:'$T X="^" Q:X=""  G:"Yy"[$E(X) ASKALL Q:"Nn^"[$E(X)  D HELP2:"?"[$E(X) G ASKCAN2
 | 
|---|
 | 98 | HELP2 W !,"Answering YES will allow cancelling of all or selected charges"
 | 
|---|
 | 99 |  Q
 | 
|---|
 | 100 | HELP3 W !,"Answering YES will proceed with cancelling selected charges"
 | 
|---|
 | 101 |  Q
 | 
|---|
 | 102 | ASKALL ;PFS - check copay activity log to see if any fills were previously cancelled; mark as cancelled for display
 | 
|---|
 | 103 |  N PSOPFSD,PSOFIL D GETS^DIQ(52,PSODA,"107*","I","PSOPFSD") D:$D(PSOPFSD)
 | 
|---|
 | 104 |  .F I=1:1 Q:'$D(PSOPFSD(52.0107,I_","_PSODA_","))  D:$G(PSOPFSD(52.0107,I_","_PSODA_",",1,"I"))="C"
 | 
|---|
 | 105 |  ..S PSOFIL=$G(PSOPFSD(52.0107,I_","_PSODA_",",3,"I")),J=""
 | 
|---|
 | 106 |  ..F  S J=$O(PSOCAN(J)) Q:J=""  S:$P(PSOCAN(J),"^")=PSOFIL&($P(PSOCAN(J),"^",10)="PFS") $P(PSOCAN(J),"^",5)="CANCEL" S:$P(PSOCAN(J),"^")=PSODA&(PSOFIL=0)&($P(PSOCAN(J),"^",10)="PFS") $P(PSOCAN(J),"^",5)="CANCEL"
 | 
|---|
 | 107 |  K PSOFIL,PSOPFSD
 | 
|---|
 | 108 |  ;
 | 
|---|
 | 109 |  W !!,"(A)ll or (S)elect Charges? (A/S): "
 | 
|---|
 | 110 |  R X:DTIME S:'$T X="^" I X="" Q
 | 
|---|
 | 111 |  I X="^" Q
 | 
|---|
 | 112 |  I X'="A",X'="a",X'="S",X'="s" W !,"Enter 'A' to cancel all charges or 'S' to select from list of charges" G ASKALL
 | 
|---|
 | 113 |  I X="A"!(X="a") D  D BILL2^PSOCPB Q
 | 
|---|
 | 114 |  .W !!,"**********Charges are on file for this Rx.**********"
 | 
|---|
 | 115 |  .W !,"Proceeding with cancellation of ALL charges."
 | 
|---|
 | 116 |  .S CANTYPE=1
 | 
|---|
 | 117 |  S CANTYPE=0
 | 
|---|
 | 118 |  D SELECT
 | 
|---|
 | 119 |  Q
 | 
|---|
 | 120 |  ;
 | 
|---|
 | 121 | SELECT ; Choose from list of fills that have charges
 | 
|---|
 | 122 |  N J,I,PSORELDT,PSOBILL,FOOTNOTE
 | 
|---|
 | 123 |  K FOOTNOTE
 | 
|---|
 | 124 |  K X
 | 
|---|
 | 125 |  F J=1:1 Q:'$D(PSOCAN(J))  D  W:PSORELDT'="//" !,J,". ",$S(+PSOCAN(J)>11:"Original fill",1:"Refill #"_+PSOCAN(J)),?20,"(",PSORELDT,")",?35,PSOBILL
 | 
|---|
 | 126 |  .S PSOBILL=""
 | 
|---|
 | 127 |  .I $P(PSOCAN(J),"^",10)'="PFS" D
 | 
|---|
 | 128 |  ..I PSOCAN(J)["CAP" S PSOBILL="(Potential Charge *)",FOOTNOTE=1
 | 
|---|
 | 129 |  ..I $P(PSOCAN(J),"^",10)'="PFS" I $T(STATUS^IBARX)'="" I PSOCAN(J)'["CAP" S PSOBILL=$$STATUS^IBARX($P(PSOCAN(J),"^",2)) S:PSOBILL=2 $P(PSOCAN(J),"^",5)="CANCEL" S PSOBILL=$S(PSOBILL=2:"(Charge Cancelled)",1:"")
 | 
|---|
 | 130 |  .I $P(PSOCAN(J),"^",10)="PFS" S:$P(PSOCAN(J),"^",5)="CANCEL" PSOBILL="(Charge Cancelled)"
 | 
|---|
 | 131 |  .N RX2
 | 
|---|
 | 132 |  .S RX2=$S(+PSOCAN(J)>11:$G(^PSRX(PSODA,2)),1:$G(^PSRX(PSODA,1,+PSOCAN(J),0)))
 | 
|---|
 | 133 |  .I RX2="" S PSORELDT="" Q
 | 
|---|
 | 134 |  .I +PSOCAN(J)>11 S PSORELDT=$S($P(RX2,"^",13):$E($P(RX2,"^",13),4,5)_"/"_$E($P(RX2,"^",13),6,7)_"/"_$E($P(RX2,"^",13),2,3),$P(RX2,"^",15):"RTS",1:"") Q
 | 
|---|
 | 135 |  .S PSORELDT=$E($P(RX2,"^",18),4,5)_"/"_$E($P(RX2,"^",18),6,7)_"/"_$E($P(RX2,"^",18),2,3)
 | 
|---|
 | 136 |  I $D(FOOTNOTE) D
 | 
|---|
 | 137 |  . W !!,"* Potential charge indicates fill was not billed due to the annual cap."
 | 
|---|
 | 138 |  . W !,"If cancelled, this fill will not be considered for future copay billing."
 | 
|---|
 | 139 | SELECT2 ;
 | 
|---|
 | 140 |  K DIR
 | 
|---|
 | 141 |  S DIR("?")="Select a list or a range, e.g., 1,3,5 or 2-5,8"
 | 
|---|
 | 142 |  S DIR(0)="LO^1:"_(J-1)
 | 
|---|
 | 143 |  D ^DIR K DIR
 | 
|---|
 | 144 |  Q:(X="")!(X="^")!(Y=-1)
 | 
|---|
 | 145 |  F I=1:1:$L(Y,",")-1 D
 | 
|---|
 | 146 |  . S PSOSLCT=$P(Y,",",I)
 | 
|---|
 | 147 |  . I $P(PSOCAN(PSOSLCT),"^",5)="" S X($P(PSOCAN(PSOSLCT),"^",1))=$P(PSOCAN(PSOSLCT),"^",2) Q
 | 
|---|
 | 148 | SELECT3 W !!,"Do you wish to continue (Y/N)? "
 | 
|---|
 | 149 |  R X:DTIME S:'$T X="^" I X="" Q
 | 
|---|
 | 150 |  I "Yy"[$E(X) G SELECT4
 | 
|---|
 | 151 |  Q:"Nn^"[$E(X)  D HELP3:"?"[$E(X) G SELECT3
 | 
|---|
 | 152 | SELECT4 I $O(X(""))'="" D  D BILL2^PSOCPB ; cancel charges for selected fills only
 | 
|---|
 | 153 |  . S I="" F  S I=$O(PSOCAN(I)) Q:I=""  I '$D(X($P(PSOCAN(I),"^",1))) K PSOCAN(I) ; remove unselected fills from cancellation list
 | 
|---|
 | 154 |  Q
 | 
|---|
 | 155 |  ;
 | 
|---|
 | 156 | CHKCAN ; SEE IF SELECTION HAS ALREADY BEEN CANCELLED
 | 
|---|
 | 157 |  I '$D(PSOCAN(J)) D  Q
 | 
|---|
 | 158 |  . I J>12!(J'?0.2N) W $C(7),!!,J," is an invalid selection.  Please try again.",!
 | 
|---|
 | 159 |  S PSI=0
 | 
|---|
 | 160 |  I $P(PSOCAN(J),"^",5)="CANCEL" S PSOCOMM="Rx # "_PSORXN_" - "_$S(+PSOCAN(J)>11:"Original fill",1:"Refill #"_+PSOCAN(J))_" copay charge has already been cancelled!" D SETSUMM^PSOCPC
 | 
|---|
 | 161 |  K PSI
 | 
|---|
 | 162 |  Q
 | 
|---|
 | 163 |  ;
 | 
|---|