| 1 | FBPCR ;AISC/DMK,GRR,TET-POTENTIAL COST RECOVERY OUTPUT DRIVER ;23 May 2006  10:06 AM
 | 
|---|
| 2 |  ;;3.5;FEE BASIS;**12,48,76,98**;JAN 30, 1995;Build 54
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 | DOC ;Refer to fbdoc, tag fbpcr, for documentation of fbpcr* routines
 | 
|---|
| 5 | PSF ;select one/many/all primary service failities
 | 
|---|
| 6 |  S FBARRLTC=""
 | 
|---|
| 7 |  W !! S DIC="^DIC(4,",VAUTSTR="Primary Service Facility",VAUTNI=2,VAUTVB="FBPSV" D FIRST^VAUTOMA K DIC I Y=-1 G EXIT
 | 
|---|
| 8 | ARRAY ;set fee program array for all programs
 | 
|---|
| 9 |  S FBPI=0 F  S FBPI=$O(^FBAA(161.8,FBPI)) Q:'FBPI  S FBPIN=$G(^(FBPI,0)) I $P(FBPIN,U,3) S FBPROG(FBPI)=$P(FBPIN,U)
 | 
|---|
| 10 |  I '$D(FBPROG) G EXIT
 | 
|---|
| 11 |  ;prepare array with LTC POV codes
 | 
|---|
| 12 |  D MKARRLTC^FBPCR4
 | 
|---|
| 13 |  ;what party to include
 | 
|---|
| 14 |  K DIR
 | 
|---|
| 15 |  S DIR(0)="SO^P:Patient;I:Insurance;B:Both",DIR("A")="Include (P)atient Co-pays / (I)nsurance / (B)oth",DIR("B")="Both"
 | 
|---|
| 16 |  S DIR("?")=" Select type of recover to include",DIR("?",1)=" P - include only recover from patient copays",DIR("?",2)=" I - include only recover from insurance",DIR("?",3)=" B - include both",DIR("L")=""
 | 
|---|
| 17 |  D ^DIR S FBPARTY=$S($G(Y(0))="Patient":1,$G(Y(0))="Insurance":2,$G(Y(0))="Both":3,X="Both":3,1:0)
 | 
|---|
| 18 |  K DIR
 | 
|---|
| 19 |  G:FBPARTY=0 EXIT
 | 
|---|
| 20 |  ;what type of copay to include
 | 
|---|
| 21 |  S FBCOPAY=3
 | 
|---|
| 22 |  I FBPARTY'=2 D
 | 
|---|
| 23 |  . S DIR(0)="SO^M:MeansTest;L:LTC;B:Both",DIR("A")="Include (M)eans Test Co-pays /(L)TC Co-pays /(B)oth",DIR("B")="Both"
 | 
|---|
| 24 |  . S DIR("?")=" Select services to include",DIR("?",1)=" M - include only Means Test copays",DIR("?",2)=" L - include only LTC copays",DIR("?",3)=" B - include both",DIR("L")=""
 | 
|---|
| 25 |  . D ^DIR S FBCOPAY=$S($G(Y(0))="LTC":1,$G(Y(0))="MeansTest":2,$G(Y(0))="Both":3,X="Both":3,1:0)
 | 
|---|
| 26 |  . K DIR
 | 
|---|
| 27 |  G:FBCOPAY=0 EXIT
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ;include patients if their insurance informations is unavailable?
 | 
|---|
| 30 |  S FBINCUNK=0
 | 
|---|
| 31 |  I FBPARTY=2!(FBPARTY=3) D
 | 
|---|
| 32 |  . S FBINCUNK=1
 | 
|---|
| 33 |  . N Y,X
 | 
|---|
| 34 |  . W !!
 | 
|---|
| 35 |  . S DIR("A")="Do you want to include patients whose insurance status is unavailable? "
 | 
|---|
| 36 |  . S DIR("?")="Please answer Yes or No."
 | 
