| 1 | FBAAMP ;AISC/CMR-MULTIPLE PAYMENT ENTRY ;9/29/2003
 | 
|---|
| 2 |  ;;3.5;FEE BASIS;**4,21,38,55,61,67**;JAN 30, 1995
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  S FBMP=1 ;multiple payment flag
 | 
|---|
| 5 |  G ^FBAACO
 | 
|---|
| 6 | 1 ;return from FBAACO
 | 
|---|
| 7 |  D MMPPT^FBAACP G:$G(FBAAOUT) Q1
 | 
|---|
| 8 |  D MPDT I 'FBMPDT G Q1
 | 
|---|
| 9 |  K FBAAOUT W ! D CPTM^FBAALU(FBMPDT,DFN) I 'FBGOT G Q1
 | 
|---|
| 10 |  ; prompt revenue code
 | 
|---|
| 11 |  S FBAARC=$$ASKREVC^FBUTL5() I FBAARC="^" S FBAAOUT=1 G Q1
 | 
|---|
| 12 |  ; prompt units paid
 | 
|---|
| 13 |  S FBUNITS=$$ASKUNITS^FBUTL5() I FBUNITS="^" S FBAAOUT=1 G Q1
 | 
|---|
| 14 |  S FY=$E(DT,1,3)+1700+$S($E(DT,4,5)>9:1,1:0)
 | 
|---|
| 15 |  D ASKZIP^FBAAFS($G(FBV)) I $G(FBAAOUT)!($G(FBZIP)']"") G Q1
 | 
|---|
| 16 |  I $$ANES^FBAAFS($$CPT^FBAAUTL4(FBAACP)) D ASKTIME^FBAAFS I $G(FBAAOUT)!('$G(FBTIME)) G Q1
 | 
|---|
| 17 |  D HCFA^FBAAMP1 G Q1:$G(FBAAOUT)
 | 
|---|
| 18 | AMTCL S DIR(0)="162.03,1",DIR("A")="Amount Claimed:  $",DIR("?")="Enter the amount being claimed by the vendor" D ^DIR K DIR G Q:$D(DIRUT) S FBJ=+Y
 | 
|---|
| 19 |  W ! S DIR("A")="Is $"_FBJ_" correct for Amount Claimed",DIR("B")="Yes",DIR(0)="Y" D ^DIR K DIR G Q:$D(DIRUT),AMTCL:'Y
 | 
|---|
| 20 | RDAP D FEE G Q:$G(FBAAOUT) S FBK=FBAMTPD
 | 
|---|
| 21 |  W ! S DIR("A")="Is $"_FBK_" correct for Amount Paid",DIR("B")="Yes",DIR(0)="Y" D ^DIR K DIR G Q:$D(DIRUT),RDAP:'Y
 | 
|---|
| 22 |  S FBAAAS=0 K FBADJ I FBJ-FBK D SUSP^FBAAMP1 I $G(FBAAOUT) G Q:$D(DUOUT),Q1
 | 
|---|
| 23 |  S FBJ=+FBJ,FBK=+FBK,FBAAAS=+FBAAAS
 | 
|---|
| 24 |  ; prompt for remittance remarks
 | 
|---|
| 25 |  I $$RR^FBUTL4(.FBRRMK,2)=0 S FBAAOUT=1 G Q1
 | 
|---|
| 26 | MULT W:FBINTOT>0 !,"Invoice: "_FBAAIN_" Totals: $ "_FBINTOT
 | 
|---|
| 27 |  W !! S %DT("A")="Date of Service: ",%DT="AEPX" D ^%DT G Q1:X=""!(X="^")
 | 
|---|
| 28 |  D DATCK^FBAAUTL G MULT:'$D(X)!(Y<0)
 | 
|---|
| 29 |  S FBDT=Y
 | 
|---|
| 30 |  I '$$CHKCPT() W !,$C(7),"Invalid Date of Service." G MULT
 | 
|---|
| 31 |  I $$CHKICD9^FBCSV1(+$G(FBHCFA(28)),$G(FBDT))="" G MULT
 | 
|---|
| 32 |  I '$G(FBAAMM1),'$$CHKFS() W !,$C(7),"Invalid Date of Service." G MULT
 | 
|---|
| 33 |  S DIR(0)="Y",DIR("A")="Is "_($$DATX^FBAAUTL(FBDT))_" correct",DIR("B")="Yes" D ^DIR K DIR G MULT:$D(DIRUT)!('Y)
 | 
|---|
| 34 |  S FBAADT=FBDT
 | 
|---|
| 35 |  S FBMODL=$$MODL^FBAAUTL4("FBMODA","I")
 | 
|---|
| 36 |  I $D(^FBAAC("AE",DFN,FBV,FBAADT,FBAACP_$S($G(FBMODL)]"":"-"_FBMODL,1:""))) S DIR(0)="Y",DIR("A")="Code already exists for that date!  Want to add another service for the SAME DATE",DIR("B")="No" D ^DIR K DIR G MULT:$D(DIRUT)!('Y)
 | 
|---|
| 37 |  I FBFPPSC]"" S FBFPPSL=$$FPPSL^FBUTL5() I FBFPPSL=-1 G Q1
 | 
|---|
| 38 |  W !! D GETSVDT^FBAACO5(DFN,FBV,FBASSOC,0,FBAADT) G Q:$G(FBAAOUT)
 | 
|---|
| 39 |  D SETO^FBAACO3,SVCPR^FBAACO1 G Q:$G(FBAAOUT)
 | 
|---|
| 40 | FILE S TP="",DR="1///^S X=FBJ;Q;2///^S X=FBK;47///^S X=FBUNITS"
 | 
|---|
| 41 |  I FBCSID]"" S DR=DR_";49///^S X=FBCSID"
 | 
|---|
| 42 |  I FBFPPSC]"" S DR=DR_";50///^S X=FBFPPSC;51///^S X=FBFPPSL"
 | 
