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 | ;
|
---|