|---|
| 37 |  . S DIR("B")="YES",DIR(0)="YA^^"
 | 
|---|
| 38 |  . D ^DIR K DIR
 | 
|---|
| 39 |  . I $G(DIRUT) S FBINCUNK=-1 Q
 | 
|---|
| 40 |  . I $G(Y)=0 S FBINCUNK=0
 | 
|---|
| 41 |  I FBINCUNK=-1 G EXIT ;uparrow - exit
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | DATE ;select date range
 | 
|---|
| 44 |  D DATE^FBAAUTL I FBPOP G PSF
 | 
|---|
| 45 |  S FBBDATE=BEGDATE,FBEDATE=ENDDATE
 | 
|---|
| 46 |  S Z=9999999.9999,FBBEG=Z-FBEDATE,FBEND=Z-FBBDATE
 | 
|---|
| 47 | Q K ^TMP($J,"FB"),^TMP($J,"FBINSIBAPI"),DIC
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  S VAR="FBINCUNK^FBARRLTC^FBARRLTC(^FBPARTY^FBCOPAY^FBNAME^FBIEN^FBID^FBBEG^FBEND^FBBDATE^FBEDATE^FBPSV^FBPSV(^FBPROG(",VAL=VAR,PGM="DQ^FBPCR",IOP="Q" D ZIS^FBAAUTL G:FBPOP EXIT
 | 
|---|
| 50 | DQ S $P(FBDASH,"=",80)="",$P(FBDASH1,"-",80)="",FBPG=0,FBCRT=$S($E(IOST,1,2)="C-":1,1:0),FBOUT=0,FBBEG=FBBEG-.9 U IO
 | 
|---|
| 51 | SORT ;sort driver for payment output(s)
 | 
|---|
| 52 |  S FBPI=0 F  S FBPI=$O(FBPROG(FBPI)) Q:'FBPI  S FBXPROG=FBPROG(FBPI) D
 | 
|---|
| 53 |  .I FBPI=2 D EN^FBPCR2 ;outpatient payments
 | 
|---|
| 54 |  .I FBPI=3 D EN^FBPCR3 ;pharmacy payments
 | 
|---|
| 55 |  .I FBPI=6!(FBPI=7) S:FBPI=6&($D(FBPROG(7))) FBPI=67 D EN^FBPCR67 S:FBPI=67 FBPI=7 ;civil hospital/cnh payments
 | 
|---|
| 56 | PRINT ;print driver for payment output(s)
 | 
|---|
| 57 |  I $G(^TMP($J,"FBINSIBAPI"))>0 D HDRUNK
 | 
|---|
| 58 |  S FBPI=$O(^TMP($J,"FB",0)) I FBPI']"" D WMSG G OUT
 | 
|---|
| 59 |  S FBSTA=0
 | 
|---|
| 60 |  S FBPSF=0 F  S FBPSF=$O(^TMP($J,"FB",FBPSF)) Q:'FBPSF!FBOUT  D STA S FBPT="" F  S FBPT=$O(^TMP($J,"FB",FBPSF,FBPT)) Q:FBPT']""!FBOUT  S DFN=$P(FBPT,";",2) D VET S FBPI=0 F  S FBPI=$O(FBPROG(FBPI)) Q:'FBPI  S FBXPROG=FBPROG(FBPI) D  Q:FBOUT
 | 
|---|
| 61 |  .I FBPSF_FBPT'=FBSTA D HDR Q:FBOUT
 | 
|---|
| 62 |  .I FBPI=2,$D(^TMP($J,"FB",FBPSF,FBPT,FBPI)) D PRINT^FBPCR2 Q
 | 
|---|
| 63 |  .I FBPI=3 D:$D(^TMP($J,"FB",FBPSF,FBPT,FBPI)) PRINT^FBPCR3 Q
 | 
|---|
| 64 |  .I FBPI=6!(FBPI=7) D:$D(^TMP($J,"FB",FBPSF,FBPT,FBPI)) PRINT^FBPCR671 Q
 | 