|---|
| 43 |  I FBAARC]"" S DR=DR_";48////^S X=FBAARC"
 | 
|---|
| 44 |  ;S DR=DR_$S(FBJ-FBK:";3///^S X=FBAAAS;3.5////^S X=DT;4////^S X=FBAASC;D DESC^FBAAMP1",1:"")
 | 
|---|
| 45 |  S DR(1,162.03,1)="6////^S X=DUZ;7////^S X=FBAABE;8////^S X=BO;13///^S X=FBAAID;14///^S X=FBAAIN;15///^S X=FBPT;16////^S X=FBPOV;17///^S X=FBTT;18///^S X=FBAAPTC;23////^S X=2;26////^S X=FBPSA"
 | 
|---|
| 46 |  S DR(1,162.03,2)="34///^S X=$G(FBAAMM1);28////^S X=FBHCFA(28);30////^S X=FBHCFA(30);31////^S X=FBHCFA(31);32////^S X=FBHCFA(32);33///^S X=FBAAVID;44///^S X=FBFSAMT;45////^S X=FBFSUSD"
 | 
|---|
| 47 |  S DIE="^FBAAC("_DFN_",1,"_FBV_",1,"_FBSDI_",1,"
 | 
|---|
| 48 |  S DA=FBAACPI,DA(1)=FBSDI,DA(2)=FBV,DA(3)=DFN
 | 
|---|
| 49 |  D LOCK^FBUCUTL(DIE,FBAACPI,1)
 | 
|---|
| 50 |  D ^DIE
 | 
|---|
| 51 |  D FILEADJ^FBAAFA(FBAACPI_","_FBSDI_","_FBV_","_DFN_",",.FBADJ)
 | 
|---|
| 52 |  D FILERR^FBAAFR(FBAACPI_","_FBSDI_","_FBV_","_DFN_",",.FBRRMK)
 | 
