FBUTL7 ;WIOFO/SAB - FEE BASIS UTILITY FOR CONTRACT ;9/24/2009
;;3.5;FEE BASIS;**108**;JAN 30, 1995;Build 115
;;Per VHA Directive 2004-038, this routine should not be modified.
Q
;
EDCNTRA(FBDFN,FBAUTH) ; determine if CONTRACT can be edited
; Input
; FBDFN = IEN of patient in file 161 (and file 2)
; FBAUTH = IEN of authorization in sub-file 161.01
; Returns a string value flag^message where
; flag = 1 if contract field in sub-file 161.01 can be edited
; = 0 if it cannot be edited
; message = optional text that if present should be displayed
;
N FBPAY,FBRET,FBY
S FBRET=0
;
; check inputs
I '$G(FBDFN) G EDCNTRAX ; missing patient IEN
I '$G(FBAUTH) G EDCNTRAX ; missing authorization IEN
S FBY=$G(^FBAAA(FBDFN,1,FBAUTH,0))
I FBY']"" G EDCNTRAX ; no authorization data
;
; check if contract is applicable to the authorization type
; must be outpatient or civil hospital fee program
I "^2^6^"'[("^"_$P(FBY,"^",3)_"^") G EDCNTRAX
; must not be an unauthorized claim
I $P(FBY,"^",9)["FB583" G EDCNTRAX
;
; check if any existing payments on file
S FBPAY=0
I $P(FBY,"^",3)=2 S FBPAY=$$OUTPA(FBDFN,FBAUTH) ; check outpatient
I $P(FBY,"^",9)["FB7078" S FBPAY=$$PAY^FBUCUTL(+$P(FBY,"^",9),$P($P(FBY,"^",9),";",2)) ; check using the associated 7078
I FBPAY=1 D G EDCNTRAX
. N FBX
. S FBX="Can't change contract ("
. S FBX=FBX_$S($P(FBY,"^",22):$$GET1^DIQ(161.43,$P(FBY,"^",22)_",",.01),1:"")
. S FBX=FBX_") because payments exist."
. S $P(FBRET,"^",2)=FBX
;
;passed all checks - OK to edit field
S FBRET=1
;
EDCNTRAX ; EDCNTRA exit
Q FBRET
;
OUTPA(FBDFN,FBAUTH) ; Outpatient Authorization Has Payments?
; input
; patient IEN
; authorization IEN
; output
; FBPAY = 1 or 0, =1 if any payments on file for the authorization
N FBPAY,FBVEN
S FBPAY=0
;
S FBVEN=+$P($G(^FBAAA(FBDFN,1,FBAUTH,0)),"^",4) ; vendor on auth
I FBVEN D OUTPAV
E F S FBVEN=$O(^FBAAC(FBDFN,1,FBVEN)) Q:'FBVEN D OUTPAV Q:FBPAY
Q FBPAY
;
OUTPAV ;
N FBDTI
S FBDTI=0
F S FBDTI=$O(^FBAAC(FBDFN,1,FBVEN,1,FBDTI)) Q:'FBDTI D Q:FBPAY
. Q:$P($G(^FBAAC(FBDFN,1,FBVEN,1,FBDTI,0)),"^",4)'=FBAUTH
. Q:'$O(^FBAAC(FBDFN,1,FBVEN,1,FBDTI,1,0))
. S FBPAY=1
Q
CNTRPTR(FBDA) ; Contract pointed-to
; input FBDA = ien of contract in file 161.43
; result 0 or 1, =1 if contract is pointed-to
N FBRET
S FBRET=0
; check fee basis patient (authorizations)
I $D(^FBAAA("ACN",FBDA)) S FBRET=1
; check fee basis payment
I 'FBRET,$D(^FBAAC("ACN",FBDA)) S FBRET=1
; check fee basis invoice
I 'FBRET,$D(^FBAAI("ACN",FBDA)) S FBRET=1
Q FBRET
;
;
UCFA(FBVENI,FBVENA,FBCNTRA) ; Use Contract From Authorization
; input
; FBVENI = vendor IEN for invoice/payment
; FBVENA = vendor IEN for associated authorization
; FBCNTRA = contract IEN for associated authorization
; returns 0 or 1
; = 1 if invoice must have same contract as associated authorization
N FBAR,FBI,FBRET
S FBRET=0
; if authorization has a contract
I FBCNTRA D
. ; does the vendor being paid match the vendor on the authorizaton
. I FBVENI=FBVENA S FBRET=1
. Q:FBRET=1
. ; build a list of linked vendors for the vendor being paid
. I FBVENI D ; build list of linked vendors in FBAR(
. . N DA,FBA,FBDA,FBJ
. . S DA=FBVENI
. . S FBAR(DA)=""
. . D ^FBAACO4
. ; loop thru linked vendors to see if any match
. S FBI=0 F S FBI=$O(FBAR(FBI)) Q:'FBI D Q:FBRET
. . I FBI=FBVENA S FBRET=1
Q FBRET
;
CNTRSCR(FBDFN,FBAUT,FBCNTRA) ; contract screen
; called by 161.01 CONTRACT field screen
; input
; FEE BASIS PATIENT ien
; AUTHORIZATION ien
; CONTRACT ien
; return 0 or 1, =1 if contract passes screen
N FBRET,FBVEN
S FBRET=1
; check status of contract
I $G(DIUTIL)'="VERIFY FIELDS",$P($G(^FBAA(161.43,FBCNTRA,0)),"^",2)'="A" S FBRET=0
; if authorization iens provided, then screen on vendor
I FBRET,$G(FBDFN),$G(FBAUT) D
. S FBVEN=$P($G(^FBAAA(FBDFN,1,FBAUT,0)),"^",4)
. I FBVEN'>0 S FBRET=0 Q
. S FBRET=$$VCNTR(FBVEN,FBCNTRA)
Q FBRET
;
VCNTR(FBV,FBC) ; vendor applicable for the contract
; input
; FBV = IEN of vendor (FEE BASIS VENDOR file)
; FBC = IEN on contract (FEE BASIS CONTRACT file)
; returns 0 or 1
; =1 if vendor is applicable for the contract
N FBAR,FBI,FBRET
S FBRET=0
I $G(FBV),$G(FBC) D
. ; is vendor applicable?
. I $D(^FBAA(161.43,"AV",FBV,FBC)) S FBRET=1
. Q:FBRET=1
. ; try linked vendors (if any)
. D ; build list of linked vendors in FBAR(
. . N DA,FBA,FBDA,FBJ
. . S DA=FBV
. . S FBAR(DA)=""
. . D ^FBAACO4
. ; loop thru linked vendors to see if any are applicable
. S FBI=0 F S FBI=$O(FBAR(FBI)) Q:'FBI D Q:FBRET
. . I $D(^FBAA(161.43,"AV",FBI,FBC)) S FBRET=1
Q FBRET
;
;FBUTL7
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HFBUTL7 4847 printed Dec 13, 2024@02:00:49 Page 2
FBUTL7 ;WIOFO/SAB - FEE BASIS UTILITY FOR CONTRACT ;9/24/2009
+1 ;;3.5;FEE BASIS;**108**;JAN 30, 1995;Build 115
+2 ;;Per VHA Directive 2004-038, this routine should not be modified.
+3 QUIT
+4 ;
EDCNTRA(FBDFN,FBAUTH) ; determine if CONTRACT can be edited
+1 ; Input
+2 ; FBDFN = IEN of patient in file 161 (and file 2)
+3 ; FBAUTH = IEN of authorization in sub-file 161.01
+4 ; Returns a string value flag^message where
+5 ; flag = 1 if contract field in sub-file 161.01 can be edited
+6 ; = 0 if it cannot be edited
+7 ; message = optional text that if present should be displayed
+8 ;
+9 NEW FBPAY,FBRET,FBY
+10 SET FBRET=0
+11 ;
+12 ; check inputs
+13 ; missing patient IEN
IF '$GET(FBDFN)
GOTO EDCNTRAX
+14 ; missing authorization IEN
IF '$GET(FBAUTH)
GOTO EDCNTRAX
+15 SET FBY=$GET(^FBAAA(FBDFN,1,FBAUTH,0))
+16 ; no authorization data
IF FBY']""
GOTO EDCNTRAX
+17 ;
+18 ; check if contract is applicable to the authorization type
+19 ; must be outpatient or civil hospital fee program
+20 IF "^2^6^"'[("^"_$PIECE(FBY,"^",3)_"^")
GOTO EDCNTRAX
+21 ; must not be an unauthorized claim
+22 IF $PIECE(FBY,"^",9)["FB583"
GOTO EDCNTRAX
+23 ;
+24 ; check if any existing payments on file
+25 SET FBPAY=0
+26 ; check outpatient
IF $PIECE(FBY,"^",3)=2
SET FBPAY=$$OUTPA(FBDFN,FBAUTH)
+27 ; check using the associated 7078
IF $PIECE(FBY,"^",9)["FB7078"
SET FBPAY=$$PAY^FBUCUTL(+$PIECE(FBY,"^",9),$PIECE($PIECE(FBY,"^",9),";",2))
+28 IF FBPAY=1
Begin DoDot:1
+29 NEW FBX
+30 SET FBX="Can't change contract ("
+31 SET FBX=FBX_$SELECT($PIECE(FBY,"^",22):$$GET1^DIQ(161.43,$PIECE(FBY,"^",22)_",",.01),1:"")
+32 SET FBX=FBX_") because payments exist."
+33 SET $PIECE(FBRET,"^",2)=FBX
End DoDot:1
GOTO EDCNTRAX
+34 ;
+35 ;passed all checks - OK to edit field
+36 SET FBRET=1
+37 ;
EDCNTRAX ; EDCNTRA exit
+1 QUIT FBRET
+2 ;
OUTPA(FBDFN,FBAUTH) ; Outpatient Authorization Has Payments?
+1 ; input
+2 ; patient IEN
+3 ; authorization IEN
+4 ; output
+5 ; FBPAY = 1 or 0, =1 if any payments on file for the authorization
+6 NEW FBPAY,FBVEN
+7 SET FBPAY=0
+8 ;
+9 ; vendor on auth
SET FBVEN=+$PIECE($GET(^FBAAA(FBDFN,1,FBAUTH,0)),"^",4)
+10 IF FBVEN
DO OUTPAV
+11 IF '$TEST
FOR
SET FBVEN=$ORDER(^FBAAC(FBDFN,1,FBVEN))
if 'FBVEN
QUIT
DO OUTPAV
if FBPAY
QUIT
+12 QUIT FBPAY
+13 ;
OUTPAV ;
+1 NEW FBDTI
+2 SET FBDTI=0
+3 FOR
SET FBDTI=$ORDER(^FBAAC(FBDFN,1,FBVEN,1,FBDTI))
if 'FBDTI
QUIT
Begin DoDot:1
+4 if $PIECE($GET(^FBAAC(FBDFN,1,FBVEN,1,FBDTI,0)),"^",4)'=FBAUTH
QUIT
+5 if '$ORDER(^FBAAC(FBDFN,1,FBVEN,1,FBDTI,1,0))
QUIT
+6 SET FBPAY=1
End DoDot:1
if FBPAY
QUIT
+7 QUIT
CNTRPTR(FBDA) ; Contract pointed-to
+1 ; input FBDA = ien of contract in file 161.43
+2 ; result 0 or 1, =1 if contract is pointed-to
+3 NEW FBRET
+4 SET FBRET=0
+5 ; check fee basis patient (authorizations)
+6 IF $DATA(^FBAAA("ACN",FBDA))
SET FBRET=1
+7 ; check fee basis payment
+8 IF 'FBRET
IF $DATA(^FBAAC("ACN",FBDA))
SET FBRET=1
+9 ; check fee basis invoice
+10 IF 'FBRET
IF $DATA(^FBAAI("ACN",FBDA))
SET FBRET=1
+11 QUIT FBRET
+12 ;
+13 ;
UCFA(FBVENI,FBVENA,FBCNTRA) ; Use Contract From Authorization
+1 ; input
+2 ; FBVENI = vendor IEN for invoice/payment
+3 ; FBVENA = vendor IEN for associated authorization
+4 ; FBCNTRA = contract IEN for associated authorization
+5 ; returns 0 or 1
+6 ; = 1 if invoice must have same contract as associated authorization
+7 NEW FBAR,FBI,FBRET
+8 SET FBRET=0
+9 ; if authorization has a contract
+10 IF FBCNTRA
Begin DoDot:1
+11 ; does the vendor being paid match the vendor on the authorizaton
+12 IF FBVENI=FBVENA
SET FBRET=1
+13 if FBRET=1
QUIT
+14 ; build a list of linked vendors for the vendor being paid
+15 ; build list of linked vendors in FBAR(
IF FBVENI
Begin DoDot:2
+16 NEW DA,FBA,FBDA,FBJ
+17 SET DA=FBVENI
+18 SET FBAR(DA)=""
+19 DO ^FBAACO4
End DoDot:2
+20 ; loop thru linked vendors to see if any match
+21 SET FBI=0
FOR
SET FBI=$ORDER(FBAR(FBI))
if 'FBI
QUIT
Begin DoDot:2
+22 IF FBI=FBVENA
SET FBRET=1
End DoDot:2
if FBRET
QUIT
End DoDot:1
+23 QUIT FBRET
+24 ;
CNTRSCR(FBDFN,FBAUT,FBCNTRA) ; contract screen
+1 ; called by 161.01 CONTRACT field screen
+2 ; input
+3 ; FEE BASIS PATIENT ien
+4 ; AUTHORIZATION ien
+5 ; CONTRACT ien
+6 ; return 0 or 1, =1 if contract passes screen
+7 NEW FBRET,FBVEN
+8 SET FBRET=1
+9 ; check status of contract
+10 IF $GET(DIUTIL)'="VERIFY FIELDS"
IF $PIECE($GET(^FBAA(161.43,FBCNTRA,0)),"^",2)'="A"
SET FBRET=0
+11 ; if authorization iens provided, then screen on vendor
+12 IF FBRET
IF $GET(FBDFN)
IF $GET(FBAUT)
Begin DoDot:1
+13 SET FBVEN=$PIECE($GET(^FBAAA(FBDFN,1,FBAUT,0)),"^",4)
+14 IF FBVEN'>0
SET FBRET=0
QUIT
+15 SET FBRET=$$VCNTR(FBVEN,FBCNTRA)
End DoDot:1
+16 QUIT FBRET
+17 ;
VCNTR(FBV,FBC) ; vendor applicable for the contract
+1 ; input
+2 ; FBV = IEN of vendor (FEE BASIS VENDOR file)
+3 ; FBC = IEN on contract (FEE BASIS CONTRACT file)
+4 ; returns 0 or 1
+5 ; =1 if vendor is applicable for the contract
+6 NEW FBAR,FBI,FBRET
+7 SET FBRET=0
+8 IF $GET(FBV)
IF $GET(FBC)
Begin DoDot:1
+9 ; is vendor applicable?
+10 IF $DATA(^FBAA(161.43,"AV",FBV,FBC))
SET FBRET=1
+11 if FBRET=1
QUIT
+12 ; try linked vendors (if any)
+13 ; build list of linked vendors in FBAR(
Begin DoDot:2
+14 NEW DA,FBA,FBDA,FBJ
+15 SET DA=FBV
+16 SET FBAR(DA)=""
+17 DO ^FBAACO4
End DoDot:2
+18 ; loop thru linked vendors to see if any are applicable
+19 SET FBI=0
FOR
SET FBI=$ORDER(FBAR(FBI))
if 'FBI
QUIT
Begin DoDot:2
+20 IF $DATA(^FBAA(161.43,"AV",FBI,FBC))
SET FBRET=1
End DoDot:2
if FBRET
QUIT
End DoDot:1
+21 QUIT FBRET
+22 ;
+23 ;FBUTL7