IBJPS3 ;BP/YMG - IB Site Parameters, Pay-To Provider ;20-Oct-2008
;;2.0;INTEGRATED BILLING;**400,432,516,577,608**;21-MAR-94;Build 90
;;Per VA Directive 6402, this routine should not be modified.
;
; MRD;IB*2.0*516 - Added logic pertaining to TRICARE-Specific Pay-To
; Providers, which entailed adding the parameter IBTCFLAG to many
; procedures here and in ^IBJPS4.
;
EN(IBTCFLAG) ; -- main entry point for IBJP IB PAY-TO PROVIDERS
D EN^VALM("IBJP IB "_$S(IBTCFLAG:"TRICARE PAY-TO PROVS",1:"PAY-TO PROVIDERS"))
Q
;
HDR(IBTCFLAG) ; -- header code
; Not setting VALMHDR causes this tag to be called upon return from every action,
; this is done to keep VALMSG displayed at all times, instead of the default message on the lower bar.
S VALMSG="* = Default "_$S(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-to provider"
Q
;
INIT(IBTCFLAG) ; -- init variables and list array
N IBCNT,IBLN,IBSTR,PIEN,PDATA,IBNODE
S IBNODE=$$NODE^IBJPS4(IBTCFLAG)
;
S (VALMCNT,IBCNT,IBLN)=0
S PIEN=0 F S PIEN=$O(^IBE(350.9,1,IBNODE,PIEN)) Q:'PIEN D
.I $P($G(^IBE(350.9,1,IBNODE,PIEN,0)),U,5)'="" Q
.S PDATA=$$PTG(PIEN,IBTCFLAG),IBCNT=IBCNT+1
.S IBSTR=$$SETSTR^VALM1(IBCNT_".","",2,4)
.I $$ISDFLT(PIEN,IBTCFLAG) S IBSTR=$$SETSTR^VALM1("*",IBSTR,7,1)
.S IBSTR=$$SETSTR^VALM1("Name : "_$P(PDATA,U),IBSTR,8,45)
.;S IBSTR=$$SETSTR^VALM1("State : "_$P(PDATA,U,8),IBSTR,54,25) ;JRA IB*2.0*577 ';'
.S IBLN=$$SET(IBLN,IBSTR)
.;S IBSTR=$$SETSTR^VALM1("Address 1: "_$P(PDATA,U,5),"",8,45) ;JRA IB*2.0*577 ';'
.S IBSTR=$$SETSTR^VALM1("Address 1: "_$P(PDATA,U,5),"",8,66) ;JRA IB*2.0*577 expand to 55 chars
.;S IBSTR=$$SETSTR^VALM1("Zip Code: "_$P(PDATA,U,9),IBSTR,54,25) ;JRA IB*2.0*577 ';'
.S IBLN=$$SET(IBLN,IBSTR)
.;S IBSTR=$$SETSTR^VALM1("Address 2: "_$P(PDATA,U,6),"",8,45) ;JRA IB*2.0*577 ';'
.S IBSTR=$$SETSTR^VALM1("Address 2: "_$P(PDATA,U,6),"",8,66) ;JRA IB*2.0*577 expand to 55 chars
.;S IBSTR=$$SETSTR^VALM1("Phone : "_$P(PDATA,U,4),IBSTR,54,25) ;JRA IB*2.0*577 ';'
.S IBLN=$$SET(IBLN,IBSTR)
.S IBSTR=$$SETSTR^VALM1("City : "_$P(PDATA,U,7),"",8,45)
.S IBLN=$$SET(IBLN,IBSTR)
.;S IBSTR=$$SETSTR^VALM1("Tax ID : "_$P(PDATA,U,3),IBSTR,54,25) ;JRA IB*2.0*577 ';'
.;JRA Move State, Zip Code, Phone and Tax ID under City to allow for longer address lines
.S IBSTR=$$SETSTR^VALM1("State : "_$P(PDATA,U,8),IBSTR,8,25) ;JRA IB*2.0*577
.S IBLN=$$SET(IBLN,IBSTR) ;JRA IB*2.0*577
.S IBSTR=$$SETSTR^VALM1("Zip Code : "_$P(PDATA,U,9),IBSTR,8,25) ;JRA IB*2.0*577
.S IBLN=$$SET(IBLN,IBSTR) ;JRA IB*2.0*577
.S IBSTR=$$SETSTR^VALM1("Phone : "_$P(PDATA,U,4),IBSTR,8,25) ;JRA IB*2.0*577
.S IBLN=$$SET(IBLN,IBSTR) ;JRA IB*2.0*577
.S IBSTR=$$SETSTR^VALM1("Tax ID : "_$P(PDATA,U,3),IBSTR,8,25) ;JRA IB*2.0*577
.S IBLN=$$SET(IBLN,IBSTR),IBLN=$$SET(IBLN,"")
.S @VALMAR@("ZIDX",IBCNT,PIEN)=""
.Q
;
I 'IBLN S IBLN=$$SET(IBLN,$$SETSTR^VALM1("No "_$S(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Providers defined.","",13,40))
;
S VALMCNT=IBLN,VALMBG=1
Q
;
HELP ; -- help code
S X="?" D DISP^XQORM1 W !!
Q
;
EXIT ; -- exit code
D CLEAR^VALM1,CLEAN^VALM10
Q
;
PRVADD(IBTCFLAG) ; add new pay-to provider
N X,Y,DIC,DA,DLAYGO,DIE,DR,DIR,DIRUT,DUOUT,DTOUT,IEN,IBNODE
S IBNODE=$$NODE^IBJPS4(IBTCFLAG)
D FULL^VALM1
S VALMBCK="R"
S DIC="^IBE(350.9,1,"_IBNODE_",",DIC(0)="AELMQ",DA(1)=1,DLAYGO=350.9
S DIC("A")="Enter "_$S(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-to Provider: "
D ^DIC S IEN=+Y
I IEN'>0 Q
D PRVEDIT1
I $P($G(^IBE(350.9,1,IBNODE,IEN,0)),U,2)="" D PRVDEL1
Q
;
PRVDEL(IBTCFLAG) ; delete a pay-to provider
N DA,DR,DIE,X,Y,DIR,DIRUT,DUOUT,DTOUT,I,IEN,DIVS,DFLT,IBNODE,IBDISP
S IBNODE=$$NODE^IBJPS4(IBTCFLAG)
S IBDISP=$S(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Provider"
S VALMBCK="R"
D FULL^VALM1
S IEN=$$SEL(IBTCFLAG) Q:'IEN
S DFLT=$$ISDFLT(IEN,IBTCFLAG)
I DFLT W !!,"WARNING: This is the default "_IBDISP_"."
D GETDIVS^IBJPS4(IEN,.DIVS,IBTCFLAG)
I 'DFLT D
.W !!,"The following divisions are currently associated with this "_IBDISP_": "
.S I="" F S I=$O(DIVS(I)) Q:I="" W !,?5,DIVS(I)
.W:'$D(DIVS) "None",! W !
.Q
S DIR("?")="Enter Yes to delete this "_IBDISP_"."
S DIR("A")="Delete "_IBDISP_" "_$P($G(^IBE(350.9,1,IBNODE,IEN,0)),U,2)
S DIR(0)="YO",DIR("B")="NO" D ^DIR Q:'Y
I DFLT S DIE="^IBE(350.9,",DA=1,DR=$S(IBTCFLAG:"11.04",1:"11.03")_"////@" D ^DIE
I $D(DIVS) K DIK S DIK="^IBE(350.9,1,"_IBNODE_",",DA(1)=1,I="" F S I=$O(DIVS(I)) Q:I="" S DA=I D ^DIK
K DIK
PRVDEL1 ;
N DIK
K DA
S DIK="^IBE(350.9,1,"_IBNODE_","
S DA(1)=1,DA=IEN
D ^DIK
D CLEAN^VALM10,INIT(IBTCFLAG)
Q
;
PRVEDIT(IBTCFLAG) ; edit existing pay-to provider
N IEN,IBNODE
S IBNODE=$$NODE^IBJPS4(IBTCFLAG)
S VALMBCK="R"
D FULL^VALM1
S IEN=$$SEL(IBTCFLAG) Q:'IEN
PRVEDIT1 ;
N DIE,DA,DR,DIR,DIRUT,DUOUT,DTOUT,X,Y
S DIE="^IBE(350.9,1,"_IBNODE_","
S DA=IEN,DA(1)=1
S DR=".02T;1.01T;1.02T;1.03T;1.04T;1.05T;.04T;.03T;.05///@"
D ^DIE
S DIR("?")="Enter Yes to make this entry the default "_$S(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-to Provider."
S DIR("A")="Is this the default "_$S(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Provider"
S DIR(0)="YO"
S DIR("B")="YES" I $$GETDFLT(IBTCFLAG),'$$ISDFLT(IEN,IBTCFLAG) S DIR("B")="NO"
D ^DIR I Y K DA S DIE="^IBE(350.9,",DA=1,DR=$S(IBTCFLAG:"11.04",1:"11.03")_"////"_IEN D ^DIE
D CLEAN^VALM10,INIT(IBTCFLAG)
Q
;
SET(IBLN,IBSTR) ; add a line to display list
; returns line number added
S IBLN=IBLN+1 D SET^VALM10(IBLN,IBSTR)
Q IBLN
;
ISDFLT(PIEN,IBTCFLAG) ; returns 1 if provider with ien PIEN is the default pay-to provider, 0 otherwise
Q:PIEN="" 0
Q $$GETDFLT(IBTCFLAG)=PIEN
;
GETDFLT(IBTCFLAG) ; returns ien of default pay-to provider
Q $P($G(^IBE(350.9,1,11)),U,$S(IBTCFLAG:4,1:3))
;
SEL(IBTCFLAG) ; select pay-to provider
; returns ien of selected pay-to provider, or 0 if nothing is selected
N DIR,IEN,MAX,X,Y
S IEN=0
I VALMLST>4 D
. ; there is at least one entry
. S MAX=$O(@VALMAR@("ZIDX",""),-1) S:MAX=1 Y=1
. I MAX>1 D
. . S DIR("A")="Select "_$S(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Provider (1-"_MAX_"): "
. . S DIR(0)="NA^"_1_":"_MAX_":0"
. . D ^DIR
. . Q
. S:+Y>0 IEN=$O(@VALMAR@("ZIDX",Y,""))
. Q
Q +IEN
;
PRVDATA(IBIFN) ; Return a string of Pay-To provider information in the following format
; [1] name
; [2] npi
; [3] tax id#
; [4] phone#
; [5] street 1
; [6] street 2
; [7] city
; [8] state abbreviation
; [9] zip
; [10] list of IB error messages if any of this data is missing in IBXX1;IBXX2;IBXX3;IBXX4; format
; [11] Institution (File 4) ien
;
; **NOTE: pieces 12,13,14 are added to this string in output formatter data element #1624 for PRV1-1.5 for PRV1
; pieces 2,3,5. If pieces are added here to this string, then adjust the code in PRV1-1.5,2,3,5 accordingly.
;
N DATA,IB0,EVDT,IBDIV,INST,PIEN,IBER,IBTCFLAG
S DATA="",IBER=""
;
S IBTCFLAG=$$TRICARE^IBJPS4(IBIFN) ; Set IBTCFLAG to '1' if TRICARE claim, otherwise '0'.
;
S IB0=$G(^DGCR(399,IBIFN,0))
S EVDT=$P(IB0,U,3) ; event date on claim
I 'EVDT S EVDT=DT
S IBDIV=+$P(IB0,U,22) ; division on claim
I 'IBDIV S IBDIV=$$PRIM^VASITE(EVDT)
I IBDIV'>0 S IBDIV=$$PRIM^VASITE()
I IBDIV'>0 G PRVDATX ; get out if no division
S INST=+$$SITE^VASITE(EVDT,IBDIV) ; inst file 4 pointer
I INST'>0 S INST=+$$SITE^VASITE(DT,IBDIV)
I INST'>0 S INST=+$$SITE^VASITE()
I INST'>0 G PRVDATX ; get out if no institution
;
; check to see if this institution exists as a separate Pay-To Provider subfile entry
S PIEN=+$O(^IBE(350.9,1,$S(IBTCFLAG:29,1:19),"B",INST,""))
;
I 'PIEN D G PRVDATX ; this institution does not exist in 350.9004/350.929.
. ; check to see if the default Pay-To provider information is defined (350.9;11.03/11.04)
. S PIEN=+$P($G(^IBE(350.9,1,11)),U,$S(IBTCFLAG:4,1:3)) Q:'PIEN
. S DATA=$$PTG(PIEN,IBTCFLAG)
. Q
;
; here PIEN exists and the institution pointer was found in the 350.9004 subfile
; find parent pay-to provider
S PIEN=$$GETPROV^IBJPS4(PIEN,IBTCFLAG) S:PIEN DATA=$$PTG(PIEN,IBTCFLAG)
;
PRVDATX ;
I DATA="" S IBER=IBER_"IB177;",$P(DATA,U,10)=IBER
Q DATA
;
PTG(PIEN,IBTCFLAG) ; gather pay-to provider info
N N0,N1,IBORG,NPI,STIEN,STATE,Z,IBER,IBNODE
;
S IBNODE=$$NODE^IBJPS4(+$G(IBTCFLAG))
;
S Z="",IBER="",PIEN=+$G(PIEN)
;
I '$D(^IBE(350.9,1,IBNODE,PIEN)) S IBER=IBER_"IB177;",$P(Z,U,10)=IBER G PTGX
S N0=$G(^IBE(350.9,1,IBNODE,PIEN,0))
S N1=$G(^IBE(350.9,1,IBNODE,PIEN,1))
;
; get the NPI# from the Institution file
S IBORG=+$P(N0,U,1),NPI=""
I IBORG S NPI=$P($$NPI^XUSNPI("Organization_ID",IBORG),U,1)
;
; get the state abbreviation
S STIEN=+$P(N1,U,4),STATE=""
I STIEN S STATE=$$GET1^DIQ(5,STIEN_",",1)
;
; check for missing data
I '$L($P(N0,U,2)) S IBER=IBER_"IB178;" ; missing name
I NPI'>0 S IBER=IBER_"IB179;" ; missing npi
; Patch 432 enh5: The IB system shall no longer prevent users from authorizing (fatal error message) a claim because the system can not find the human providers SSN or EIN
;I '$L($P(N0,U,3)) S IBER=IBER_"IB180;" ; missing tax ID
I '$L($P(N1,U,1))!'$L($P(N1,U,3))!'$L(STATE)!'$L($P(N1,U,5)) S IBER=IBER_"IB181;" ; missing address part(s)
;
S Z=$P(N0,U,2)_U_NPI_U_$P(N0,U,3)_U_$P(N0,U,4)_U_$P(N1,U,1)_U_$P(N1,U,2)_U_$P(N1,U,3)_U_STATE_U_$P(N1,U,5)_U_IBER_U_IBORG
PTGX ;
Q Z
;
PRVPHONE(IBIFN) ; Return Pay-to provider phone# for a given claim
; IBIFN - internal claim# (optional parameter)
; If IBIFN is not passed in, then the phone# from the default pay-to provider entry will be returned.
; For example, AR option 'EDI Lockbox 3rd Party Exceptions' needs the phone# for the process of transfering an
; EEOB to another site, but the claim# is not available to this process.
N PTPP,PIEN
S PTPP=""
I +$G(IBIFN) S PTPP=$P($$PRVDATA(IBIFN),U,4) G PRVPHNX
;
S PIEN=+$P($G(^IBE(350.9,1,11)),U,3) I 'PIEN G PRVPHNX ; no claim#, default pay-to provider
S PTPP=$P($$PTG(PIEN),U,4) ; phone#
;
PRVPHNX ;
Q PTPP
;
DEF(INST,DA,IBTCFLAG) ; This procedure is called by new style x-ref in
; order to default name and address fields.
; INST - IEN to file #4, Institution. This is the value in the .01
; field of the Pay-to or TRICARE Pay-to Providers sub-fil.
; DA - DA array as passed in from FileMan. DA(1) should equal 1 since
; this is the IB site params and there is only 1 entry. DA should
; equal the IEN to the pay-to provider multiple entry
; This procedure is called only if a new institution is being added to
; the sub-file or an entry in the sub-file is being changed from one
; institution to another.
;
NEW NAD,IENS,ST,STIEN,IBTAXID,IBFILE
;
I '$G(INST) G DEFX
;
I IBTCFLAG S IBFILE=350.929
E S IBFILE=350.9004
;
S ST=$$WHAT^XUAF4(INST,.02) ; full state name
S STIEN=$$FIND1^DIC(5,,"BX",ST,"B") ; state ien
;
; if the selected pay-to provider institution is the same as the main
; facility name field from the IB site parameters, then also default
; the federal tax ID# from the IB site parameters into the pay-to
; provider tax ID# field.
S IBTAXID=""
I INST=$P($G(^IBE(350.9,1,0)),U,2) S IBTAXID=$P($G(^IBE(350.9,1,1)),U,5)
;
S IENS=DA_",1,"
S NAD(IBFILE,IENS,.02)=$$WHAT^XUAF4(INST,100) ; official VA name
S NAD(IBFILE,IENS,.03)=IBTAXID ; tax#
S NAD(IBFILE,IENS,.04)="" ; phone# - blank it out
S NAD(IBFILE,IENS,.05)="" ; parent - blank it out
S NAD(IBFILE,IENS,1.01)=$$WHAT^XUAF4(INST,1.01) ; address line 1
S NAD(IBFILE,IENS,1.02)=$$WHAT^XUAF4(INST,1.02) ; address line 2
S NAD(IBFILE,IENS,1.03)=$$WHAT^XUAF4(INST,1.03) ; city
I STIEN S NAD(IBFILE,IENS,1.04)=STIEN ; state
S NAD(IBFILE,IENS,1.05)=$$WHAT^XUAF4(INST,1.04) ; zip
D FILE^DIE(,"NAD")
DEFX ;
Q
;
DIFF(IBIFN,EDI) ; This function will determine if there are any differences between
; the Billing Provider name and address and the Pay-to Provider name and address.
; When these two are the same, then the Pay-to Provider information is
; suppressed and is not printed or transmitted.
; This function returns a 1 if differences are found, and 0 if they are the same.
;
; EDI=1 if this is being called for the electronic claim transmission
; EDI=0 if this is being called for the printed UB-04 claim form
;
N BPZ,PTP,DIFF,BPNAME,BPAD1,BPAD2,BPCITY,BPST,BPZIP,IBZ
S DIFF=0,EDI=+$G(EDI)
S BPZ=+$$B^IBCEF79(IBIFN) ; billing provider ien to file 4
S PTP=$$UP^XLFSTR($$PRVDATA(IBIFN)) ; pay-to provider information
;
; for EDI claims, use the GETBP utility to get the billing provider data
I EDI D
. D GETBP^IBCEF79(IBIFN,"",BPZ,"DIFF",.IBZ)
. S BPNAME=$$UP^XLFSTR($G(IBZ("DIFF","NAME")))
. S BPAD1=$$UP^XLFSTR($G(IBZ("DIFF","ADDR1")))
. S BPAD2=$$UP^XLFSTR($G(IBZ("DIFF","ADDR2")))
. S BPCITY=$$UP^XLFSTR($G(IBZ("DIFF","CITY")))
. S BPST=$$UP^XLFSTR($G(IBZ("DIFF","ST")))
. S BPZIP=$$NOPUNCT^IBCEF($$UP^XLFSTR($G(IBZ("DIFF","ZIP"))))
. Q
;
; for printed UB claims, use the Institution file for FL-1 data
I 'EDI D
. S BPNAME=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,0))
. S BPAD1=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,1))
. S BPAD2=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,2))
. S BPCITY=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,"3C"))
. S BPST=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,"3S"))
. S BPZIP=$$NOPUNCT^IBCEF($$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,"3Z")))
. Q
;
I BPNAME'=$P(PTP,U,1) S DIFF=1 G DIFFX
I BPAD1'=$P(PTP,U,5) S DIFF=1 G DIFFX
I BPAD2'=$P(PTP,U,6) S DIFF=1 G DIFFX
I BPCITY'=$P(PTP,U,7) S DIFF=1 G DIFFX
I BPST'=$P(PTP,U,8) S DIFF=1 G DIFFX
I BPZIP'=$$NOPUNCT^IBCEF($P(PTP,U,9)) S DIFF=1 G DIFFX
DIFFX ;
Q DIFF
;
MAINPRV(IBTCFLAG) ; Return Pay-To provider information for main VAMC
N DATA,IBER,IEN4,PIEN,IBNODE
S IBNODE=$$NODE^IBJPS4(IBTCFLAG)
S (DATA,IBER)="",IEN4=+$$SITE^VASITE I 'IEN4 G MAINPRVX
S PIEN=$O(^IBE(350.9,1,IBNODE,"B",IEN4,"")) I 'PIEN G MAINPRVX
I $P($G(^IBE(350.9,1,IBNODE,PIEN,0)),U,5)'="" G MAINPRVX ; if this sub-entry is not a pay-to provider, then get out
S DATA=$$PTG(PIEN,IBTCFLAG)
MAINPRVX ;
I DATA="" S IBER=IBER_"IB177;",$P(DATA,U,10)=IBER
Q DATA
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBJPS3 14484 printed Oct 16, 2024@18:24:16 Page 2
IBJPS3 ;BP/YMG - IB Site Parameters, Pay-To Provider ;20-Oct-2008
+1 ;;2.0;INTEGRATED BILLING;**400,432,516,577,608**;21-MAR-94;Build 90
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
+4 ; MRD;IB*2.0*516 - Added logic pertaining to TRICARE-Specific Pay-To
+5 ; Providers, which entailed adding the parameter IBTCFLAG to many
+6 ; procedures here and in ^IBJPS4.
+7 ;
EN(IBTCFLAG) ; -- main entry point for IBJP IB PAY-TO PROVIDERS
+1 DO EN^VALM("IBJP IB "_$SELECT(IBTCFLAG:"TRICARE PAY-TO PROVS",1:"PAY-TO PROVIDERS"))
+2 QUIT
+3 ;
HDR(IBTCFLAG) ; -- header code
+1 ; Not setting VALMHDR causes this tag to be called upon return from every action,
+2 ; this is done to keep VALMSG displayed at all times, instead of the default message on the lower bar.
+3 SET VALMSG="* = Default "_$SELECT(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-to provider"
+4 QUIT
+5 ;
INIT(IBTCFLAG) ; -- init variables and list array
+1 NEW IBCNT,IBLN,IBSTR,PIEN,PDATA,IBNODE
+2 SET IBNODE=$$NODE^IBJPS4(IBTCFLAG)
+3 ;
+4 SET (VALMCNT,IBCNT,IBLN)=0
+5 SET PIEN=0
FOR
SET PIEN=$ORDER(^IBE(350.9,1,IBNODE,PIEN))
if 'PIEN
QUIT
Begin DoDot:1
+6 IF $PIECE($GET(^IBE(350.9,1,IBNODE,PIEN,0)),U,5)'=""
QUIT
+7 SET PDATA=$$PTG(PIEN,IBTCFLAG)
SET IBCNT=IBCNT+1
+8 SET IBSTR=$$SETSTR^VALM1(IBCNT_".","",2,4)
+9 IF $$ISDFLT(PIEN,IBTCFLAG)
SET IBSTR=$$SETSTR^VALM1("*",IBSTR,7,1)
+10 SET IBSTR=$$SETSTR^VALM1("Name : "_$PIECE(PDATA,U),IBSTR,8,45)
+11 ;S IBSTR=$$SETSTR^VALM1("State : "_$P(PDATA,U,8),IBSTR,54,25) ;JRA IB*2.0*577 ';'
+12 SET IBLN=$$SET(IBLN,IBSTR)
+13 ;S IBSTR=$$SETSTR^VALM1("Address 1: "_$P(PDATA,U,5),"",8,45) ;JRA IB*2.0*577 ';'
+14 ;JRA IB*2.0*577 expand to 55 chars
SET IBSTR=$$SETSTR^VALM1("Address 1: "_$PIECE(PDATA,U,5),"",8,66)
+15 ;S IBSTR=$$SETSTR^VALM1("Zip Code: "_$P(PDATA,U,9),IBSTR,54,25) ;JRA IB*2.0*577 ';'
+16 SET IBLN=$$SET(IBLN,IBSTR)
+17 ;S IBSTR=$$SETSTR^VALM1("Address 2: "_$P(PDATA,U,6),"",8,45) ;JRA IB*2.0*577 ';'
+18 ;JRA IB*2.0*577 expand to 55 chars
SET IBSTR=$$SETSTR^VALM1("Address 2: "_$PIECE(PDATA,U,6),"",8,66)
+19 ;S IBSTR=$$SETSTR^VALM1("Phone : "_$P(PDATA,U,4),IBSTR,54,25) ;JRA IB*2.0*577 ';'
+20 SET IBLN=$$SET(IBLN,IBSTR)
+21 SET IBSTR=$$SETSTR^VALM1("City : "_$PIECE(PDATA,U,7),"",8,45)
+22 SET IBLN=$$SET(IBLN,IBSTR)
+23 ;S IBSTR=$$SETSTR^VALM1("Tax ID : "_$P(PDATA,U,3),IBSTR,54,25) ;JRA IB*2.0*577 ';'
+24 ;JRA Move State, Zip Code, Phone and Tax ID under City to allow for longer address lines
+25 ;JRA IB*2.0*577
SET IBSTR=$$SETSTR^VALM1("State : "_$PIECE(PDATA,U,8),IBSTR,8,25)
+26 ;JRA IB*2.0*577
SET IBLN=$$SET(IBLN,IBSTR)
+27 ;JRA IB*2.0*577
SET IBSTR=$$SETSTR^VALM1("Zip Code : "_$PIECE(PDATA,U,9),IBSTR,8,25)
+28 ;JRA IB*2.0*577
SET IBLN=$$SET(IBLN,IBSTR)
+29 ;JRA IB*2.0*577
SET IBSTR=$$SETSTR^VALM1("Phone : "_$PIECE(PDATA,U,4),IBSTR,8,25)
+30 ;JRA IB*2.0*577
SET IBLN=$$SET(IBLN,IBSTR)
+31 ;JRA IB*2.0*577
SET IBSTR=$$SETSTR^VALM1("Tax ID : "_$PIECE(PDATA,U,3),IBSTR,8,25)
+32 SET IBLN=$$SET(IBLN,IBSTR)
SET IBLN=$$SET(IBLN,"")
+33 SET @VALMAR@("ZIDX",IBCNT,PIEN)=""
+34 QUIT
End DoDot:1
+35 ;
+36 IF 'IBLN
SET IBLN=$$SET(IBLN,$$SETSTR^VALM1("No "_$SELECT(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Providers defined.","",13,40))
+37 ;
+38 SET VALMCNT=IBLN
SET VALMBG=1
+39 QUIT
+40 ;
HELP ; -- help code
+1 SET X="?"
DO DISP^XQORM1
WRITE !!
+2 QUIT
+3 ;
EXIT ; -- exit code
+1 DO CLEAR^VALM1
DO CLEAN^VALM10
+2 QUIT
+3 ;
PRVADD(IBTCFLAG) ; add new pay-to provider
+1 NEW X,Y,DIC,DA,DLAYGO,DIE,DR,DIR,DIRUT,DUOUT,DTOUT,IEN,IBNODE
+2 SET IBNODE=$$NODE^IBJPS4(IBTCFLAG)
+3 DO FULL^VALM1
+4 SET VALMBCK="R"
+5 SET DIC="^IBE(350.9,1,"_IBNODE_","
SET DIC(0)="AELMQ"
SET DA(1)=1
SET DLAYGO=350.9
+6 SET DIC("A")="Enter "_$SELECT(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-to Provider: "
+7 DO ^DIC
SET IEN=+Y
+8 IF IEN'>0
QUIT
+9 DO PRVEDIT1
+10 IF $PIECE($GET(^IBE(350.9,1,IBNODE,IEN,0)),U,2)=""
DO PRVDEL1
+11 QUIT
+12 ;
PRVDEL(IBTCFLAG) ; delete a pay-to provider
+1 NEW DA,DR,DIE,X,Y,DIR,DIRUT,DUOUT,DTOUT,I,IEN,DIVS,DFLT,IBNODE,IBDISP
+2 SET IBNODE=$$NODE^IBJPS4(IBTCFLAG)
+3 SET IBDISP=$SELECT(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Provider"
+4 SET VALMBCK="R"
+5 DO FULL^VALM1
+6 SET IEN=$$SEL(IBTCFLAG)
if 'IEN
QUIT
+7 SET DFLT=$$ISDFLT(IEN,IBTCFLAG)
+8 IF DFLT
WRITE !!,"WARNING: This is the default "_IBDISP_"."
+9 DO GETDIVS^IBJPS4(IEN,.DIVS,IBTCFLAG)
+10 IF 'DFLT
Begin DoDot:1
+11 WRITE !!,"The following divisions are currently associated with this "_IBDISP_": "
+12 SET I=""
FOR
SET I=$ORDER(DIVS(I))
if I=""
QUIT
WRITE !,?5,DIVS(I)
+13 if '$DATA(DIVS)
WRITE "None",!
WRITE !
+14 QUIT
End DoDot:1
+15 SET DIR("?")="Enter Yes to delete this "_IBDISP_"."
+16 SET DIR("A")="Delete "_IBDISP_" "_$PIECE($GET(^IBE(350.9,1,IBNODE,IEN,0)),U,2)
+17 SET DIR(0)="YO"
SET DIR("B")="NO"
DO ^DIR
if 'Y
QUIT
+18 IF DFLT
SET DIE="^IBE(350.9,"
SET DA=1
SET DR=$SELECT(IBTCFLAG:"11.04",1:"11.03")_"////@"
DO ^DIE
+19 IF $DATA(DIVS)
KILL DIK
SET DIK="^IBE(350.9,1,"_IBNODE_","
SET DA(1)=1
SET I=""
FOR
SET I=$ORDER(DIVS(I))
if I=""
QUIT
SET DA=I
DO ^DIK
+20 KILL DIK
PRVDEL1 ;
+1 NEW DIK
+2 KILL DA
+3 SET DIK="^IBE(350.9,1,"_IBNODE_","
+4 SET DA(1)=1
SET DA=IEN
+5 DO ^DIK
+6 DO CLEAN^VALM10
DO INIT(IBTCFLAG)
+7 QUIT
+8 ;
PRVEDIT(IBTCFLAG) ; edit existing pay-to provider
+1 NEW IEN,IBNODE
+2 SET IBNODE=$$NODE^IBJPS4(IBTCFLAG)
+3 SET VALMBCK="R"
+4 DO FULL^VALM1
+5 SET IEN=$$SEL(IBTCFLAG)
if 'IEN
QUIT
PRVEDIT1 ;
+1 NEW DIE,DA,DR,DIR,DIRUT,DUOUT,DTOUT,X,Y
+2 SET DIE="^IBE(350.9,1,"_IBNODE_","
+3 SET DA=IEN
SET DA(1)=1
+4 SET DR=".02T;1.01T;1.02T;1.03T;1.04T;1.05T;.04T;.03T;.05///@"
+5 DO ^DIE
+6 SET DIR("?")="Enter Yes to make this entry the default "_$SELECT(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-to Provider."
+7 SET DIR("A")="Is this the default "_$SELECT(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Provider"
+8 SET DIR(0)="YO"
+9 SET DIR("B")="YES"
IF $$GETDFLT(IBTCFLAG)
IF '$$ISDFLT(IEN,IBTCFLAG)
SET DIR("B")="NO"
+10 DO ^DIR
IF Y
KILL DA
SET DIE="^IBE(350.9,"
SET DA=1
SET DR=$SELECT(IBTCFLAG:"11.04",1:"11.03")_"////"_IEN
DO ^DIE
+11 DO CLEAN^VALM10
DO INIT(IBTCFLAG)
+12 QUIT
+13 ;
SET(IBLN,IBSTR) ; add a line to display list
+1 ; returns line number added
+2 SET IBLN=IBLN+1
DO SET^VALM10(IBLN,IBSTR)
+3 QUIT IBLN
+4 ;
ISDFLT(PIEN,IBTCFLAG) ; returns 1 if provider with ien PIEN is the default pay-to provider, 0 otherwise
+1 if PIEN=""
QUIT 0
+2 QUIT $$GETDFLT(IBTCFLAG)=PIEN
+3 ;
GETDFLT(IBTCFLAG) ; returns ien of default pay-to provider
+1 QUIT $PIECE($GET(^IBE(350.9,1,11)),U,$SELECT(IBTCFLAG:4,1:3))
+2 ;
SEL(IBTCFLAG) ; select pay-to provider
+1 ; returns ien of selected pay-to provider, or 0 if nothing is selected
+2 NEW DIR,IEN,MAX,X,Y
+3 SET IEN=0
+4 IF VALMLST>4
Begin DoDot:1
+5 ; there is at least one entry
+6 SET MAX=$ORDER(@VALMAR@("ZIDX",""),-1)
if MAX=1
SET Y=1
+7 IF MAX>1
Begin DoDot:2
+8 SET DIR("A")="Select "_$SELECT(IBTCFLAG:"Non-MCCF ",1:"")_"Pay-To Provider (1-"_MAX_"): "
+9 SET DIR(0)="NA^"_1_":"_MAX_":0"
+10 DO ^DIR
+11 QUIT
End DoDot:2
+12 if +Y>0
SET IEN=$ORDER(@VALMAR@("ZIDX",Y,""))
+13 QUIT
End DoDot:1
+14 QUIT +IEN
+15 ;
PRVDATA(IBIFN) ; Return a string of Pay-To provider information in the following format
+1 ; [1] name
+2 ; [2] npi
+3 ; [3] tax id#
+4 ; [4] phone#
+5 ; [5] street 1
+6 ; [6] street 2
+7 ; [7] city
+8 ; [8] state abbreviation
+9 ; [9] zip
+10 ; [10] list of IB error messages if any of this data is missing in IBXX1;IBXX2;IBXX3;IBXX4; format
+11 ; [11] Institution (File 4) ien
+12 ;
+13 ; **NOTE: pieces 12,13,14 are added to this string in output formatter data element #1624 for PRV1-1.5 for PRV1
+14 ; pieces 2,3,5. If pieces are added here to this string, then adjust the code in PRV1-1.5,2,3,5 accordingly.
+15 ;
+16 NEW DATA,IB0,EVDT,IBDIV,INST,PIEN,IBER,IBTCFLAG
+17 SET DATA=""
SET IBER=""
+18 ;
+19 ; Set IBTCFLAG to '1' if TRICARE claim, otherwise '0'.
SET IBTCFLAG=$$TRICARE^IBJPS4(IBIFN)
+20 ;
+21 SET IB0=$GET(^DGCR(399,IBIFN,0))
+22 ; event date on claim
SET EVDT=$PIECE(IB0,U,3)
+23 IF 'EVDT
SET EVDT=DT
+24 ; division on claim
SET IBDIV=+$PIECE(IB0,U,22)
+25 IF 'IBDIV
SET IBDIV=$$PRIM^VASITE(EVDT)
+26 IF IBDIV'>0
SET IBDIV=$$PRIM^VASITE()
+27 ; get out if no division
IF IBDIV'>0
GOTO PRVDATX
+28 ; inst file 4 pointer
SET INST=+$$SITE^VASITE(EVDT,IBDIV)
+29 IF INST'>0
SET INST=+$$SITE^VASITE(DT,IBDIV)
+30 IF INST'>0
SET INST=+$$SITE^VASITE()
+31 ; get out if no institution
IF INST'>0
GOTO PRVDATX
+32 ;
+33 ; check to see if this institution exists as a separate Pay-To Provider subfile entry
+34 SET PIEN=+$ORDER(^IBE(350.9,1,$SELECT(IBTCFLAG:29,1:19),"B",INST,""))
+35 ;
+36 ; this institution does not exist in 350.9004/350.929.
IF 'PIEN
Begin DoDot:1
+37 ; check to see if the default Pay-To provider information is defined (350.9;11.03/11.04)
+38 SET PIEN=+$PIECE($GET(^IBE(350.9,1,11)),U,$SELECT(IBTCFLAG:4,1:3))
if 'PIEN
QUIT
+39 SET DATA=$$PTG(PIEN,IBTCFLAG)
+40 QUIT
End DoDot:1
GOTO PRVDATX
+41 ;
+42 ; here PIEN exists and the institution pointer was found in the 350.9004 subfile
+43 ; find parent pay-to provider
+44 SET PIEN=$$GETPROV^IBJPS4(PIEN,IBTCFLAG)
if PIEN
SET DATA=$$PTG(PIEN,IBTCFLAG)
+45 ;
PRVDATX ;
+1 IF DATA=""
SET IBER=IBER_"IB177;"
SET $PIECE(DATA,U,10)=IBER
+2 QUIT DATA
+3 ;
PTG(PIEN,IBTCFLAG) ; gather pay-to provider info
+1 NEW N0,N1,IBORG,NPI,STIEN,STATE,Z,IBER,IBNODE
+2 ;
+3 SET IBNODE=$$NODE^IBJPS4(+$GET(IBTCFLAG))
+4 ;
+5 SET Z=""
SET IBER=""
SET PIEN=+$GET(PIEN)
+6 ;
+7 IF '$DATA(^IBE(350.9,1,IBNODE,PIEN))
SET IBER=IBER_"IB177;"
SET $PIECE(Z,U,10)=IBER
GOTO PTGX
+8 SET N0=$GET(^IBE(350.9,1,IBNODE,PIEN,0))
+9 SET N1=$GET(^IBE(350.9,1,IBNODE,PIEN,1))
+10 ;
+11 ; get the NPI# from the Institution file
+12 SET IBORG=+$PIECE(N0,U,1)
SET NPI=""
+13 IF IBORG
SET NPI=$PIECE($$NPI^XUSNPI("Organization_ID",IBORG),U,1)
+14 ;
+15 ; get the state abbreviation
+16 SET STIEN=+$PIECE(N1,U,4)
SET STATE=""
+17 IF STIEN
SET STATE=$$GET1^DIQ(5,STIEN_",",1)
+18 ;
+19 ; check for missing data
+20 ; missing name
IF '$LENGTH($PIECE(N0,U,2))
SET IBER=IBER_"IB178;"
+21 ; missing npi
IF NPI'>0
SET IBER=IBER_"IB179;"
+22 ; Patch 432 enh5: The IB system shall no longer prevent users from authorizing (fatal error message) a claim because the system can not find the human providers SSN or EIN
+23 ;I '$L($P(N0,U,3)) S IBER=IBER_"IB180;" ; missing tax ID
+24 ; missing address part(s)
IF '$LENGTH($PIECE(N1,U,1))!'$LENGTH($PIECE(N1,U,3))!'$LENGTH(STATE)!'$LENGTH($PIECE(N1,U,5))
SET IBER=IBER_"IB181;"
+25 ;
+26 SET Z=$PIECE(N0,U,2)_U_NPI_U_$PIECE(N0,U,3)_U_$PIECE(N0,U,4)_U_$PIECE(N1,U,1)_U_$PIECE(N1,U,2)_U_$PIECE(N1,U,3)_U_STATE_U_$PIECE(N1,U,5)_U_IBER_U_IBORG
PTGX ;
+1 QUIT Z
+2 ;
PRVPHONE(IBIFN) ; Return Pay-to provider phone# for a given claim
+1 ; IBIFN - internal claim# (optional parameter)
+2 ; If IBIFN is not passed in, then the phone# from the default pay-to provider entry will be returned.
+3 ; For example, AR option 'EDI Lockbox 3rd Party Exceptions' needs the phone# for the process of transfering an
+4 ; EEOB to another site, but the claim# is not available to this process.
+5 NEW PTPP,PIEN
+6 SET PTPP=""
+7 IF +$GET(IBIFN)
SET PTPP=$PIECE($$PRVDATA(IBIFN),U,4)
GOTO PRVPHNX
+8 ;
+9 ; no claim#, default pay-to provider
SET PIEN=+$PIECE($GET(^IBE(350.9,1,11)),U,3)
IF 'PIEN
GOTO PRVPHNX
+10 ; phone#
SET PTPP=$PIECE($$PTG(PIEN),U,4)
+11 ;
PRVPHNX ;
+1 QUIT PTPP
+2 ;
DEF(INST,DA,IBTCFLAG) ; This procedure is called by new style x-ref in
+1 ; order to default name and address fields.
+2 ; INST - IEN to file #4, Institution. This is the value in the .01
+3 ; field of the Pay-to or TRICARE Pay-to Providers sub-fil.
+4 ; DA - DA array as passed in from FileMan. DA(1) should equal 1 since
+5 ; this is the IB site params and there is only 1 entry. DA should
+6 ; equal the IEN to the pay-to provider multiple entry
+7 ; This procedure is called only if a new institution is being added to
+8 ; the sub-file or an entry in the sub-file is being changed from one
+9 ; institution to another.
+10 ;
+11 NEW NAD,IENS,ST,STIEN,IBTAXID,IBFILE
+12 ;
+13 IF '$GET(INST)
GOTO DEFX
+14 ;
+15 IF IBTCFLAG
SET IBFILE=350.929
+16 IF '$TEST
SET IBFILE=350.9004
+17 ;
+18 ; full state name
SET ST=$$WHAT^XUAF4(INST,.02)
+19 ; state ien
SET STIEN=$$FIND1^DIC(5,,"BX",ST,"B")
+20 ;
+21 ; if the selected pay-to provider institution is the same as the main
+22 ; facility name field from the IB site parameters, then also default
+23 ; the federal tax ID# from the IB site parameters into the pay-to
+24 ; provider tax ID# field.
+25 SET IBTAXID=""
+26 IF INST=$PIECE($GET(^IBE(350.9,1,0)),U,2)
SET IBTAXID=$PIECE($GET(^IBE(350.9,1,1)),U,5)
+27 ;
+28 SET IENS=DA_",1,"
+29 ; official VA name
SET NAD(IBFILE,IENS,.02)=$$WHAT^XUAF4(INST,100)
+30 ; tax#
SET NAD(IBFILE,IENS,.03)=IBTAXID
+31 ; phone# - blank it out
SET NAD(IBFILE,IENS,.04)=""
+32 ; parent - blank it out
SET NAD(IBFILE,IENS,.05)=""
+33 ; address line 1
SET NAD(IBFILE,IENS,1.01)=$$WHAT^XUAF4(INST,1.01)
+34 ; address line 2
SET NAD(IBFILE,IENS,1.02)=$$WHAT^XUAF4(INST,1.02)
+35 ; city
SET NAD(IBFILE,IENS,1.03)=$$WHAT^XUAF4(INST,1.03)
+36 ; state
IF STIEN
SET NAD(IBFILE,IENS,1.04)=STIEN
+37 ; zip
SET NAD(IBFILE,IENS,1.05)=$$WHAT^XUAF4(INST,1.04)
+38 DO FILE^DIE(,"NAD")
DEFX ;
+1 QUIT
+2 ;
DIFF(IBIFN,EDI) ; This function will determine if there are any differences between
+1 ; the Billing Provider name and address and the Pay-to Provider name and address.
+2 ; When these two are the same, then the Pay-to Provider information is
+3 ; suppressed and is not printed or transmitted.
+4 ; This function returns a 1 if differences are found, and 0 if they are the same.
+5 ;
+6 ; EDI=1 if this is being called for the electronic claim transmission
+7 ; EDI=0 if this is being called for the printed UB-04 claim form
+8 ;
+9 NEW BPZ,PTP,DIFF,BPNAME,BPAD1,BPAD2,BPCITY,BPST,BPZIP,IBZ
+10 SET DIFF=0
SET EDI=+$GET(EDI)
+11 ; billing provider ien to file 4
SET BPZ=+$$B^IBCEF79(IBIFN)
+12 ; pay-to provider information
SET PTP=$$UP^XLFSTR($$PRVDATA(IBIFN))
+13 ;
+14 ; for EDI claims, use the GETBP utility to get the billing provider data
+15 IF EDI
Begin DoDot:1
+16 DO GETBP^IBCEF79(IBIFN,"",BPZ,"DIFF",.IBZ)
+17 SET BPNAME=$$UP^XLFSTR($GET(IBZ("DIFF","NAME")))
+18 SET BPAD1=$$UP^XLFSTR($GET(IBZ("DIFF","ADDR1")))
+19 SET BPAD2=$$UP^XLFSTR($GET(IBZ("DIFF","ADDR2")))
+20 SET BPCITY=$$UP^XLFSTR($GET(IBZ("DIFF","CITY")))
+21 SET BPST=$$UP^XLFSTR($GET(IBZ("DIFF","ST")))
+22 SET BPZIP=$$NOPUNCT^IBCEF($$UP^XLFSTR($GET(IBZ("DIFF","ZIP"))))
+23 QUIT
End DoDot:1
+24 ;
+25 ; for printed UB claims, use the Institution file for FL-1 data
+26 IF 'EDI
Begin DoDot:1
+27 SET BPNAME=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,0))
+28 SET BPAD1=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,1))
+29 SET BPAD2=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,2))
+30 SET BPCITY=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,"3C"))
+31 SET BPST=$$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,"3S"))
+32 SET BPZIP=$$NOPUNCT^IBCEF($$UP^XLFSTR($$GETFAC^IBCEP8(BPZ,0,"3Z")))
+33 QUIT
End DoDot:1
+34 ;
+35 IF BPNAME'=$PIECE(PTP,U,1)
SET DIFF=1
GOTO DIFFX
+36 IF BPAD1'=$PIECE(PTP,U,5)
SET DIFF=1
GOTO DIFFX
+37 IF BPAD2'=$PIECE(PTP,U,6)
SET DIFF=1
GOTO DIFFX
+38 IF BPCITY'=$PIECE(PTP,U,7)
SET DIFF=1
GOTO DIFFX
+39 IF BPST'=$PIECE(PTP,U,8)
SET DIFF=1
GOTO DIFFX
+40 IF BPZIP'=$$NOPUNCT^IBCEF($PIECE(PTP,U,9))
SET DIFF=1
GOTO DIFFX
DIFFX ;
+1 QUIT DIFF
+2 ;
MAINPRV(IBTCFLAG) ; Return Pay-To provider information for main VAMC
+1 NEW DATA,IBER,IEN4,PIEN,IBNODE
+2 SET IBNODE=$$NODE^IBJPS4(IBTCFLAG)
+3 SET (DATA,IBER)=""
SET IEN4=+$$SITE^VASITE
IF 'IEN4
GOTO MAINPRVX
+4 SET PIEN=$ORDER(^IBE(350.9,1,IBNODE,"B",IEN4,""))
IF 'PIEN
GOTO MAINPRVX
+5 ; if this sub-entry is not a pay-to provider, then get out
IF $PIECE($GET(^IBE(350.9,1,IBNODE,PIEN,0)),U,5)'=""
GOTO MAINPRVX
+6 SET DATA=$$PTG(PIEN,IBTCFLAG)
MAINPRVX ;
+1 IF DATA=""
SET IBER=IBER_"IB177;"
SET $PIECE(DATA,U,10)=IBER
+2 QUIT DATA
+3 ;