|---|
| 53 |  L -^FBAAC(DFN,1,FBV,1,FBSDI,1,FBAACPI)
 | 
|---|
| 54 |  S FBINTOT=FBINTOT+FBK
 | 
|---|
| 55 |  W " ....OK, DONE...."
 | 
|---|
| 56 |  I FBK>0 S Z1=$P(^FBAA(161.7,FBAABE,0),"^",11)+1,$P(^(0),"^",11)=Z1
 | 
|---|
| 57 |  W:Z1>(FBAAMPI-20) !,*7,"Warning, you can only enter ",(FBAAMPI-Z1)," more line items!" I Z1>(FBAAMPI-1) D  S FBMAX=1 G Q1
 | 
|---|
| 58 |  .W !!,*7,"You have reached the maximum number of payments for a Batch!",!,"You must select another Batch for entering Payments!"
 | 
|---|
| 59 |  G MULT
 | 
|---|
| 60 | Q1 K FBADJ,FBAADT,FBX,FBAACP,DIC,DIE,X,Y,DIRUT,DUOUT,DTOUT,FBOUT,FBSI,FBMPDT G ^FBAACO:$D(FBMAX),1^FBAACO
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | Q ;kill variables and exit
 | 
|---|
| 63 |  D Q^FBAACO
 | 
|---|
| 64 |  Q
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | MPDT ;
 | 
|---|
| 67 |  S FBMPDT=""
 | 
|---|
| 68 |  S DIR(0)="D^::EX"
 | 
|---|
| 69 |  S DIR("A")="Enter date to use for CPT/ICD checks and fee schedule calc"
 | 
|---|
| 70 |  S DIR("B")="TODAY"
 | 
|---|
| 71 |  S DIR("?",1)="Enter a date. This date will be used when checking for"
 | 
|---|
| 72 |  S DIR("?",2)="an active CPT/Modifier/ICD code. Also, the fee schedule"
 | 
|---|
| 73 |  S DIR("?",3)="amount will be computed based on this date."
 | 
|---|
| 74 |  S DIR("?")="Enter '^' to exit."
 | 
|---|
| 75 |  W !
 | 
|---|
| 76 |  D ^DIR K DIR S:'$D(DIRUT) FBMPDT=Y
 | 
|---|
| 77 |  Q
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | FEE N FBX,FB1725
 | 
|---|
| 80 |  ; set FB1725 flag = true if payment for a 38 U.S.C. 1725 claim
 | 
|---|
| 81 |  S FB1725=$S($G(FB583):+$P($G(^FB583(+FB583,0)),U,28),1:0)
 | 
|---|
| 82 |  S FBFY=FY-1
 | 
|---|
| 83 |  S (FBFSAMT,FBFSUSD,FBAMFS)=""
 | 
|---|
| 84 |  S FBX=$$GET^FBAAFS($$CPT^FBAAUTL4(FBAACP),$$MODL^FBAAUTL4("FBMODA","E"),FBMPDT,$G(FBZIP),$$FAC^FBAAFS($G(FBHCFA(30))),$G(FBTIME))
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  I '$G(FBAAMM1) D
 | 
|---|
| 87 |  . S FBFSAMT=$P(FBX,U),FBFSUSD=$P(FBX,U,2)
 | 
|---|
| 88 |  E  D
 | 
|---|
| 89 |  . W !,?2,"Payment is for a contracted service so fee schedule does not apply."
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  I $P($G(FBX),U)]"" D
 | 
|---|
| 92 |  . W !?2,$S($G(FBAAMM1):"However, f",1:"F")
 | 
|---|
| 93 |  . W "ee schedule amount is $",$P(FBX,U)," from the "
 | 
|---|
| 94 |  . W:$P(FBX,U,3)]"" $P(FBX,U,3)," " ; year if returned
 | 
|---|
| 95 |  . W:$P(FBX,U,2)]"" $$EXTERNAL^DILFD(162.03,45,"",$P(FBX,U,2))
 | 
