PSOCIDC2 ;BIR/LE-continuation of Copay Correction of erroneous billed copays ;11/8/05 12:50pm
;;7.0;OUTPATIENT PHARMACY;**226,225**;DEC 1997;Build 29
;External reference to ^XUSEC supported by DBIA 10076
;External reference to IBARX supported by DBIA 125
;External reference to $$PROD^XUPROD(1) supported by DBIA 4440
;
TOTAL ;
N COUNT,COUNTED,UCOUNT,UCOUNTED,CCOUNT,CCOUNTED
I '$D(PSOVETS) S PSOVETS=0
N I,J
F I=1:1:3 S (PSOCNT("YR2004",I),PSOCNT("YR2005",I),PSOCNT("YR2006",I))=0
S PSODFN=0 F S PSODFN=$O(^XTMP(NAMSP,"TOT REL",PSODFN)) Q:'PSODFN D
.S COUNTED=0
.F J="YR2004","YR2005","YR2006" F I=1:1:3 S COUNT=$G(^XTMP(NAMSP,"TOT REL",PSODFN,J,I)) I COUNT>0 S:'$G(COUNTED) COUNTED=1,PSOVETS=PSOVETS+1 S PSOCNT(J,I)=PSOCNT(J,I)+COUNT
F I=1:1:3 S PSOCNT=PSOCNT+$G(PSOCNT("YR2004",I))+$G(PSOCNT("YR2005",I))+$G(PSOCNT("YR2006",I))
;
S (I,J)=-""
I '$D(PSOCVETS) S PSOCVETS=0
F I=1:1:3 S (PSOCCNT("YR2004",I),PSOCCNT("YR2005",I),PSOCCNT("YR2006",I))=0
S PSODFN=0 F S PSODFN=$O(^XTMP(NAMSP,"TOT CAN",PSODFN)) Q:'PSODFN D
.S CCOUNTED=0
.F J="YR2004","YR2005","YR2006" F I=1:1:3 S CCOUNT=$G(^XTMP(NAMSP,"TOT CAN",PSODFN,J,I)) I CCOUNT>0 S:'$G(CCOUNTED) CCOUNTED=1,PSOCVETS=PSOCVETS+1 S PSOCCNT(J,I)=PSOCCNT(J,I)+CCOUNT
F I=1:1:3 S PSOCCNT=PSOCCNT+$G(PSOCCNT("YR2004",I))+$G(PSOCCNT("YR2005",I))+$G(PSOCCNT("YR2006",I))
;
S (I,J)=""
I '$D(PSOUVETS) S PSOUVETS=0
F I=1:1:3 S (PSOUCNT("YR2004",I),PSOUCNT("YR2005",I),PSOUCNT("YR2006",I))=0
S PSOUDFN=0 F S PSOUDFN=$O(^XTMP(NAMSP,"TOT UNREL",PSOUDFN)) Q:'PSOUDFN D
.S UCOUNTED=0
.F J="YR2004","YR2005","YR2006" F I=1:1:3 S UCOUNT=$G(^XTMP(NAMSP,"TOT UNREL",PSOUDFN,J,I)) I UCOUNT>0 S:'$G(UCOUNTED) UCOUNTED=1,PSOUVETS=PSOUVETS+1 S PSOUCNT(J,I)=PSOUCNT(J,I)+UCOUNT
F I=1:1:3 S PSOUCNT=PSOUCNT+$G(PSOUCNT("YR2004",I))+$G(PSOUCNT("YR2005",I))+$G(PSOUCNT("YR2006",I))
;
Q
;
CHECK ;check for ICD and IB nodes
;
N PSOREF,PSOIB,PSOOICD,PSOBILLD
S PSOREF=YY
S PSOOICD=$P($G(^PSRX(RXP,"ICD",1,0)),"^",2,8)
; see if bill already exists
I PSOREF=0 D
. I +$P($G(^PSRX(RXP,"IB")),"^",2)>0 D CHKIB^PSOCP1
. S PSOREL=$P($G(^PSRX(RXP,2)),"^",13)
I PSOREF>0 D
. I +$G(^PSRX(RXP,1,PSOREF,"IB")) D CHKIB^PSOCP1
. S PSOREL=$P($G(^PSRX(RXP,1,YY,0)),"^",18)
I $G(PSOIB)=1!($G(PSOIB)=3) S PSOBILLD=1
; if billed/RELEASED and no IBQ node for both sc<50 and nsc
I $G(PSOBILLD)&('$D(^PSRX(RXP,"IBQ"))) D
. I $TR(PSOOICD,"^")[1 S ^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)=$P(PSOREL,".")_"^"_PSODT_"^"_PSOSCP
. I $TR(PSOOICD,"^")[0 S ^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)=$P(PSOREL,".")_"^"_PSODT_"^"_PSOSCP
; find unbilled ones with an ICD node and no IBQ node.
I '$G(PSOBILLD)&('$D(^PSRX(RXP,"IBQ"))) D
. Q:$TR(PSOOICD,"^")=""
. S ^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)=$P(PSOREL,".")_"^"_PSODT_"^"_PSOSCP
I YY S PSOTRF=PSOTRF+1
Q
;
CANCEL ;Cancel erroneous copays/set IBQ node if not there
;released rx's
N PSOCAP,PSODIV,PSODV,PSOFILL,PSOLOG,PSONAM,PSOOUT,PSOPAR,PSOPAR7,PSOSITE
N PSOSITE7,PSOSQ,PSOTOT,PSOYEAR,PSOYR,SSN,SAVCPUN,SAVREF,PSOIB,PSOOIBQ,PSONIBQ,PSOOICD,PSOOIB
N I,IFN,PSOANSQ,PSOTYP,COM,CC,PREA,PSONW,PSOOLD,PSOREL,PSO,PSOCPUN,PSOFLD,PSOTYPE,CANCEL
S PSOTYPE="CAN"
S PSODFN=0 F CC=1:1 S PSODFN=$O(^XTMP(NAMSP,"CANCEL",PSODFN)) Q:'PSODFN D Q:STOP
.I CC#100=0,$D(^XTMP(NAMSP,0,"STOP")) D Q
.. S $P(^XTMP(NAMSP,0,"LAST"),"^",1,2)="STOP^"_$$NOW^XLFDT,STOP=1
.S (PSOCAP(304),PSOCAP(305),PSOCAP(306))=0 ; INITIAL ANNUAL CAP FOR 2004 & 2005
.F RXP=0:0 S RXP=$O(^XTMP(NAMSP,"CANCEL",PSODFN,RXP)) Q:'RXP D
..S (SAVCPUN,PSOCPUN)=($P(^PSRX(RXP,0),"^",8)+29)\30
..S YY="" F S YY=$O(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)) Q:YY="" D
...S (SAVREF,PSOREF)=YY
...; verify again that it was billed and not already cancelled
...S PSOBILLD=0
...I YY=0,+$P($G(^PSRX(RXP,"IB")),"^",2)>0 D CHKIB^PSOCP1 I $G(PSOIB)=1!($G(PSOIB)=3) S PSOBILLD=1
...I YY>0,+$P($G(^PSRX(RXP,1,PSOREF,"IB")),"^")>0 D CHKIB^PSOCP1 I $G(PSOIB)=1!($G(PSOIB)=3) S PSOBILLD=1
...Q:'PSOBILLD
...S PSOREL=$P($G(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)),"^"),PSOFLD=$P($G(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)),"^",2),PSOSCP=$P($G(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)),"^",3)
...S PSO=3 D NOW^%DTC S PSODT=%,PSODA=RXP,PSOCOMM="-BKGD CIDC COPAY CANCEL",PSOOLD="",PSONW="",PREA=""
...D CHKACT
...S PSOIB="",PSOIB=$S(PSOREF>0:$G(^PSRX(RXP,1,YY,"IB")),'PSOREF:$G(^PSRX(PSODA,"IB")),1:"")
...S (PSOOIBQ,PSOOICD,PSOOIB)=""
...S PSOOICD=$P($G(^PSRX(RXP,"ICD",1,0)),"^",2,8),PSOOIB=$G(^PSRX(RXP,"IB")),PSOOIBQ=$G(^PSRX(RXP,"IBQ"))
...I PSOOIBQ=""&($TR(PSOOICD,"^")[0!($TR(PSOOICD,"^")[1)) D SETIBQ
...D SITE S PSOCOMM="-BKGD CIDC COPAY CANCEL" D RXED^PSOCPA S:PSOOICD[1&($D(^PSRX(RXP,"IB"))) $P(^PSRX(RXP,"IB"),"^")=""
...S PSOCPUN=SAVCPUN,PSOREF=SAVREF
...D ACCUM
;
;ICD NODES WITHOUT IBQ NODE; set IBQ node but only set 1st piece of IB node if unreleased.
S PSOTYP="IBQ"
S PSODFN=0 F CC=1:1 S PSODFN=$O(^XTMP(NAMSP,"NOIBQ",PSODFN)) Q:'PSODFN D Q:STOP
.I CC#100=0,$D(^XTMP(NAMSP,0,"STOP")) D Q
.. S $P(^XTMP(NAMSP,0,"LAST"),"^",1,2)="STOP^"_$$NOW^XLFDT,STOP=1
.S (PSOCAP(304),PSOCAP(305),PSOCAP(306))=0 ; INITIAL ANNUAL CAP FOR 2004 & 2005
.F RXP=0:0 S RXP=$O(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP)) Q:'RXP D
..S (SAVCPUN,PSOCPUN)=($P(^PSRX(RXP,0),"^",8)+29)\30
..S YY="" F S YY=$O(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)) Q:YY="" D
...S (SAVREF,PSOREF)=YY
...D SITE
...S PSOREL=$P($G(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)),"^"),PSOFLD=$P($G(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)),"^",2),PSOSCP=$P($G(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)),"^",3)
...S (PSOOIBQ,PSOOICD,PSOOIB)=""
...S PSOOICD=$P($G(^PSRX(RXP,"ICD",1,0)),"^",2,8),PSOOIB=$G(^PSRX(RXP,"IB")),PSOOIBQ=$G(^PSRX(RXP,"IBQ"))
...I PSOOIBQ=""&($TR(PSOOICD,"^")[0!($TR(PSOOICD,"^")[1)) D SETIBQ D ;don't want to set again if already did it as part of copay cancel
....S I="",IFN=0 F I=0:0 S I=$O(^PSRX(RXP,"A",I)) Q:'I S IFN=I
....S COM=" BKGD CIDC UPDATE"
....D NOW^%DTC S IFN=IFN+1,^PSRX(RXP,"A",0)="^52.3DA^"_IFN_"^"_IFN,^PSRX(RXP,"A",IFN,0)=%_"^I^.5^"_YY_"^"_COM
....K DA
....S:PSOOICD[1&($D(^PSRX(RXP,"IB"))) $P(^PSRX(RXP,"IB"),"^")=""
...D:'$G(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)) ACCUM
...S PSOCPUN=SAVCPUN,PSOREF=SAVREF
Q
;
CHKACT ;check activity log for prev entry
N ZACT,ZPSI,ZACTI
S ZPSI=0 F S ZPSI=$O(^PSRX(PSODA,"COPAY",ZPSI)) Q:ZPSI="" S ZACTI="",ZACTI=$G(^PSRX(PSODA,"COPAY",ZPSI,0)) D Q:$G(ZACT)
. I ZACTI["BKGD CIDC COPAY CANCEL"&($P(ZACTI,"^",2)="R") S PSOOLD="",PSONW="",PREA="C",ZACT=1 Q
I '$G(ZACT) S PSOOLD="Copay",PSONW="No Copay",PREA="R" K PSOREF D ACTLOG^PSOCPA S PSOREF=YY,PSOOLD="",PSONW="",PREA="C"
Q
;
SETIBQ ; get data from IBQ node, set IBQ node, and 1st piece of IB node
K PSOANSQ
N PSONIBQ
F PSOTYP=1:1:8 D
. I PSOTYP=1 S PSOANSQ("VEH")=$P(PSOOICD,"^",PSOTYP)
. I PSOTYP=2 S PSOANSQ("RAD")=$P(PSOOICD,"^",PSOTYP)
. I PSOTYP=3 S PSOANSQ("SC")=$P(PSOOICD,"^",PSOTYP)
. I PSOTYP=4 S PSOANSQ("PGW")=$P(PSOOICD,"^",PSOTYP)
. I PSOTYP=5 S PSOANSQ("MST")=$P(PSOOICD,"^",PSOTYP)
. I PSOTYP=6 S PSOANSQ("HNC")=$P(PSOOICD,"^",PSOTYP)
. I PSOTYP=7 S PSOANSQ("CV")=$P(PSOOICD,"^",PSOTYP)
. I PSOTYP=8 S PSOANSQ("SHAD")=$P(PSOOICD,"^",PSOTYP)
S ^PSRX(RXP,"IBQ")=PSOANSQ("SC")_"^"_PSOANSQ("MST")_"^"_PSOANSQ("VEH")_"^"_PSOANSQ("RAD")_"^"_PSOANSQ("PGW")_"^"_PSOANSQ("HNC")_"^"_PSOANSQ("CV")_"^"_PSOANSQ("SHAD")
Q
;
ACCUM ; ACCUMULATE TOTALS
S (PSOTOT,PSOYR,PSOYEAR,PSOLOG,PSONAM,PSOCHRG)=""
; get finished, but unreleased totals
I PSOREL="" S PSOYR=$E(PSOFLD,1,3) Q:PSOYR="" D S PSOYEAR="" Q
.S PSOYEAR=$S(PSOYR="304":"YR2004",PSOYR="305":"YR2005",PSOYR="306":"YR2006",1:"") Q:PSOYEAR=""
.S PSOCHRG=7
.I PSOYEAR="YR2006" S PSOCHRG=8
.S PSOTOT=$G(^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR))
.S ^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR)=PSOTOT+(PSOCPUN*PSOCHRG)
.S ^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR,PSOCPUN)=$G(^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR,PSOCPUN))+1
.S PSONAM=$P($G(^DPT(PSODFN,0)),"^"),PSONAM=$P(PSONAM,",")
.S PSONAM=$E(PSONAM,1,6)
.S ^XTMP(NAMSP,"IBQ UPD",PSONAM,PSODFN,RXP,PSOREF)=PSOFLD
;for released ones
S PSOYR=$E(PSOREL,1,3)
S:PSOYR'="" PSOYEAR=$S(PSOYR="304":"YR2004",PSOYR="305":"YR2005",PSOYR="306":"YR2006",1:"")
Q:PSOYEAR=""
S PSOCHRG=7
I PSOYEAR="YR2006" S PSOCHRG=8
;
;get Xtmp billing amt which would be IBAM tot + any previous refills
S PSOTOT=$G(^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR))
;
;if none yet then init to the IBAM total for the year
I 'PSOTOT D
.F PSOSQ=0:0 S PSOSQ=$O(^IBAM(354.7,PSODFN,1,PSOSQ)) Q:'PSOSQ D
..S PSOLOG=$G(^IBAM(354.7,PSODFN,1,PSOSQ,0))
..I $E(PSOLOG,1,3)=PSOYR S PSOTOT=PSOTOT+$P(PSOLOG,"^",2)
;
;update Xtmp tot nodes with current fill amounts
; note: cancel copays and updated IBQ node released prescription are collected under TOT REL for the RPT^PSOCIDC3
; routine. Cancelled copays are denoted with an asterisk.
S ^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR)=PSOTOT+(PSOCPUN*PSOCHRG)
S ^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR,PSOCPUN)=$G(^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR,PSOCPUN))+1
;
;indicate COPAY CANCEL for this fill
; ;by adding to Xtmp "BILLED"
S PSONAM=$P($G(^DPT(PSODFN,0)),"^"),PSONAM=$P(PSONAM,",")
S PSONAM=$E(PSONAM,1,6)
S ^XTMP(NAMSP,"REL",PSONAM,PSODFN,RXP,PSOREF)=PSOREL
;
CAN I PSOTYPE="CAN"&($G(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY))) N PSOFILL S CANCEL="" S PSOFILL=YY D CHK^PSOCIDC3 I CANCEL D
. S ^XTMP(NAMSP,"TOT CAN",PSODFN,PSOYEAR)=PSOTOT+(PSOCPUN*PSOCHRG)
. S ^XTMP(NAMSP,"TOT CAN",PSODFN,PSOYEAR,PSOCPUN)=$G(^XTMP(NAMSP,"TOT CAN",PSODFN,PSOYEAR,PSOCPUN))+1
Q
;
SITE ; SET UP VARIABLES NEEDED BY BILLING
S PSOSITE=$S(YY=0:$P(^PSRX(RXP,2),"^",9),1:$P($G(^PSRX(RXP,1,YY,0)),"^",9))
Q:PSOSITE=""
S PSOPAR=$G(^PS(59,PSOSITE,1))
S PSOPAR7=$G(^PS(59,PSOSITE,"IB"))
S PSOSITE7=$P($G(^PS(59,PSOSITE,"IB")),"^")
Q
;
PSOCIDC2 ;BIR/LE-continuation of Copay Correction of erroneous billed copays ;11/8/05 12:50pm
+1 ;;7.0;OUTPATIENT PHARMACY;**226,225**;DEC 1997;Build 29
+2 ;External reference to ^XUSEC supported by DBIA 10076
+3 ;External reference to IBARX supported by DBIA 125
+4 ;External reference to $$PROD^XUPROD(1) supported by DBIA 4440
+5 ;
TOTAL ;
+1 NEW COUNT,COUNTED,UCOUNT,UCOUNTED,CCOUNT,CCOUNTED
+2 IF '$DATA(PSOVETS)
SET PSOVETS=0
+3 NEW I,J
+4 FOR I=1:1:3
SET (PSOCNT("YR2004",I),PSOCNT("YR2005",I),PSOCNT("YR2006",I))=0
+5 SET PSODFN=0
FOR
SET PSODFN=$ORDER(^XTMP(NAMSP,"TOT REL",PSODFN))
IF 'PSODFN
QUIT
Begin DoDot:1
+6 SET COUNTED=0
+7 FOR J="YR2004","YR2005","YR2006"
FOR I=1:1:3
SET COUNT=$GET(^XTMP(NAMSP,"TOT REL",PSODFN,J,I))
IF COUNT>0
IF '$GET(COUNTED)
SET COUNTED=1
SET PSOVETS=PSOVETS+1
SET PSOCNT(J,I)=PSOCNT(J,I)+COUNT
End DoDot:1
+8 FOR I=1:1:3
SET PSOCNT=PSOCNT+$GET(PSOCNT("YR2004",I))+$GET(PSOCNT("YR2005",I))+$GET(PSOCNT("YR2006",I))
+9 ;
+10 SET (I,J)=-""
+11 IF '$DATA(PSOCVETS)
SET PSOCVETS=0
+12 FOR I=1:1:3
SET (PSOCCNT("YR2004",I),PSOCCNT("YR2005",I),PSOCCNT("YR2006",I))=0
+13 SET PSODFN=0
FOR
SET PSODFN=$ORDER(^XTMP(NAMSP,"TOT CAN",PSODFN))
IF 'PSODFN
QUIT
Begin DoDot:1
+14 SET CCOUNTED=0
+15 FOR J="YR2004","YR2005","YR2006"
FOR I=1:1:3
SET CCOUNT=$GET(^XTMP(NAMSP,"TOT CAN",PSODFN,J,I))
IF CCOUNT>0
IF '$GET(CCOUNTED)
SET CCOUNTED=1
SET PSOCVETS=PSOCVETS+1
SET PSOCCNT(J,I)=PSOCCNT(J,I)+CCOUNT
End DoDot:1
+16 FOR I=1:1:3
SET PSOCCNT=PSOCCNT+$GET(PSOCCNT("YR2004",I))+$GET(PSOCCNT("YR2005",I))+$GET(PSOCCNT("YR2006",I))
+17 ;
+18 SET (I,J)=""
+19 IF '$DATA(PSOUVETS)
SET PSOUVETS=0
+20 FOR I=1:1:3
SET (PSOUCNT("YR2004",I),PSOUCNT("YR2005",I),PSOUCNT("YR2006",I))=0
+21 SET PSOUDFN=0
FOR
SET PSOUDFN=$ORDER(^XTMP(NAMSP,"TOT UNREL",PSOUDFN))
IF 'PSOUDFN
QUIT
Begin DoDot:1
+22 SET UCOUNTED=0
+23 FOR J="YR2004","YR2005","YR2006"
FOR I=1:1:3
SET UCOUNT=$GET(^XTMP(NAMSP,"TOT UNREL",PSOUDFN,J,I))
IF UCOUNT>0
IF '$GET(UCOUNTED)
SET UCOUNTED=1
SET PSOUVETS=PSOUVETS+1
SET PSOUCNT(J,I)=PSOUCNT(J,I)+UCOUNT
End DoDot:1
+24 FOR I=1:1:3
SET PSOUCNT=PSOUCNT+$GET(PSOUCNT("YR2004",I))+$GET(PSOUCNT("YR2005",I))+$GET(PSOUCNT("YR2006",I))
+25 ;
+26 QUIT
+27 ;
CHECK ;check for ICD and IB nodes
+1 ;
+2 NEW PSOREF,PSOIB,PSOOICD,PSOBILLD
+3 SET PSOREF=YY
+4 SET PSOOICD=$PIECE($GET(^PSRX(RXP,"ICD",1,0)),"^",2,8)
+5 ; see if bill already exists
+6 IF PSOREF=0
Begin DoDot:1
+7 IF +$PIECE($GET(^PSRX(RXP,"IB")),"^",2)>0
DO CHKIB^PSOCP1
+8 SET PSOREL=$PIECE($GET(^PSRX(RXP,2)),"^",13)
End DoDot:1
+9 IF PSOREF>0
Begin DoDot:1
+10 IF +$GET(^PSRX(RXP,1,PSOREF,"IB"))
DO CHKIB^PSOCP1
+11 SET PSOREL=$PIECE($GET(^PSRX(RXP,1,YY,0)),"^",18)
End DoDot:1
+12 IF $GET(PSOIB)=1!($GET(PSOIB)=3)
SET PSOBILLD=1
+13 ; if billed/RELEASED and no IBQ node for both sc<50 and nsc
+14 IF $GET(PSOBILLD)&('$DATA(^PSRX(RXP,"IBQ")))
Begin DoDot:1
+15 IF $TRANSLATE(PSOOICD,"^")[1
SET ^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)=$PIECE(PSOREL,".")_"^"_PSODT_"^"_PSOSCP
+16 IF $TRANSLATE(PSOOICD,"^")[0
SET ^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)=$PIECE(PSOREL,".")_"^"_PSODT_"^"_PSOSCP
End DoDot:1
+17 ; find unbilled ones with an ICD node and no IBQ node.
+18 IF '$GET(PSOBILLD)&('$DATA(^PSRX(RXP,"IBQ")))
Begin DoDot:1
+19 IF $TRANSLATE(PSOOICD,"^")=""
QUIT
+20 SET ^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)=$PIECE(PSOREL,".")_"^"_PSODT_"^"_PSOSCP
End DoDot:1
+21 IF YY
SET PSOTRF=PSOTRF+1
+22 QUIT
+23 ;
CANCEL ;Cancel erroneous copays/set IBQ node if not there
+1 ;released rx's
+2 NEW PSOCAP,PSODIV,PSODV,PSOFILL,PSOLOG,PSONAM,PSOOUT,PSOPAR,PSOPAR7,PSOSITE
+3 NEW PSOSITE7,PSOSQ,PSOTOT,PSOYEAR,PSOYR,SSN,SAVCPUN,SAVREF,PSOIB,PSOOIBQ,PSONIBQ,PSOOICD,PSOOIB
+4 NEW I,IFN,PSOANSQ,PSOTYP,COM,CC,PREA,PSONW,PSOOLD,PSOREL,PSO,PSOCPUN,PSOFLD,PSOTYPE,CANCEL
+5 SET PSOTYPE="CAN"
+6 SET PSODFN=0
FOR CC=1:1
SET PSODFN=$ORDER(^XTMP(NAMSP,"CANCEL",PSODFN))
IF 'PSODFN
QUIT
Begin DoDot:1
+7 IF CC#100=0
IF $DATA(^XTMP(NAMSP,0,"STOP"))
Begin DoDot:2
+8 SET $PIECE(^XTMP(NAMSP,0,"LAST"),"^",1,2)="STOP^"_$$NOW^XLFDT
SET STOP=1
End DoDot:2
QUIT
+9 ; INITIAL ANNUAL CAP FOR 2004 & 2005
SET (PSOCAP(304),PSOCAP(305),PSOCAP(306))=0
+10 FOR RXP=0:0
SET RXP=$ORDER(^XTMP(NAMSP,"CANCEL",PSODFN,RXP))
IF 'RXP
QUIT
Begin DoDot:2
+11 SET (SAVCPUN,PSOCPUN)=($PIECE(^PSRX(RXP,0),"^",8)+29)\30
+12 SET YY=""
FOR
SET YY=$ORDER(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY))
IF YY=""
QUIT
Begin DoDot:3
+13 SET (SAVREF,PSOREF)=YY
+14 ; verify again that it was billed and not already cancelled
+15 SET PSOBILLD=0
+16 IF YY=0
IF +$PIECE($GET(^PSRX(RXP,"IB")),"^",2)>0
DO CHKIB^PSOCP1
IF $GET(PSOIB)=1!($GET(PSOIB)=3)
SET PSOBILLD=1
+17 IF YY>0
IF +$PIECE($GET(^PSRX(RXP,1,PSOREF,"IB")),"^")>0
DO CHKIB^PSOCP1
IF $GET(PSOIB)=1!($GET(PSOIB)=3)
SET PSOBILLD=1
+18 IF 'PSOBILLD
QUIT
+19 SET PSOREL=$PIECE($GET(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)),"^")
SET PSOFLD=$PIECE($GET(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)),"^",2)
SET PSOSCP=$PIECE($GET(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)),"^",3)
+20 SET PSO=3
DO NOW^%DTC
SET PSODT=%
SET PSODA=RXP
SET PSOCOMM="-BKGD CIDC COPAY CANCEL"
SET PSOOLD=""
SET PSONW=""
SET PREA=""
+21 DO CHKACT
+22 SET PSOIB=""
SET PSOIB=$SELECT(PSOREF>0:$GET(^PSRX(RXP,1,YY,"IB")),'PSOREF:$GET(^PSRX(PSODA,"IB")),1:"")
+23 SET (PSOOIBQ,PSOOICD,PSOOIB)=""
+24 SET PSOOICD=$PIECE($GET(^PSRX(RXP,"ICD",1,0)),"^",2,8)
SET PSOOIB=$GET(^PSRX(RXP,"IB"))
SET PSOOIBQ=$GET(^PSRX(RXP,"IBQ"))
+25 IF PSOOIBQ=""&($TRANSLATE(PSOOICD,"^")[0!($TRANSLATE(PSOOICD,"^")[1))
DO SETIBQ
+26 DO SITE
SET PSOCOMM="-BKGD CIDC COPAY CANCEL"
DO RXED^PSOCPA
IF PSOOICD[1&($DATA(^PSRX(RXP,"IB")))
SET $PIECE(^PSRX(RXP,"IB"),"^")=""
+27 SET PSOCPUN=SAVCPUN
SET PSOREF=SAVREF
+28 DO ACCUM
End DoDot:3
End DoDot:2
End DoDot:1
IF STOP
QUIT
+29 ;
+30 ;ICD NODES WITHOUT IBQ NODE; set IBQ node but only set 1st piece of IB node if unreleased.
+31 SET PSOTYP="IBQ"
+32 SET PSODFN=0
FOR CC=1:1
SET PSODFN=$ORDER(^XTMP(NAMSP,"NOIBQ",PSODFN))
IF 'PSODFN
QUIT
Begin DoDot:1
+33 IF CC#100=0
IF $DATA(^XTMP(NAMSP,0,"STOP"))
Begin DoDot:2
+34 SET $PIECE(^XTMP(NAMSP,0,"LAST"),"^",1,2)="STOP^"_$$NOW^XLFDT
SET STOP=1
End DoDot:2
QUIT
+35 ; INITIAL ANNUAL CAP FOR 2004 & 2005
SET (PSOCAP(304),PSOCAP(305),PSOCAP(306))=0
+36 FOR RXP=0:0
SET RXP=$ORDER(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP))
IF 'RXP
QUIT
Begin DoDot:2
+37 SET (SAVCPUN,PSOCPUN)=($PIECE(^PSRX(RXP,0),"^",8)+29)\30
+38 SET YY=""
FOR
SET YY=$ORDER(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY))
IF YY=""
QUIT
Begin DoDot:3
+39 SET (SAVREF,PSOREF)=YY
+40 DO SITE
+41 SET PSOREL=$PIECE($GET(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)),"^")
SET PSOFLD=$PIECE($GET(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)),"^",2)
SET PSOSCP=$PIECE($GET(^XTMP(NAMSP,"NOIBQ",PSODFN,RXP,YY)),"^",3)
+42 SET (PSOOIBQ,PSOOICD,PSOOIB)=""
+43 SET PSOOICD=$PIECE($GET(^PSRX(RXP,"ICD",1,0)),"^",2,8)
SET PSOOIB=$GET(^PSRX(RXP,"IB"))
SET PSOOIBQ=$GET(^PSRX(RXP,"IBQ"))
+44 ;don't want to set again if already did it as part of copay cancel
IF PSOOIBQ=""&($TRANSLATE(PSOOICD,"^")[0!($TRANSLATE(PSOOICD,"^")[1))
DO SETIBQ
Begin DoDot:4
+45 SET I=""
SET IFN=0
FOR I=0:0
SET I=$ORDER(^PSRX(RXP,"A",I))
IF 'I
QUIT
SET IFN=I
+46 SET COM=" BKGD CIDC UPDATE"
+47 DO NOW^%DTC
SET IFN=IFN+1
SET ^PSRX(RXP,"A",0)="^52.3DA^"_IFN_"^"_IFN
SET ^PSRX(RXP,"A",IFN,0)=%_"^I^.5^"_YY_"^"_COM
+48 KILL DA
+49 IF PSOOICD[1&($DATA(^PSRX(RXP,"IB")))
SET $PIECE(^PSRX(RXP,"IB"),"^")=""
End DoDot:4
+50 IF '$GET(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY))
DO ACCUM
+51 SET PSOCPUN=SAVCPUN
SET PSOREF=SAVREF
End DoDot:3
End DoDot:2
End DoDot:1
IF STOP
QUIT
+52 QUIT
+53 ;
CHKACT ;check activity log for prev entry
+1 NEW ZACT,ZPSI,ZACTI
+2 SET ZPSI=0
FOR
SET ZPSI=$ORDER(^PSRX(PSODA,"COPAY",ZPSI))
IF ZPSI=""
QUIT
SET ZACTI=""
SET ZACTI=$GET(^PSRX(PSODA,"COPAY",ZPSI,0))
Begin DoDot:1
+3 IF ZACTI["BKGD CIDC COPAY CANCEL"&($PIECE(ZACTI,"^",2)="R")
SET PSOOLD=""
SET PSONW=""
SET PREA="C"
SET ZACT=1
QUIT
End DoDot:1
IF $GET(ZACT)
QUIT
+4 IF '$GET(ZACT)
SET PSOOLD="Copay"
SET PSONW="No Copay"
SET PREA="R"
KILL PSOREF
DO ACTLOG^PSOCPA
SET PSOREF=YY
SET PSOOLD=""
SET PSONW=""
SET PREA="C"
+5 QUIT
+6 ;
SETIBQ ; get data from IBQ node, set IBQ node, and 1st piece of IB node
+1 KILL PSOANSQ
+2 NEW PSONIBQ
+3 FOR PSOTYP=1:1:8
Begin DoDot:1
+4 IF PSOTYP=1
SET PSOANSQ("VEH")=$PIECE(PSOOICD,"^",PSOTYP)
+5 IF PSOTYP=2
SET PSOANSQ("RAD")=$PIECE(PSOOICD,"^",PSOTYP)
+6 IF PSOTYP=3
SET PSOANSQ("SC")=$PIECE(PSOOICD,"^",PSOTYP)
+7 IF PSOTYP=4
SET PSOANSQ("PGW")=$PIECE(PSOOICD,"^",PSOTYP)
+8 IF PSOTYP=5
SET PSOANSQ("MST")=$PIECE(PSOOICD,"^",PSOTYP)
+9 IF PSOTYP=6
SET PSOANSQ("HNC")=$PIECE(PSOOICD,"^",PSOTYP)
+10 IF PSOTYP=7
SET PSOANSQ("CV")=$PIECE(PSOOICD,"^",PSOTYP)
+11 IF PSOTYP=8
SET PSOANSQ("SHAD")=$PIECE(PSOOICD,"^",PSOTYP)
End DoDot:1
+12 SET ^PSRX(RXP,"IBQ")=PSOANSQ("SC")_"^"_PSOANSQ("MST")_"^"_PSOANSQ("VEH")_"^"_PSOANSQ("RAD")_"^"_PSOANSQ("PGW")_"^"_PSOANSQ("HNC")_"^"_PSOANSQ("CV")_"^"_PSOANSQ("SHAD")
+13 QUIT
+14 ;
ACCUM ; ACCUMULATE TOTALS
+1 SET (PSOTOT,PSOYR,PSOYEAR,PSOLOG,PSONAM,PSOCHRG)=""
+2 ; get finished, but unreleased totals
+3 IF PSOREL=""
SET PSOYR=$EXTRACT(PSOFLD,1,3)
IF PSOYR=""
QUIT
Begin DoDot:1
+4 SET PSOYEAR=$SELECT(PSOYR="304":"YR2004",PSOYR="305":"YR2005",PSOYR="306":"YR2006",1:"")
IF PSOYEAR=""
QUIT
+5 SET PSOCHRG=7
+6 IF PSOYEAR="YR2006"
SET PSOCHRG=8
+7 SET PSOTOT=$GET(^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR))
+8 SET ^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR)=PSOTOT+(PSOCPUN*PSOCHRG)
+9 SET ^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR,PSOCPUN)=$GET(^XTMP(NAMSP,"TOT UNREL",PSODFN,PSOYEAR,PSOCPUN))+1
+10 SET PSONAM=$PIECE($GET(^DPT(PSODFN,0)),"^")
SET PSONAM=$PIECE(PSONAM,",")
+11 SET PSONAM=$EXTRACT(PSONAM,1,6)
+12 SET ^XTMP(NAMSP,"IBQ UPD",PSONAM,PSODFN,RXP,PSOREF)=PSOFLD
End DoDot:1
SET PSOYEAR=""
QUIT
+13 ;for released ones
+14 SET PSOYR=$EXTRACT(PSOREL,1,3)
+15 IF PSOYR'=""
SET PSOYEAR=$SELECT(PSOYR="304":"YR2004",PSOYR="305":"YR2005",PSOYR="306":"YR2006",1:"")
+16 IF PSOYEAR=""
QUIT
+17 SET PSOCHRG=7
+18 IF PSOYEAR="YR2006"
SET PSOCHRG=8
+19 ;
+20 ;get Xtmp billing amt which would be IBAM tot + any previous refills
+21 SET PSOTOT=$GET(^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR))
+22 ;
+23 ;if none yet then init to the IBAM total for the year
+24 IF 'PSOTOT
Begin DoDot:1
+25 FOR PSOSQ=0:0
SET PSOSQ=$ORDER(^IBAM(354.7,PSODFN,1,PSOSQ))
IF 'PSOSQ
QUIT
Begin DoDot:2
+26 SET PSOLOG=$GET(^IBAM(354.7,PSODFN,1,PSOSQ,0))
+27 IF $EXTRACT(PSOLOG,1,3)=PSOYR
SET PSOTOT=PSOTOT+$PIECE(PSOLOG,"^",2)
End DoDot:2
End DoDot:1
+28 ;
+29 ;update Xtmp tot nodes with current fill amounts
+30 ; note: cancel copays and updated IBQ node released prescription are collected under TOT REL for the RPT^PSOCIDC3
+31 ; routine. Cancelled copays are denoted with an asterisk.
+32 SET ^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR)=PSOTOT+(PSOCPUN*PSOCHRG)
+33 SET ^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR,PSOCPUN)=$GET(^XTMP(NAMSP,"TOT REL",PSODFN,PSOYEAR,PSOCPUN))+1
+34 ;
+35 ;indicate COPAY CANCEL for this fill
+36 ; ;by adding to Xtmp "BILLED"
+37 SET PSONAM=$PIECE($GET(^DPT(PSODFN,0)),"^")
SET PSONAM=$PIECE(PSONAM,",")
+38 SET PSONAM=$EXTRACT(PSONAM,1,6)
+39 SET ^XTMP(NAMSP,"REL",PSONAM,PSODFN,RXP,PSOREF)=PSOREL
+40 ;
CAN IF PSOTYPE="CAN"&($GET(^XTMP(NAMSP,"CANCEL",PSODFN,RXP,YY)))
NEW PSOFILL
SET CANCEL=""
SET PSOFILL=YY
DO CHK^PSOCIDC3
IF CANCEL
Begin DoDot:1
+1 SET ^XTMP(NAMSP,"TOT CAN",PSODFN,PSOYEAR)=PSOTOT+(PSOCPUN*PSOCHRG)
+2 SET ^XTMP(NAMSP,"TOT CAN",PSODFN,PSOYEAR,PSOCPUN)=$GET(^XTMP(NAMSP,"TOT CAN",PSODFN,PSOYEAR,PSOCPUN))+1
End DoDot:1
+3 QUIT
+4 ;
SITE ; SET UP VARIABLES NEEDED BY BILLING
+1 SET PSOSITE=$SELECT(YY=0:$PIECE(^PSRX(RXP,2),"^",9),1:$PIECE($GET(^PSRX(RXP,1,YY,0)),"^",9))
+2 IF PSOSITE=""
QUIT
+3 SET PSOPAR=$GET(^PS(59,PSOSITE,1))
+4 SET PSOPAR7=$GET(^PS(59,PSOSITE,"IB"))
+5 SET PSOSITE7=$PIECE($GET(^PS(59,PSOSITE,"IB")),"^")
+6 QUIT
+7 ;