|---|
| 65 | OUT I $G(^TMP($J,"FBINSIBAPI"))>0 D ERRHDL^FBPCR4
 | 
|---|
| 66 |  I FBOUT!$D(ZTQUEUED) G EXIT
 | 
|---|
| 67 |  D EXIT G PSF
 | 
|---|
| 68 |  Q
 | 
|---|
| 69 | EXIT ;kill and quit
 | 
|---|
| 70 | KILL ;kill all variables set in the FBPCR* routines, other than fbx
 | 
|---|
| 71 |  D CLOSE^FBAAUTL K ^TMP($J,"FB")
 | 
|---|
| 72 |  K A1,A2,A3,BEGDATE,C,D,D2,DFN,DIC,DIR,DTOUT,DUOUT,ENDDATE,FBPDXC,FBPARTY,FBCOPAY,FBARRLTC,FBINCUNK
 | 
|---|
| 73 |  K FBAAA,FBAACPTC,FBAC,FBAP,FBBATCH,FBBDATE,FBBEG,FBBN,FBCATC,FBCNT,FBCP,FBCRT,FBDA1,FBDASH,FBDASH1,FBDATA,FBDOB,FBDRUG,FBDT,FBDT1,FBDOS,FBDX,FBDX1,FBEDATE,FBEND,FBERR,FBFD,FBFD1,FBHEAD
 | 
|---|
| 74 |  K FBI,FBID,FBIEN,FBIN,FBINS,FBINVN,FBIX,FBJ,FBLOC,FBM,FBNAME,FBOB,FBOPI,FBOUT,FBOV,FBP,FBPAT,FBPD,FBPDX,FBPG,FBPI,FBPID,FBPIN,FBPNAME,FBPROC,FBPROC1,FBPROG,FBPSF,FBPSFNAM,FBPSFNUM,FBPSV,FBPT,FBPV,FBQTY,FBREIM,FBRX
 | 
|---|
| 75 |  K FBSC,FBSL,FBSTA,FBSTR,FBSUSP,FBTA,FBTYPE,FBV,FBVCHAIN,FBVEN,FBVENID,FBVNAME,FBVI,FBVID,FBVP,FBXPROG,FBY,FBZ,I,IOP,J,K,L,M,N,PGM,T,V,VA,VAERR,VAL,VAR,VAUTNI,VAUTSTR,VAUTVB,X,Y,Z,FBSTANPI,FBXX
 | 
|---|
| 76 |  Q
 | 
|---|
| 77 | WMSG ;write message if no matches found
 | 
|---|
| 78 |  D HDR W !!?3,"There are no potential cost recoveries on file"
 | 
|---|
| 79 |  W !?5,"for specified date range:  ",$$DATX^FBAAUTL(FBBDATE)," through ",$$DATX^FBAAUTL(FBEDATE)
 | 
|---|
| 80 |  I 'FBPSV D
 | 
|---|
| 81 |  .W ",",!?5,"and selected Primary Service Area(s):"
 | 
|---|
| 82 |  .S FBPSF=0 F  S FBPSF=$O(FBPSV(FBPSF)) Q:'FBPSF  W !?31,$G(FBPSV(FBPSF))
 | 
|---|
| 83 |  E  W !?5,"and ALL Primary Service Areas "
 | 
|---|
| 84 |  W ".",*7,!!
 | 
|---|
| 85 |  Q
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | CATC(DFN,FBDT,FBPOV) ;
 | 
|---|
| 88 |  ;treats all copays as Means test for date < 3020705 (JULY 5,2002)
 | 
|---|
| 89 |  ;check if patient is liable for copay
 | 
|---|
| 90 |  ;INPUT:  
 | 
|---|
| 91 |  ; DFN = IEN of Patient file
 | 
|---|
| 92 |  ; FBDT= Date
 | 