|---|
| 96 |  E  W !?2,"Unable to determine a FEE schedule amount."
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  I FB1725 D
 | 
|---|
| 99 |  . W !!?2,"**Payment is for emergency treatment under 38 U.S.C. 1725."
 | 
|---|
| 100 |  . I FBFSAMT D
 | 
|---|
| 101 |  . . S FBFSAMT=$J(FBFSAMT*.7,0,2)
 | 
|---|
| 102 |  . . W !?2,"  Therefore, fee schedule amount reduced to $",FBFSAMT," (70%)."
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  I $G(FBUNITS)>1 D
 | 
|---|
| 105 |  . W !!?2,"Units Paid = ",FBUNITS
 | 
|---|
| 106 |  . Q:FBFSAMT'>0
 | 
|---|
| 107 |  . N FBFSUNIT
 | 
|---|
| 108 |  . ; determine if fee schedule can be multipled by units
 | 
|---|
| 109 |  . S FBFSUNIT=$S(FBFSUSD="R":1,FBFSUSD="F"&(FBMPDT>3040930):1,1:0)
 | 
|---|
| 110 |  . I FBFSUNIT D
 | 
|---|
| 111 |  . . S FBFSAMT=$J(FBFSAMT*FBUNITS,0,2)
 | 
|---|
| 112 |  . . W !?2,"  Therefore, fee schedule amount increased to $",FBFSAMT
 | 
|---|
| 113 |  . E  D
 | 
|---|
| 114 |  . . W !?2,"  Fee schedule not complied on per unit basis so amount not adjusted by units."
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  I '$G(FBAAMM1) D
 | 
|---|
| 117 |  . ; set default amount paid to lesser of amt claimed (J) or fee sched.
 | 
|---|
| 118 |  . S FBAMFS=$S(FBFSAMT>$G(FBJ):$G(FBJ),1:FBFSAMT)
 | 
|---|
| 119 |  ;
 | 
|---|
| 120 |  W !
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 | AMTPD S DIR(0)="162.5,9",DIR("A")="Amount Paid: $",DIR("B")=$G(FBAMFS),DIR("?")="^D HELP1^FBAAMP" K:$G(FBAMFS)="" DIR("B") D ^DIR K DIR I $D(DIRUT) S FBAAOUT=1 Q
 | 
|---|
| 123 |  I +Y>FBJ W !!,*7,"Amount paid cannot be greater than the amount claimed." G AMTPD
 | 
