| [613] | 1 | PSOCPB ;BIR/BaB - pharmacy co-pay application cont'd ; 1/30/07 9:08am | 
|---|
|  | 2 | ;;7.0;OUTPATIENT PHARMACY;**72,71,85,185,143,219,239,201,263**;DEC 1997;Build 11 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | ;REF/IA | 
|---|
|  | 5 | ;DIS^SDROUT2/112 | 
|---|
|  | 6 | ;^IBARX/125 | 
|---|
|  | 7 | ;VADPT/10061 | 
|---|
|  | 8 | ;SWSTAT^IBBAPI/4663 | 
|---|
|  | 9 | COPAY ; | 
|---|
|  | 10 | ;Called by PSON52,PSORN52...Requires PSOCPAY,PSOBILL,DEA=PSDEA,PSOFLAG | 
|---|
|  | 11 | ;PSOFLAG=1 NEW, PSOFLAG=0 RENEW | 
|---|
|  | 12 | S PSOSAVE=PSOCPAY ; Save original status of PSOCPAY | 
|---|
|  | 13 | I '$G(PSOSCP)!('$G(PSOSCA)) D SCP^PSORN52D  ;CIDC-must ask sc if flagged for it in enrollment | 
|---|
|  | 14 | I $G(PSODRUG("DEA"))["S"!($G(PSODRUG("DEA"))["I") S PSOCPAY=0 | 
|---|
|  | 15 | G:+PSOBILL'=2&('$G(PSOSCA)) COPAY2 | 
|---|
|  | 16 | D FULL^VALM1 | 
|---|
|  | 17 | I $G(PSOMESOI)=1,$G(PSORXED) W !!,"The Pharmacy Orderable Item has changed for this order. Please review any",!,"existing SC or Environmental Indicator defaults carefully for appropriateness.",! S PSOMESOI=2 | 
|---|
|  | 18 | I $G(PSOMESFI)=1 W !!,"The Pharmacy Orderable Item has changed for this order. Please review any",!,"existing SC or Environmental Indicator defaults carefully for appropriateness.",! S PSOMESFI=2 | 
|---|
|  | 19 | S DFN=+$G(PSODFN) D DIS^SDROUT2 | 
|---|
|  | 20 | ASK ; | 
|---|
|  | 21 | N PSOUFLAG S PSOUFLAG=0 | 
|---|
|  | 22 | K PSOCPZ("DFLG"),PSONEW("NEWCOPAY") | 
|---|
|  | 23 | W ! K DIR,DTOUT,DIRUT,DUOUT | 
|---|
|  | 24 | I $G(PSORX("SC"))="SC"!($G(PSORX("SC"))="NSC")!($G(PSOSCOTH)) D | 
|---|
|  | 25 | . W:PSOSCP<50&($G(PSODRUG("DEA"))'["S")&($G(PSODRUG("DEA"))'["I") !,"This Rx has been flagged by the provider as: "_$S($G(PSOSCOTH):"NO COPAY",$G(PSORX("SC"))="SC":"NO COPAY",1:"COPAY"),! I $G(PSOSCOTX) S PSOSCOTX=2 | 
|---|
|  | 26 | S DIR("A")="Was treatment for Service Connected condition",DIR(0)="Y" | 
|---|
|  | 27 | S DIR("?")="Enter 'Yes' if this prescription is for a Service Connected condition" | 
|---|
|  | 28 | I $G(PSORX("SC"))]""!($G(PSORX(+$G(PSORENW("OIRXN")),"SC"))'="") S DIR("B")=$S($G(PSORX("SC"))="SC":"YES",$G(PSORX("SC"))="NSC":"NO",$G(PSORX(+$G(PSORENW("OIRXN")),"SC"))=1:"YES",$G(PSORX(+$G(PSORENW("OIRXN")),"SC"))=0:"NO",1:"") | 
|---|
|  | 29 | I $G(PSONEWFF),$G(PSOFLAG) I $G(PSOANSQD("SC"))=0!($G(PSOANSQD("SC"))=1) S DIR("B")=$S($G(PSOANSQD("SC"))=1:"YES",1:"NO") | 
|---|
|  | 30 | I $G(DIR("B"))="YES"!($G(DIR("B"))="NO") S PSOUFLAG=$G(DIR("B")) | 
|---|
|  | 31 | I $G(DIR("B"))="" K DIR("B") | 
|---|
|  | 32 | D ^DIR | 
|---|
|  | 33 | I $G(Y)=1!($G(Y)=0) S PSOANSQ("SC")=$G(Y) I $G(PSONEWFF),$G(PSOFLAG) S PSOANSQD("SC")=$G(Y) | 
|---|
|  | 34 | I PSOFLAG I Y["^"!($D(DTOUT))!($D(DUOUT)) S PSOCPZ("DFLG")=1 | 
|---|
|  | 35 | S:Y=0 Y=2 | 
|---|
|  | 36 | S PSOANSR=+Y I 'PSOANSR,'PSOFLAG D  S $P(PSOCPAY,"^")=$S($G(PSOUFLAG)="NO":1,1:0) W ! K DIR S DIR(0)="E",DIR("A")="Press Return to continue" D ^DIR K DIR G COPAY2 | 
|---|
|  | 37 | .W !!,"This Renewal has been designated as "_$S($G(PSOUFLAG)="YES":"SERVICE CONNECTED",1:"NON-SERVICE CONNECTED.") | 
|---|
|  | 38 | .W:PSOSCP<50&($G(PSODRUG("DEA"))'["S")&($G(PSODRUG("DEA"))'["I") !,"Please use the 'Reset Copay Status/Cancel Charges' option to make corrections." | 
|---|
|  | 39 | .S PSOANSQ("SC")=$S($G(PSOUFLAG)="YES":1,1:0) | 
|---|
|  | 40 | I $G(PSOFLAG),$G(PSOCPZ("DFLG")) G EXIT | 
|---|
|  | 41 | S:PSOANSR=1 PSOCPAY=0 S:PSOANSR=2 $P(PSOCPAY,"^")=1 | 
|---|
|  | 42 | COPAY2 ; | 
|---|
|  | 43 | N PSOPFS S PSOPFS=$$SWSTAT^IBBAPI() | 
|---|
|  | 44 | I +PSOCPAY=1,($P(PSOCPAY,"^",2)=1)!($P(PSOCPAY,"^",2)=2) D | 
|---|
|  | 45 | .;set IB node in ^PSRX for copay if xactn type is 1 or 2 | 
|---|
|  | 46 | .S PSONEW("NEWCOPAY")=$P($G(PSOCPAY),"^",2)_"^^"_$S(+$G(PSOPFS):"",1:$P($G(PSOCPAY),"^",2)) | 
|---|
|  | 47 | EXIT ; | 
|---|
|  | 48 | S PSOCPAY=PSOSAVE ;Restore val of PSOCPAY | 
|---|
|  | 49 | K PSOSAVE,PSOANSR,DIR,DUOUT,DIRUT,DTOUT,Y,X | 
|---|
|  | 50 | Q | 
|---|
|  | 51 | RESET ;RESET COPAY STATUS | 
|---|
|  | 52 | K PSOSUMM,PSOPFS,PSOPFSA,PSOLFIL,PSOPFSG | 
|---|
|  | 53 | I '$D(PSOPAR) D ^PSOLSET G RESET | 
|---|
|  | 54 | W ! S DIC="^PSRX(",DIC(0)="AEQZ" D ^DIC K DIC G:Y<0 EXT S PSODA=+Y | 
|---|
|  | 55 | W !,?17,"PATIENT: ",$P($G(^DPT($P(^PSRX(PSODA,0),"^",2),0)),"^") | 
|---|
|  | 56 | D ICN^PSODPT($P(^PSRX(PSODA,0),"^",2)) | 
|---|
|  | 57 | S PSORXN=$P(^PSRX(PSODA,0),"^"),PREA="R" | 
|---|
|  | 58 | S PCOPAY=$G(^PSRX(PSODA,"IB")) | 
|---|
|  | 59 | W !!,"Rx # ",PSORXN," is a ",$S(+PCOPAY:"Copay",1:"No Copay")," prescription" | 
|---|
|  | 60 | S PSOLFIL=$$LF^PSOPFSU1(PSODA) D PFSA^PSOPFSU1(PSODA,PSOLFIL,3)  ;PSOCPC def PSOPFSA=1 if OP SC/EI's change. | 
|---|
|  | 61 | D EXEMCHK^PSOCPC ; CHECK/CHANGE EXEMPTION FLAGS | 
|---|
|  | 62 | S PSOIBQ=$G(^PSRX(PSODA,"IBQ")) | 
|---|
|  | 63 | I '$G(^PSRX(PSODA,"IB")),PSOIBQ'["1" D  G ASKCAN | 
|---|
|  | 64 | . K DIR S DIR(0)="Y",DIR("B")="N",DIR("A")="Do you want to reset the status to COPAY" D ^DIR K DIR | 
|---|
|  | 65 | . I Y'=1 Q | 
|---|
|  | 66 | . S DIC="^IBE(350.3,",DIC("S")="I $P(^(0),U,3)'=2",DIC(0)="AEQMZ",DIC("A")="Select Reason for Reset : " D ^DIC K DIC I Y'<0 S PSORSN=+Y | 
|---|
|  | 67 | . S PREA="R",PSOOLD="No Copay",PSONW="Copay",PSOCOMM="" D ACTLOG^PSOCPA | 
|---|
|  | 68 | . S PSI=0,PSOCOMM="Copay status of this Rx has been reset to COPAY." D SETSUMM^PSOCPC | 
|---|
|  | 69 | . S $P(^PSRX(PSODA,"IB"),"^")=1 ;Reset flag to COPAY | 
|---|
|  | 70 | ; | 
|---|
|  | 71 | I $G(^PSRX(PSODA,"IB")) D  G ASKCAN | 
|---|
|  | 72 | . K DIR S DIR(0)="Y",DIR("B")="N",DIR("A")="Do you want to reset the status to NO COPAYMENT" D ^DIR K DIR | 
|---|
|  | 73 | . I Y'=1 Q | 
|---|
|  | 74 | . S DIC="^IBE(350.3,",DIC("S")="I $P(^(0),U,3)'=2",DIC(0)="AEQMZ",DIC("A")="Select Reason for Reset : " D ^DIC K DIC I Y'<0 S PSORSN=+Y | 
|---|
|  | 75 | . S PREA="R",PSOOLD="Copay",PSONW="No Copay",PSOCOMM="" D ACTLOG^PSOCPA | 
|---|
|  | 76 | . S PSI=0,PSOCOMM="Copay status of this Rx has been reset to NO COPAY." D SETSUMM^PSOCPC | 
|---|
|  | 77 | . S $P(^PSRX(PSODA,"IB"),"^")="" ;Reset flag to NO COPAY | 
|---|
|  | 78 | ASKCAN D ASKCAN^PSOCPD | 
|---|
|  | 79 | I '$D(PSOSUMM) S PSI=0,PSOCOMM="No action taken" D SETSUMM^PSOCPC | 
|---|
|  | 80 | D PRTSUMM | 
|---|
|  | 81 | I $P($G(PSOPFS),"^",3)>0&(+$G(PSOPFSA)) D CHRG^PSOPFSU1(PSODA,PSOLFIL,"CG",PSOPFS) | 
|---|
|  | 82 | RESETE K PSODA,PSORXN,PSORSN,PSOREF,X,Y,PCOPAY,PREA,PSOCOMM,PSI | 
|---|
|  | 83 | G RESET | 
|---|
|  | 84 | EXT K PSODA,PSORXN,PSORSN,PSOREF,X,Y,PCOPAY,PREA,PSOCOPAY | 
|---|
|  | 85 | Q | 
|---|
|  | 86 | BILLED ;Collect IB nums,cancel chrgs,reset flag. | 
|---|
|  | 87 | W !!,"**********Charges are on file for this Rx.**********" | 
|---|
|  | 88 | Q | 
|---|
|  | 89 | BILL2 ; | 
|---|
|  | 90 | N PSOPREV ; VAR FOR PREV CANCELLED | 
|---|
|  | 91 | S PSOPREV=0 | 
|---|
|  | 92 | S DIC="^IBE(350.3,",DIC("S")="I $P(^(0),U,3)'=2",DIC(0)="AEQMZ",DIC("A")="Select Reason for Reset or Charge Cancellation : " D ^DIC K DIC G ENDMSG:Y<0 S PSORSN=+Y | 
|---|
|  | 93 | S X=PSOPAR7_"^"_+$P(^PSRX(PSODA,0),"^",2)_"^^"_DUZ | 
|---|
|  | 94 | S SAVX=X | 
|---|
|  | 95 | I $D(PSOCAN) D:'$G(PSOPFS)  I +$G(PSOPFS)!($G(PSOPFSG)) D PFS^PSOPFSU1 G BILL2END:'$D(PSOCAN) | 
|---|
|  | 96 | . N III S III="" F  S III=$O(PSOCAN(III)) Q:III=""  I PSOCAN(III)["PFS" S PSOPFSG=1 Q  ;PFSS switch off, check for prev cots billing | 
|---|
|  | 97 | D POTBILL2 | 
|---|
|  | 98 | I '$D(PSOCAN) G BILL2END | 
|---|
|  | 99 | I $G(CANTYPE) D PREVCAN I $O(X(""))="" Q | 
|---|
|  | 100 | I '$G(CANTYPE) S I="" F  S I=$O(PSOCAN(I)) Q:I=""  S X($P(PSOCAN(I),"^",1))=$P(PSOCAN(I),"^",2)_"^"_PSORSN | 
|---|
|  | 101 | D CANCEL^IBARX | 
|---|
|  | 102 | I $G(CANTYPE) D MSG | 
|---|
|  | 103 | I '$D(Y) Q | 
|---|
|  | 104 | I +Y=-1 Q | 
|---|
|  | 105 | I $D(Y(PSORXN)),+Y(PSORXN)'=-1 S $P(^PSRX(PSODA,"IB"),"^",2)=+Y(PSORXN) K Y(PSORXN) S PREA="C",PSOREF=0,PSOOLD="",PSONW="" D ACTLOG^PSOCPA I '$G(CANTYPE) D MSG | 
|---|
|  | 106 | F PSOREF=0:0 S PSOREF=$O(Y(PSOREF)) Q:PSOREF=""  I +Y(PSOREF)'=-1 S ^PSRX(PSODA,1,PSOREF,"IB")=+Y(PSOREF) S PREA="C",PSOOLD="",PSONW="" D ACTLOG^PSOCPA I '$G(CANTYPE) D MSG | 
|---|
|  | 107 | BILL2END K X,Y,SAVX,PSOREF,PSOCAN | 
|---|
|  | 108 | Q | 
|---|
|  | 109 | ; | 
|---|
|  | 110 | POTBILL2 ;see if any potential charges (entries from file 354.71 -- bills that exceeded cap prev) to be cancelled before cancelling regular charges | 
|---|
|  | 111 | N X,I | 
|---|
|  | 112 | S X=SAVX | 
|---|
|  | 113 | I $T(CANIBAM^IBARX)="" Q | 
|---|
|  | 114 | S I="" F  S I=$O(PSOCAN(I)) Q:I=""  I PSOCAN(I)["^CAP" S X($P(PSOCAN(I),"^",1))=$P(PSOCAN(I),"^",2)_"^"_PSORSN K PSOCAN(I) | 
|---|
|  | 115 | I $O(X(""))="" Q | 
|---|
|  | 116 | S PSOPREV=1 | 
|---|
|  | 117 | D CANIBAM^IBARX | 
|---|
|  | 118 | I $D(X(PSORXN)) S $P(^PSRX(PSODA,"IB"),"^",4)="" S PREA="C",PSOREF=0,PSOCOMM="Potential charge cancelled",PSOOLD="",PSONW="" D ACTLOG^PSOCPA D POTMSG K X(PSORXN) | 
|---|
|  | 119 | F PSOREF=0:0 S PSOREF=$O(X(PSOREF)) Q:PSOREF=""  Q:PSOREF>11  S $P(^PSRX(PSODA,1,PSOREF,"IB"),"^",2)="" S PREA="C",PSOCOMM="Potential charge cancelled",PSOOLD="",PSONW="" D ACTLOG^PSOCPA D POTMSG | 
|---|
|  | 120 | K PSOREF,PREA,PSOCOMM | 
|---|
|  | 121 | Q | 
|---|
|  | 122 | REFILL S PSOREF=0 | 
|---|
|  | 123 | F  S PSOREF=$O(^PSRX(PSODA,1,PSOREF)) Q:PSOREF'?1N.N  D | 
|---|
|  | 124 | . I $D(^PSRX(PSODA,1,PSOREF,"PFS")) S:$P($G(^PSRX(PSODA,1,PSOREF,"PFS")),"^",2) X(PSOREF)="^"_$G(PSORSN) Q | 
|---|
|  | 125 | . I $D(^PSRX(PSODA,1,PSOREF,"IB")),+^("IB")>0 S X(PSOREF)=+^PSRX(PSODA,1,PSOREF,"IB")_"^"_$G(PSORSN) | 
|---|
|  | 126 | S PSOREF=0 F  S PSOREF=$O(^PSRX(PSODA,1,PSOREF)) Q:PSOREF'?1N.N  I '$D(X(PSOREF)),+$P($G(^PSRX(PSODA,1,PSOREF,"IB")),"^",2) S XX(PSOREF)=+$P(^PSRX(PSODA,1,PSOREF,"IB"),"^",2)_"^"_$G(PSORSN) ; IF ONLY ENTRY FROM 354.71 SAVE IT | 
|---|
|  | 127 | Q | 
|---|
|  | 128 | SETCP ;IF NOT COPAY MAKE ELIG CALL/SET FLAG FOR FUTURE | 
|---|
|  | 129 | W ! S X=PSOPAR7_"^"_+$P(^PSRX(PSODA,0),"^",2) | 
|---|
|  | 130 | D XTYPE^IBARX | 
|---|
|  | 131 | I +Y=-1 W !!,"Error in processing Copay eligibility, no action taken." Q | 
|---|
|  | 132 | S (ACTYP,BL)="",(PSOBILL,PSOCPAY)=0 | 
|---|
|  | 133 | CP ; | 
|---|
|  | 134 | S ACTYP=$O(Y(ACTYP)) G:'ACTYP CP1 | 
|---|
|  | 135 | F I=0:0 S BL=$O(Y(ACTYP,BL)) Q:BL=""  I BL>0 S PSOBILL=BL,PSOCPAY=ACTYP | 
|---|
|  | 136 | G CP | 
|---|
|  | 137 | CP1 K ACTYP,BL,I | 
|---|
|  | 138 | I (PSOBILL'>0)!(PSOCPAY=0) G INELIG | 
|---|
|  | 139 | S $P(^PSRX(PSODA,"IB"),"^")=PSOCPAY | 
|---|
|  | 140 | W !,"COPAY status on this Rx has been reset.",!,"*** Future refills will be classified as COPAY." | 
|---|
|  | 141 | S PREA="R",PSOOLD="No Copay",PSONW="Copay" | 
|---|
|  | 142 | D ACTLOG^PSOCPA | 
|---|
|  | 143 | Q | 
|---|
|  | 144 | INELIG W !,"This Rx does not meet patient eligibility requirement for Copay.",!,"****** Status unchanged *******" | 
|---|
|  | 145 | S Y=-1 | 
|---|
|  | 146 | Q | 
|---|
|  | 147 | ENDMSG K X W !,"Unable to process CHARGE REMOVAL without REASON for Reset." | 
|---|
|  | 148 | R !,"ENTER a REASON now?  (Y/N) ",X:DTIME Q:'$T | 
|---|
|  | 149 | I ($E(X)["?")!("YyNn^"'[$E(X)) W !,"Enter YES to select REASON and RESET STATUS." G ENDMSG | 
|---|
|  | 150 | I "Yy"[$E(X) G BILL2 | 
|---|
|  | 151 | Q | 
|---|
|  | 152 | MSG ; | 
|---|
|  | 153 | S PSI=0 | 
|---|
|  | 154 | I $G(CANTYPE) S PSOCOMM="Rx # "_PSORXN_" - All copay charges cancelled" D SETSUMM^PSOCPC K PSOCOMM Q | 
|---|
|  | 155 | S PSOCOMM="Rx # "_PSORXN_" - "_$S(PSOREF=0:"Original fill",1:"Refill "_PSOREF)_" copay charge cancelled" | 
|---|
|  | 156 | D SETSUMM^PSOCPC | 
|---|
|  | 157 | K PSOCOMM | 
|---|
|  | 158 | Q | 
|---|
|  | 159 | POTMSG ; | 
|---|
|  | 160 | S PSI=0 | 
|---|
|  | 161 | I $G(CANTYPE) Q  ; (MESSAGE WILL GET SET LATER) | 
|---|
|  | 162 | S PSOCOMM="Rx # "_PSORXN_" - "_$S(PSOREF=0:"Original fill",1:"Refill "_PSOREF)_" potential copay charge cancelled" | 
|---|
|  | 163 | D SETSUMM^PSOCPC | 
|---|
|  | 164 | K PSOCOMM | 
|---|
|  | 165 | Q | 
|---|
|  | 166 | MSGNOCAN ; | 
|---|
|  | 167 | S PSI=0 | 
|---|
|  | 168 | S PSOCOMM="Rx # "_PSORXN_" - All copay charges have already been cancelled." D SETSUMM^PSOCPC K PSOCOMM | 
|---|
|  | 169 | Q | 
|---|
|  | 170 | ; | 
|---|
|  | 171 | PRTSUMM ; prt sum of actions in reset/cancel | 
|---|
|  | 172 | I '$D(PSOSUMM) Q | 
|---|
|  | 173 | W ! | 
|---|
|  | 174 | S PSI="" | 
|---|
|  | 175 | F  S PSI=$O(PSOSUMM(PSI)) Q:PSI=""  W !,PSOSUMM(PSI) | 
|---|
|  | 176 | K PSOSUMM | 
|---|
|  | 177 | Q | 
|---|
|  | 178 | PREVCAN ; PREVIEW CANCELS IF "ALL" IS SELECTED | 
|---|
|  | 179 | N I,PSOBILL | 
|---|
|  | 180 | S I="" F  S I=$O(PSOCAN(I)) Q:I=""  D  I PSOBILL S X($P(PSOCAN(I),"^",1))=$P(PSOCAN(I),"^",2)_"^"_PSORSN | 
|---|
|  | 181 | . S PSOBILL=1 I $T(STATUS^IBARX)'="" I PSOCAN(I)'["CAP" S PSOBILL=$$STATUS^IBARX($P(PSOCAN(I),"^",2)) S:PSOBILL=2 PSOBILL=0 ; PREVIOUSLY CANCELLED | 
|---|
|  | 182 | I $O(X(""))="" D | 
|---|
|  | 183 | . I PSOPREV D MSG Q | 
|---|
|  | 184 | . D MSGNOCAN | 
|---|
|  | 185 | Q | 
|---|
|  | 186 | ; | 
|---|