|---|
| 93 |  ; FBPOV = POV code (for LTC determination)
 | 
|---|
| 94 |  ;OUTPUT:  
 | 
|---|
| 95 |  ;0 - the patient is not liable for any co-pay;
 | 
|---|
| 96 |  ;1 - if Means test catc or pending adjudication and agree to pay deduc
 | 
|---|
| 97 |  ;2 - the patient is liable for LTC co-pay;
 | 
|---|
| 98 |  ;3 - no 1010EC on file
 | 
|---|
| 99 |  ;4 - more analysis is needed to determine the patient liability
 | 
|---|
| 100 |  N FBLTC,FBISLTC
 | 
|---|
| 101 |  S FBCATC=$$BIL^DGMTUB(DFN,FBDT)
 | 
|---|
| 102 |  I '$D(FBPOV)!(FBDT<3020705) Q $S(FBCATC:1,1:0)
 | 
|---|
| 103 |  S FBISLTC=$$ISLTC^FBPCR4(FBPOV)
 | 
|---|
| 104 |  I FBISLTC=0 Q $S(FBCATC:1,1:0)  ;Means test
 | 
|---|
| 105 |  I FBISLTC=2 Q 0  ;LTC-service, but LTC-copay is not applicable
 | 
|---|
| 106 |  S FBLTC=$$LTCST^FBPCR4(DFN,FBDT)
 | 
|---|
| 107 |  I FBLTC=2 Q 2  ;LTC copay
 | 
|---|
| 108 |  I FBLTC=0 Q 3  ;no 1010EC on file
 | 
|---|
| 109 |  I FBLTC=4 Q 4  ;more info needed
 | 
|---|
| 110 |  Q 0  ;exemption from LTC -copay
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 | VET ;set vet name/ssn/dob info
 | 
|---|
| 113 |  ;INPUT:  DFN  = IEN of Patient file
 | 
|---|
| 114 |  ;      FBPI = IEN of fee program (optional)
 | 
|---|
| 115 |  ;OUTPUT:  FBPNAME = Patient's name
 | 
|---|
| 116 |  ;      FBPID   = Patient's pid
 | 
|---|
| 117 |  ;      FBDOB   = Patient's dob (if pharmacy fee program)
 | 
|---|
| 118 |  N N
 | 
|---|
| 119 |  S N=$G(^DPT(DFN,0)),FBPNAME=$P(N,U),FBPID=$$SSN^FBAAUTL(DFN),FBDOB=$$FMTE^XLFDT($P(N,U,3))
 | 
|---|
| 120 |  Q
 | 
|---|
| 121 | STA ;set station name & number
 | 
|---|
| 122 |  ;INPUT = FBPSF - IEN to institution file
 | 
|---|
| 123 |  ;OUTPUT = FBPSFNAM = station name
 | 
|---|
| 124 |  ;      FBPSFNUM = station number
 | 
|---|
| 125 |  S FBPSFNAM=$P($G(^DIC(4,FBPSF,0)),U),FBPSFNUM=$P($G(^DIC(4,FBPSF,99)),U)
 | 
|---|
| 126 |  S:FBPSFNAM=+FBPSFNAM FBPSFNAM="UNKNOWN"
 | 
|---|
| 127 |  S FBSTANPI=$S($G(FBPSFNAM)="":"",FBPSFNAM="UNKNOWN":"",1:$P($$NPI^XUSNPI("Organization_ID",FBPSF),U,1))
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 | PAGE ;form feed when new station/patient
 | 
|---|
| 130 |  S FBSTA=$G(FBPSF)_$G(FBPT)
 | 