|---|
| 124 |  I FBAMFS]"" I +Y>FBAMFS&('$D(^XUSEC("FBAASUPERVISOR",DUZ))) W !!,*7,"You must be a holder of the 'FBAASUPERVISOR' key in order to",!,"exceed the Fee Schedule.",! G AMTPD
 | 
|---|
| 125 |  S FBAMTPD=+Y K FBAMFS Q
 | 
|---|
| 126 | HELP1 W !!,"Enter a dollar amount that does not exceed the amount claimed.",!
 | 
|---|
| 127 |  I FBAMFS>0 W "Only the holder of the 'FBAASUPERVISOR' key may exceed the",!,"Fee Schedule.",!
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 | CHKCPT() ; check if CPT/Modifer active on date of service
 | 
|---|
| 131 |  N FBCPTX,FBI,FBMOD,FBMODX,FBRET
 | 
|---|
| 132 |  S FBRET=1
 | 
|---|
| 133 |  S FBCPTX=$$CPT^ICPTCOD(FBAACP,FBDT,1)
 | 
|---|
| 134 |  I '$P(FBCPTX,U,7) S FBRET=0 W !,"  CPT Code ",$P(FBCPTX,U,2)," inactive on date of service."
 | 
|---|
| 135 |  I $O(FBMODA(0)) D
 | 
|---|
| 136 |  . S FBI=0 F  S FBI=$O(FBMODA(FBI)) Q:'FBI  D
 | 
|---|
| 137 |  . . S FBMODX=$$MOD^ICPTMOD(FBMODA(FBI),"I",FBDT,1)
 | 
|---|
| 138 |  . . I '$P(FBMODX,U,7) S FBRET=0 W !,"  CPT Modifier ",$P(FBMODX,U,2)," inactive on date of service."
 | 
|---|
| 139 |  Q FBRET
 | 
|---|
| 140 |  ;
 | 
|---|
| 141 | CHKFS() ; check if fee schedule amount is different on date of service
 | 
|---|
| 142 |  N FBX,FBRET,FB1725
 | 
|---|
| 143 |  S FBRET=1 ; return value - true if date of service allowed
 | 
|---|
| 144 |  ; set FB1725 flag = true if payment for a 38 U.S.C. 1725 claim
 | 
|---|
| 145 |  S FB1725=$S($G(FB583):+$P($G(^FB583(+FB583,0)),U,28),1:0)
 | 
|---|
| 146 |  S FBX=$$GET^FBAAFS($$CPT^FBAAUTL4(FBAACP),$$MODL^FBAAUTL4("FBMODA","E"),FBDT,$G(FBZIP),$$FAC^FBAAFS($G(FBHCFA(30))),$G(FBTIME))
 | 
|---|
| 147 |  ; set FB1725 flag = true if payment for a 38 U.S.C. 1725 claim
 | 
|---|
| 148 |  S FB1725=$S($G(FB583):+$P($G(^FB583(+FB583,0)),U,28),1:0)
 | 
|---|
| 149 |  ; adjust amount if mill bill
 | 
|---|
| 150 |  I FB1725 S $P(FBX,U)=$J($P(FBX,U)*.7,0,2)
 | 
|---|
| 151 |  ; adjust amount if units > 1
 | 
|---|
| 152 |  I $G(FBUNITS) D
 | 
|---|
| 153 |  . N FBFSUNIT
 | 
|---|
| 154 |  . ; determine if fee schedule can be multipled by units
 | 
|---|
| 155 |  . S FBFSUNIT=$S($P(FBX,U,2)="R":1,$P(FBX,U,2)="F"&(FBDT>3040930):1,1:0)
 | 
|---|
| 156 |  . I FBFSUNIT S $P(FBX,U)=$J($P(FBX,U)*FBUNITS,0,2)
 | 
|---|
| 157 |  ; issue warning if lesser of claim and fee schedule amount different
 | 
|---|
| 158 |  I +$S($P(FBX,U)>$G(FBJ):$G(FBJ),1:$P(FBX,U))'=+$S(FBFSAMT>$G(FBJ):$G(FBJ),1:FBFSAMT) D
 | 
|---|
| 159 |  . W !,"  Warning: The fee schedule amount (",$P(FBX,U),") for this date of service "
 | 
|---|
| 160 |  . W !,"  differs from the initial fee schedule amount (",FBFSAMT,")."
 | 
|---|
| 161 |  . I $P(FBX,U)>0,FBK>$P(FBX,U) D
 | 
|---|
| 162 |  . . W !,"  Amount paid (",FBK,") exceeds the fee schedule amount."
 | 
|---|
| 163 |  . . I '$D(^XUSEC("FBAASUPERVISOR",DUZ)) D
 | 
|---|
| 164 |  . . . W !,"  You must be a holder of the 'FBAASUPERVISOR' key in order"
 | 
|---|
| 165 |  . . . W !,"  to exceed the Fee Schedule."
 | 
|---|
| 166 |  . . . S FBRET=0
 | 
|---|
| 167 |  . W:FBRET !,"  You may want to separately process this date of service."
 | 
|---|
| 168 |  Q FBRET
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | ANCIL ;ENTRY POINT FOR mutiple ancillary payment option
 | 
|---|
| 171 |  S FBCHCO=1 D ^FBAAMP
 | 
|---|
| 172 |  K FBCHCO Q
 | 
|---|