|---|
| 131 |  I FBCRT&(FBPG'=0) D CR Q:FBOUT
 | 
|---|
| 132 |  I FBPG>0!FBCRT W @IOF
 | 
|---|
| 133 |  S FBPG=FBPG+1
 | 
|---|
| 134 |  Q
 | 
|---|
| 135 | CR ;read for display
 | 
|---|
| 136 |  S DIR(0)="E" W ! D ^DIR K DIR S:$D(DUOUT)!($D(DTOUT)) FBOUT=1
 | 
|---|
| 137 |  Q
 | 
|---|
| 138 | HDR ;general header for potential recoveries
 | 
|---|
| 139 |  D PAGE Q:FBOUT
 | 
|---|
| 140 |  W !?(IOM-30/2),"POTENTIAL COST RECOVERY REPORT"
 | 
|---|
| 141 |  W !?(IOM-(11+$L($G(FBPSFNAM))+$L($G(FBPSFNUM)))/2),"Division: ",$G(FBPSFNUM)," ",$G(FBPSFNAM)
 | 
|---|
| 142 |  W !?(IOM-14/2),"NPI: ",$S($G(FBSTANPI)="":"",$G(FBSTANPI)=-1:"",1:$G(FBSTANPI))
 | 
|---|
| 143 |  W !?(IOM-19/2),$$DATX^FBAAUTL(FBBDATE)," - ",$$DATX^FBAAUTL(FBEDATE)
 | 
|---|
| 144 |  W !?71,"Page: ",FBPG
 | 
|---|
| 145 |  W !,"Patient: ",$G(FBPNAME),?40,"Pat. ID: ",$G(FBPID),?62,"DOB: ",$G(FBDOB)
 | 
|---|
| 146 |  W !
 | 
|---|
| 147 |  I FBINCUNK=1,$D(^TMP($J,"FBINSIBAPI",+$G(DFN))) W ">> Warning: accurate insurance information for the patient is unavailable"
 | 
|---|
| 148 |  W !?3,"('*' Represents Reimbursement to Patient",?50,"'#' Represents Voided Payment)"
 | 
|---|
| 149 |  W !,FBDASH
 | 
|---|
| 150 |  W ! D:$D(DFN) INS^DGRPDB
 | 
|---|
| 151 |  Q
 | 
|---|
| 152 | HDRUNK ;Warning message if patient's insurance status is unknown
 | 
|---|
| 153 |  D PAGE Q:FBOUT
 | 
|---|
| 154 |  W !?(IOM-30/2),"POTENTIAL COST RECOVERY REPORT"
 | 
|---|
| 155 |  W !?(IOM-(11+$L($G(FBPSFNAM))+$L($G(FBPSFNUM)))/2),"Division: ",$G(FBPSFNUM)," ",$G(FBPSFNAM)
 | 
|---|
| 156 |  W !?(IOM-19/2),$$DATX^FBAAUTL(FBBDATE)," - ",$$DATX^FBAAUTL(FBEDATE)
 | 
|---|
| 157 |  W !?71,"Page: ",FBPG
 | 
|---|
| 158 |  W !,"------------------------------ !!! WARNING !!! --------------------------------"
 | 
|---|
| 159 |  W !,"This report is incomplete due to problems with obtaining insurance information"
 | 
|---|
| 160 |  W !,"for those patients listed in a separate section in the end of the report. You"
 | 
|---|
| 161 |  W !,"may want to rerun the report again to get more accurate results."
 | 
|---|
| 162 |  W !,FBDASH
 | 
|---|
| 163 |  I FBINCUNK=1 D
 | 
|---|
| 164 |  . W !,"Note: You have chosen to include patients with unknown insurance status in"
 | 
|---|
| 165 |  . W !,"this report. Please be aware that these patients will be treated as if they"
 | 
|---|
| 166 |  . W !,"have billable insurance and their treatment details will be marked accordingly."
 | 
|---|
| 167 |  . W !,"The names of these patients will be accompanied with the following message"
 | 
|---|
| 168 |  . W !,"to order to identify them:"
 | 
|---|
| 169 |  . W !,">> Warning: accurate insurance information for the patient is unavailable"
 | 
|---|
| 170 |  . W !,FBDASH
 | 
|---|
| 171 |  Q
 | 
|---|