FBPAID3 ;DSS/SCR - Utilities to support FEE BASIS PAID TO IB Process ;3/28/1012
 ;;3.5;FEE BASIS;**135**;JAN 30, 1995;Build 3
 ;;Per VHA Directive 2004-038, this routine should not be modified.
 ;
 ;  DBIA SUPPORTED REF INSUR^IBBAPI
 ;                     ELIG^VADPT
 ;
 Q
 ;
IBALLWD()  ;EP FROM FBPAID
 ; RETURNS 1 if lines should be added to the FEE BASIS PAID TO IB file for further processing
 ;           by scheduled background job FB PAID TO IB
 ;         0 if the site has not set the site parameter to allow updates OR db errors occur
 ;
 N FBIEN,FBRETRN,FBERR
 ;
 S FBRETRN=0  ;DON'T ALLOW new entries to FEE BASIS PAID TO IB file...
 S FBIEN=$O(^FBAA(161.4,0))
 S:+FBIEN FBRETRN=$$GET1^DIQ(161.4,FBIEN_",",40,"I","","FBERR")  ;if "" or 1 is returned updates ok
 I $G(FBERR("DIERR"))'="" S FBRETRN=0
 S:FBRETRN="" FBRETRN=0  ;Site must set parameter to make interface work initially
 Q FBRETRN
 ;
 ;
ADDONE(FBPROG,FBIEN,FBPAT,FBDATE) ;EP FROM FBPAID
 ; INPUT  : FBPROG : "3" FOR OUTPATIENT, "9" FOR INPATIENT
 ;          FBIEN  : AN ARRAY SET UP FROM THE PARSING ROUTINE IN FBPAID1
 ;          FBPAT  : POINTER TO THE PATIENT FILE
 ;          FBDATE : DATE OF MM MESSAGE FROM CENTRAL FEE PROCESSING
 ;
 ; OUPUT  : ien of new entry or -1 if problems occur
 ;
 N FBARRY,FBOK,FBERR
 ;
 S FBARRY("PATIENT")=FBPAT  ;INTERNAL
 S FBARRY("PROGRAM")=FBPROG
 I $G(FBPROG)=3 D
 .S FBARRY("FBICN")=$G(FBIEN(3))_";"_$G(FBIEN(2))_";"_$G(FBIEN(1))_";"_$G(FBIEN)
 .S FBARRY("LI NUMBER")=FBIEN
 I $G(FBPROG)=9 D
 .S FBARRY("FBICN")=FBIEN
 .;S FBARRY("LI NUMBER")=1   ;There can be up to 25 line items in the same record
 S FBARRY("PROCESS DATE")=FBDATE   ;INTERNAL Date message started getting processed
 S FBOK=$$SETFB2IB("",.FBARRY)  ;returns the ien of a new line, or -1
 Q FBOK
 ;
EPFBTOIB(FBDATEIN) ;EP FROM FB PAID TO IB OPTION
 ;  INPUT : FBDATEIN - OPTIONAL and not supplied by the OPTION if sent
 ;                      this should be 'DATE OF LAST GOOD RUN' 
 ;                   - all dates after this date will be re-processed in the
 ;                       FEE BASIS PAID TO IB file
 ;                       
 N FBIEN,FBTEST,FBQUIT,FBOK,FBIEN3,FBDATE,FBTODAY
 S FBTODAY=DT
 ;
 D CLEANUP(FBTODAY)
 K ^TMP($J,"FBPAID3") ;temporary global to hold info for each date to be processed
 ; 
 I $G(FBDATEIN)="" D
 .S FBQUIT=0
 .S FBDATE=""
 .S FBDATE=$O(^FB(161.9,"AC",FBDATE),-1)
 .;FIND LAST PROCCESSED DATE BY LOOKING AT NPI ADDED field which is always populated when processed
 .S:FBDATE="" FBQUIT=1
 .F  Q:FBQUIT  D
 ..S FBIEN=0
 ..S FBIEN=$O(^FB(161.9,"AC",FBDATE,FBIEN))
 ..I $$GET1^DIQ(161.9,FBIEN_",",.08,"I","","")'="" S FBQUIT=1
 ..Q:FBQUIT
 ..S FBDATE=$O(^FB(161.9,"AC",FBDATE),-1)
 ..I FBDATE="" S FBQUIT=1
 .S FBDATE=$O(^FB(161.9,"AC",FBDATE))   ;then I have found a date that has been processed, stepped back one and then quit...
 I $G(FBDATEIN)'="" S FBDATE=FBDATEIN
 Q:FBDATE=""  ;NO UNPROCESSED RECORDS
 F  Q:(FBDATE="")  D
 .S FBIEN3=0
 .F  S FBIEN3=$O(^FB(161.9,"AC",FBDATE,FBIEN3)) Q:'+FBIEN3  S ^TMP($J,"FBPAID3",FBDATE,FBIEN3)=""
 .D SCRUB2IB(FBDATE)
 .K ^TMP($J,"FBPAID3",FBDATE)
 .S FBDATE=$O(^FB(161.9,"AC",FBDATE))
 Q
 ;
CLEANUP(FBDATE) ;delete entries from 161.9 older than 180 days from FBDATE
 ; INPUT : FBDATE - Today's date
 ;
 ;
 N FBIEN,FBOLDATE
 ;
 N X1,X2,X,%H,DA,DIK,DIE,DR
 ;
 S X1=FBDATE
 S X2=-179
 D C^%DTC
 S FBOLDATE=X  ;THE FM DATE 179 DAYS BEFORE FBDATE
 ;
 F  S FBOLDATE=$O(^FB(161.9,"AC",FBOLDATE),-1) Q:FBOLDATE=""  D
 .S FBIEN=0
 .F  S FBIEN=$O(^FB(161.9,"AC",FBOLDATE,FBIEN)) Q:FBIEN=""  D DELFB2IB(FBIEN)
 Q
 ;
SCRUB2IB(FBDATE) ; process entries in 161.9 for this process date
 ;
 ; INPUT  : FBDATE - Process date in FEE BASIS PAID TO IB file
 ;
 ; OUTUPT : 1 indication processing is complete
 ;
 N FBIEN2,FBCHECK,FBPATARY,FBARRY,FBPAT,FBXIEN,FBNXT,FBRECARY,FBINSRET,FBTRTDT,FBDATE2,FBLINUM
 ;
 ; FBCHECK,FBARRY and FBRECARY are all arrays that keep persistent information
 ;   through subroutine calls and are always passed by reference
 ; 
 S FBIEN2=0
 ;
 S FBCHECK(0)="^0^0"  ;the three piece string of info to use if NPI is blank
 ;
 F  S FBIEN2=$O(^TMP($J,"FBPAID3",FBDATE,FBIEN2)) Q:FBIEN2=""  D
 .S FBOK=$$GETFB2IB(FBIEN2,.FBARRY)
 .S FBPAT=$G(FBARRY("PATIENT INTERNAL"))
 .Q:'+FBPAT
 .S:$G(FBPATARY(FBPAT,0))="" FBPATARY(FBPAT,0)='$$FBSC(FBPAT)  ;(IF SC RETURNS 1, WE WANT 0)
 .S FBPATARY(FBPAT,FBIEN2)=""
 .Q:FBPATARY(FBPAT,0)=0
 .S FBPROG=$G(FBARRY("PROGRAM INTERNAL"))
 .S FBICN=$G(FBARRY("FBICN"))
 .S FBLINUM=$G(FBARRY("LI NUMBER"))
 .S FBOK=0   ;FLAGS IF DB CALLS RETURN WITH PROBLEMS
 .I FBPROG=9 D
 ..S FBOK=$$GETFBINV(FBICN,.FBRECARY)
 ..Q:'FBOK
 ..S FBTRTDT=FBRECARY("TREATMENT FROM DATE")
 ..S:$G(FBPATARY(FBPAT,"STRTDT",FBTRTDT))="" FBPATARY(FBPAT,"STRTDT",FBTRTDT)=$$INSUR^IBBAPI(FBPAT,FBTRTDT,"I",.FBINSRET)
 ..S FBPATARY(FBPAT,FBIEN2)=FBPATARY(FBPAT,"STRTDT",FBTRTDT)
 .;
 .I FBPROG=3 D
 ..S FBOK=$$GETFBPAY(FBICN,.FBRECARY)
 ..Q:'FBOK
 ..S FBTRTDT=FBRECARY("TREATMENT DATE")
 ..S:$G(FBPATARY(FBPAT,"TRTDT",FBTRTDT))="" FBPATARY(FBPAT,"TRTDT",FBTRTDT)=$$INSUR^IBBAPI(FBPAT,FBTRTDT,"O",.FBINSRET)
 ..S FBPATARY(FBPAT,FBIEN2)=FBPATARY(FBPAT,"TRTDT",FBTRTDT)
 .;
 .Q:'FBOK
 .I $G(FBRECARY("CONTRACT"))'="" S FBPATARY(FBPAT,FBIEN2)=-1  ;get rid of this record
 .Q:$G(FBRECARY("CONTRACT"))'=""
 .Q:FBPATARY(FBPAT,FBIEN2)=0  ;get rid of this record since no valid INPATIENT insurance on 'start date'
 .I FBPATARY(FBPAT,FBIEN2)=1 D PRCFBREC^FBPAID3A(FBIEN2,.FBRECARY,.FBARRY,.FBCHECK)
 ;NOW REMOVE EACH RECORD EACH PATIENT THAT HAS SC STATUS from FEE BASIS PAID TO IB and from local array 
 S FBPAT=0
 F  S FBPAT=$O(FBPATARY(FBPAT)) Q:'+FBPAT  D
 .;IF THIS PERSON HAS SERVICE CONNECTED STATUS, KILL ALL HIS/HER ENTRIES
 .I $G(FBPATARY(FBPAT,0))=0 D
 ..S FBXIEN=0
 ..F  S FBXIEN=$O(FBPATARY(FBPAT,FBXIEN)) Q:'+FBXIEN  D DELFB2IB(FBXIEN)
 ..K FBPATARY(FBPAT)
 .;IF THIS PERSON DOES NOT HAVE APPROPRIATE COVERAGE ON THE DATE OF SERVICE, KILL THIS LINE
 .I $G(FBPATARY(FBPAT,0))=1 D
 ..S FBXIEN=0
 ..F  S FBXIEN=$O(FBPATARY(FBPAT,FBXIEN)) Q:'+FBXIEN  D 
 ...I $G(FBPATARY(FBPAT,FBXIEN))<=0 D 
 ....D DELFB2IB(FBXIEN)
 ....K FBPATARY(FBPAT,FBXIEN)
 .S FBXIEN=0
 .;NOW KILL ANY REMAINING ENTRIES FOR THIS PATIENT THAT ARE FOR CONTRACTED SERVICES
 .F  S FBXIEN=$O(FBPATARY(FBPAT,FBXIEN)) Q:'+FBXIEN  D
 ..I $G(FBPATARY(FBPAT,FBXIEN))<=0 D 
 ...D DELFB2IB(FBXIEN)
 ...K FBPATARY(FBPAT,FBXIEN)
 Q
 ;
SETFB2IB(FBIEN,FBARRY)  ;ADD OR UPDATE A RECORD TO 161.9 FEE BASIS PAID TO IB FILE
 ;SETS FIELD VALUES INTO 161.9 -- FEE BASIS PAID TO IB FILE
 ;
 ; INPUT : FBIEN : IF "" a new entry will be created ELSE an EXISTING entry will be updated
 ;         FBARRY - AN ARRAY OF INFORMATION IN INTERNAL FORMAT THAT WILL BE SET INTO THE NEW RECORD W/O VALIDATION
 ;
 ;         FBERR  - Empty array passed by reference which is populated if DB errors occur
 ;
 N FBFDA,FBOK,FBIENRET,FBERR
 ;
 S FBOK=1
 I FBIEN="" D
 .S FBFDA(161.9,"+1,",.01)=$G(FBARRY("PATIENT"))
 .S FBFDA(161.9,"+1,",.02)=$G(FBARRY("PROGRAM"))
 .S FBFDA(161.9,"+1,",.03)=$G(FBARRY("FBICN"))
 .S FBFDA(161.9,"+1,",.04)=$G(FBARRY("PROCESS DATE"))
 .S FBFDA(161.9,"+1,",.05)=$G(FBARRY("LI NUMBER"))
 .D UPDATE^DIE("","FBFDA","FBIENRET","FBERR")
 I FBIEN'="" D
 .S FBFDA(161.9,FBIEN_",",.05)=$G(FBARRY("LI NUMBER"))
 .S FBFDA(161.9,FBIEN_",",.06)=$G(FBARRY("PROVIDER TYPE"))
 .S FBFDA(161.9,FBIEN_",",.07)=$G(FBARRY("IBICN"))
 .S FBFDA(161.9,FBIEN_",",.08)=$G(FBARRY("NPI ADDED"))
 .S FBFDA(161.9,FBIEN_",",.09)=$G(FBARRY("TXY ADDED"))
 .D FILE^DIE("","FBFDA","FBERR")
 ;
 I $G(FBERR("DIERR"))="" D
 .S:$G(FBIENRET(1))'="" FBOK=FBIENRET(1)  ;THE IEN WHICH WAS JUST ADDED
 .S:$G(FBIENRET(1))="" FBOK=FBIEN
 I $G(FBERR("DIERR"))'="" S FBOK=-1
 Q FBOK  ;RETURNS IEN JUST ADDED OR UPDATED OR -1
 ;
GETFB2IB(FBIEN,FBARRY)  ;GETS FIELD VALUES FROM 161.9 FEE BASIS PAID TO IB FILE
 ;
 ; INPUT: FBIEN - THE IEN OF THE FEE BASIS PAID TO IB FILE INFORMAITON IS DESIRED FOR
 ;        FBARRY - AN EMPTY ARRAY PASSED BY REFERENCE 
 ;
 ; OUTPUT FBARRY :  POPULATED WITH INFO ABOUT THIS IEN
 ;
 N FBIENS,FBFLDS,FBRET,FBOK,FBERR
 ;
 S FBOK=1
 ;
 ; FB INTERNAL CONTROL NUMBER [4F]
 ;^ 
 ;^  ^
 ;
 D GETS^DIQ(161.9,FBIEN_",","*","EI","FBRET","FBERR")
 I $G(FBERR("DIERR"))'="" S FBOK=-1
 I $G(FBRET(161.9,FBIEN_",",".01","I"))="" S FBOK=0 ;NO SUCH RECORD IEN
 ;
 I FBOK D
 .S FBARRY("PATIENT")=$G(FBRET(161.9,FBIEN_",",".01","E"))
 .S FBARRY("PATIENT INTERNAL")=$G(FBRET(161.9,FBIEN_",",".01","I")) ;(#.01) ENTRY ID [1N]
 .S FBARRY("PROGRAM")=$G(FBRET(161.9,FBIEN_",",".02","E")) ;
 .S FBARRY("PROGRAM INTERNAL")=$G(FBRET(161.9,FBIEN_",",".02","I")) ;(#.02) PATIENT [2P:2]
 .S FBARRY("FBICN")=$G(FBRET(161.9,FBIEN_",",".03","E")) ;(#.03)PROGRAM [3S]
 .S FBARRY("PROCESS DATE")=$G(FBRET(161.9,FBIEN_",",".04","E")) ;
 .S FBARRY("PROCESS DATE INTERNAL")=$G(FBRET(161.9,FBIEN_",",".04","I")) ;(#.04)FB INTERNAL CONTROL NUMBER [4F]
 .S FBARRY("LI NUMBER")=$G(FBRET(161.9,FBIEN_",",".05","E")) ;(#.05) PROCESS DATE [5D] 
 .S FBARRY("PROVIDER TYPE")=FBRET(161.9,FBIEN_",",".06","E") ;(#.06) PROVIDER TYPE [6S]
 .S FBARRY("IBICN")=$G(FBRET(161.9,FBIEN_",",".07","E")) ;(#.07) IB NON/OTHER PNTR[7P] 
 .S FBARRY("NPI ADDED")=$G(FBRET(161.9,FBIEN_",",".08","E"))
 .S FBARRY("NPI ADDED INTERNAL")=$G(FBRET(161.9,FBIEN_",",".08","I")) ;(#.08) NPI ADDED [8S]
 .S FBARRY("TXY ADDED")=$G(FBRET(161.9,FBIEN_",",".09","E")) ;
 .S FBARRY("TXY ADDED INTERNAL")=$G(FBRET(161.9,FBIEN_",",".09","I")) ;(#.09) TAXONOMY ADDED [9S] 
 ;
 I 'FBOK K FBARRY
 ;
 Q FBOK
 ;
DELFB2IB(FBIEN)  ;EP FROM FBPAID3A
 ;DELETES A RECORD FROM 161.9 FEE BASIS PAID TO IB FILE
 ;
 ; INPUT: FBIEN - The IEN of the FEE BASIS PAID TO IB FILE to be deleted
 ;
 N DIK,DA
 S DIK="^FB(161.9,"
 S DA=FBIEN
 D ^DIK
 Q
 ;
FBSC(FBDFN) ; returns 1 if service connection indicated, 0 otherwise (based on VAEL(3))
 ; INPUT : FBDFN - ien to the PATIENT file
 ;
 ; OUTPUT : 1 if service connected, 0 if NO service connected
 N FBX,VAEL,VAERR,DFN
 S FBX=0
 S DFN=FBDFN
 I +$G(DFN) D ELIG^VADPT S FBX=$P($G(VAEL(3)),U,1)
 Q FBX
 ;
GETFBINV(FBINVIEN,FBINVARY)  ;Get info about a record in FEE BASIS INVOICE file
 ;
 ; INPUT :FBINVIEN   the ien we wish to examine
 ;        FBINVARY  an empty array passed by reference 
 ;
 ; OUTPUT : FBINVARY : populated with information about this record
 ;
 N FBFLDS,FBQUIT,FBLIPRV,FBERR,FBFLDS2,FBRET,FBRET2
 ;
 S FBQUIT=0
 ;
 S FBFLDS=".01;2;5;6;20;60;64;65;66;67;68;69;70;71;72;73;74;75;80;81;82;83"
 ;(#2)VENDOR [3P:161.2] ;THIS IS OUR PRIMARY PROVIDER
 ;(#5) TREATMENT FROM DATE [6D] ^ (#6) TREATMENT TO DATE [7D] 
 ;(#20) BATCH NUMBER ; (#60) CONTRACT [8P:161.43] 
 ;(#64) ATTENDING PROV NAME [1F] ^ (#65) ATTENDING PROV NPI [2F](#66) ATTENDING PROV TAXONOMY CODE [3F] ^ 
 ;(#67) OPERATING PROV NAME [4F] ^ (#68) OPERATING PROV NPI [5F]
 ; (#69)RENDERING PROV NAME [6F] ^ (#70) RENDERING PROV NPI [7F] ^(#71) RENDERING PROV TAXONOMY CODE [8F] 
 ;(#72) SERVICING PROVNAME [9F] ^ (#73) SERVICING PROV NPI [10F] 
 ;(#74) REFERRING PROV NAME [11F] ^ (#75) REFERRING PROV NPI [12F];(#80) SERVICING FACILITY ADDRESS [1F]
 ;(#81) SERVICING FACILITY CITY [2F] ^ (#82) SERVICING FACILITY STATE [3P:5] ^ (#83) SERVICING FACILITY ZIP [4F]
 D GETS^DIQ(162.5,FBINVIEN_",",FBFLDS,"I","FBRET","FBERR")
 I $G(FBERR("DIERR"))'="" S FBQUIT=1
 I 'FBQUIT D
 .S FBINVARY("VENDOR INTERNAL")=$G(FBRET(162.5,FBINVIEN_",","2","I"))
 .S FBINVARY("TREATMENT FROM DATE")=$G(FBRET(162.5,FBINVIEN_",","5","I"))
 .S FBINVARY("TREATMENT TO DATE")=$G(FBRET(162.5,FBINVIEN_",","6","I"))
 .S FBINVARY("BATCH NUMBER")=$G(FBRET(162.5,FBINVIEN_",","20","I"))
 .S FBINVARY("CONTRACT")=$G(FBRET(162.5,FBINVIEN_",","60","I"))
 .S FBINVARY("ATTENDING NAME")=$G(FBRET(162.5,FBINVIEN_",","64","I"))
 .S FBINVARY("ATTENDING NPI")=$G(FBRET(162.5,FBINVIEN_",","65","I"))
 .S FBINVARY("ATTENDING TXY")=$G(FBRET(162.5,FBINVIEN_",","66","I"))
 .S FBINVARY("OPERATING NAME")=$G(FBRET(162.5,FBINVIEN_",","67","I"))
 .S FBINVARY("OPERATING NPI")=$G(FBRET(162.5,FBINVIEN_",","68","I"))
 .S FBINVARY("RENDERING NAME")=$G(FBRET(162.5,FBINVIEN_",","69","I"))
 .S FBINVARY("RENDERING NPI")=$G(FBRET(162.5,FBINVIEN_",","70","I"))
 .S FBINVARY("RENDERING TXY")=$G(FBRET(162.5,FBINVIEN_",","71","I"))
 .S FBINVARY("SERVICING NAME")=$G(FBRET(162.5,FBINVIEN_",","72","I"))
 .S FBINVARY("SERVICING NPI")=$G(FBRET(162.5,FBINVIEN_",","73","I"))
 .S FBINVARY("REFERRING NAME")=$G(FBRET(162.5,FBINVIEN_",","74","I"))
 .S FBINVARY("REFERRING NPI")=$G(FBRET(162.5,FBINVIEN_",","75","I"))
 .S FBINVARY("SERVICING ADDRESS")=$G(FBRET(162.5,FBINVIEN_",","80","I"))
 .S FBINVARY("SERVICING CITY")=$G(FBRET(162.5,FBINVIEN_",","81","I"))
 .S FBINVARY("SERVICING STATE INT")=$G(FBRET(162.5,FBINVIEN_",","82","I"))
 .S FBINVARY("SERVICING ZIP")=$G(FBRET(162.5,FBINVIEN_",","83","I"))
 .;kill any existing LI info, because it may not get overwritten like the above
 .K FBINVARY("LIRENDER NAME")
 .K FBINVARY("LIRENDER NPI")
 .K FBINVARY("LIRENDER TXY")
 .;
 .;NOW GET LI RENDERING PROVIDER INFO
 .S FBLIPRV=0
 .F  S FBLIPRV=$O(^FBAAI(FBINVIEN,"RPROV",FBLIPRV)) Q:'+FBLIPRV  D
 ..S FBFLDS2=".01;.02;.03;.04"
 ..;(#.01) LINE ITEM NUMBER [1N];(#.02) RENDERING PROV NAME [2F];(#.03) RENDERING PROV NPI [3F]
 ..; (#.04)RENDERING PROV TAXONOMY CODE [4F] ^
 ..D GETS^DIQ(162.579,FBLIPRV_","_FBINVIEN_",",FBFLDS2,"I","FBRET2","FBERR")  ;162.579(#79) LINE ITEM RENDERING PROV
 ..I $G(FBERR("DIERR"))'="" S FBQUIT=1
 ..I 'FBQUIT D
 ...S FBINVARY("LINE ITEM NUMBER",FBLIPRV)=$G(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".01","I"))
 ...S FBINVARY("LIRENDER NAME",FBLIPRV)=$G(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".02","I"))
 ...S FBINVARY("LIRENDER NPI",FBLIPRV)=$G(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".03","I"))
 ...S FBINVARY("LIRENDER TXY",FBLIPRV)=$G(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".04","I"))
 Q 'FBQUIT
 ;
GETFBPAY(FBPAYIEN,FBPAYARY)  ;Get info about a record in FEE BASIS PAYMENT file
 ;
 ; INPUT :FBPAYIEN   a four piece string that will identify the SERVICE
 ;        FBPAYARY  an empty array passed by reference
 ;
 ; OUTPUT : FBPAYARY :  populated with information about this sub-record
 ;          0 if problems occurred, 1 otherwise
 N FBIENS,FBFLDS,FBQUIT,FBRET,FBERR1
 ;
 S FBQUIT=0
 S FBIENS=$P(FBPAYIEN,";",2)_","_$P(FBPAYIEN,";",1)_","   ;THE PATIENT:VENDOR sub-record id
 D GETS^DIQ(162.01,FBIENS,".01","I","FBRET","FBERR1") ;162.01 FEE BASIS PAYMENT FILE:(#.01) VENDOR subrecord
 I $G(FBERR1("DIERR"))'="" S FBQUIT=1
 I 'FBQUIT D
 .S FBPAYARY("VENDOR INTERNAL")=$G(FBRET(162.01,FBIENS,".01","I"))
 .;
 .S FBIENS=$P(FBPAYIEN,";",3)_","_FBIENS
 .D GETS^DIQ(162.02,FBIENS,".01","I","FBRET","FBERR1") ;162.02 (#.01) INITIAL TREATMENT DATE [1D]
 .I $G(FBERR1("DIERR"))'="" S FBQUIT=1
 .S FBPAYARY("TREATMENT DATE")=$G(FBRET(162.02,FBIENS,".01","I"))
 .;
 .I 'FBQUIT D
 ..S FBIENS=$P(FBPAYIEN,";",4)_","_FBIENS
 ..S FBFLDS="7;54;58;59;60;61;62;63;64;65;66;67;68;69;73;74;75;76;77;78;79"
 ..D GETS^DIQ(162.03,FBIENS,FBFLDS,"I","FBRET","FBERR1")  ;162.03  ; (#2) SERVICE PROVIDED
 ..I $G(FBERR1("DIERR"))'="" S FBQUIT=1
 ..Q:FBQUIT
 ..S FBPAYARY("BATCH NUMBER")=$G(FBRET(162.03,FBIENS,"7","I"))
 ..S FBPAYARY("LI NUMBER")=$P(FBPAYIEN,";",4)
 ..S FBPAYARY("CONTRACT")=$G(FBRET(162.03,FBIENS,"54","I"))
 ..S FBPAYARY("ATTENDING NAME")=$G(FBRET(162.03,FBIENS,"58","I"))
 ..S FBPAYARY("ATTENDING NPI")=$G(FBRET(162.03,FBIENS,"59","I"))
 ..S FBPAYARY("ATTENDING TXY")=$G(FBRET(162.03,FBIENS,"60","I"))
 ..S FBPAYARY("OPERATING NAME")=$G(FBRET(162.03,FBIENS,"61","I"))
 ..S FBPAYARY("OPERATING NPI")=$G(FBRET(162.03,FBIENS,"62","I"))
 ..S FBPAYARY("RENDERING NAME")=$G(FBRET(162.03,FBIENS,"63","I"))
 ..S FBPAYARY("RENDERING NPI")=$G(FBRET(162.03,FBIENS,"64","I"))
 ..S FBPAYARY("RENDERING TXY")=$G(FBRET(162.03,FBIENS,"65","I"))
 ..S FBPAYARY("SERVICING NAME")=$G(FBRET(162.03,FBIENS,"66","I"))
 ..S FBPAYARY("SERVICING NPI")=$G(FBRET(162.03,FBIENS,"67","I"))
 ..S FBPAYARY("REFERRING NAME")=$G(FBRET(162.03,FBIENS,"68","I"))
 ..S FBPAYARY("REFERRING NPI")=$G(FBRET(162.03,FBIENS,"69","I"))
 ..S FBPAYARY("LI RENDERING NAME")=$G(FBRET(162.03,FBIENS,"73","I"))
 ..S FBPAYARY("LI RENDERING NPI")=$G(FBRET(162.03,FBIENS,"74","I"))
 ..S FBPAYARY("LI RENDERING TXY")=$G(FBRET(162.03,FBIENS,"75","I"))
 ..S FBPAYARY("SERVICING ADDRESS")=$G(FBRET(162.03,FBIENS,"76","I"))
 ..S FBPAYARY("SERVICING CITY")=$G(FBRET(162.03,FBIENS,"77","I"))
 ..S FBPAYARY("SERVICING STATE INT")=$G(FBRET(162.03,FBIENS,"78","I"))
 ..S FBPAYARY("SERVICING ZIP")=$G(FBRET(162.03,FBIENS,"79","I"))
 Q 'FBQUIT
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HFBPAID3   16758     printed  Sep 23, 2025@19:35:29                                                                                                                                                                                                    Page 2
FBPAID3   ;DSS/SCR - Utilities to support FEE BASIS PAID TO IB Process ;3/28/1012
 +1       ;;3.5;FEE BASIS;**135**;JAN 30, 1995;Build 3
 +2       ;;Per VHA Directive 2004-038, this routine should not be modified.
 +3       ;
 +4       ;  DBIA SUPPORTED REF INSUR^IBBAPI
 +5       ;                     ELIG^VADPT
 +6       ;
 +7        QUIT 
 +8       ;
IBALLWD() ;EP FROM FBPAID
 +1       ; RETURNS 1 if lines should be added to the FEE BASIS PAID TO IB file for further processing
 +2       ;           by scheduled background job FB PAID TO IB
 +3       ;         0 if the site has not set the site parameter to allow updates OR db errors occur
 +4       ;
 +5        NEW FBIEN,FBRETRN,FBERR
 +6       ;
 +7       ;DON'T ALLOW new entries to FEE BASIS PAID TO IB file...
           SET FBRETRN=0
 +8        SET FBIEN=$ORDER(^FBAA(161.4,0))
 +9       ;if "" or 1 is returned updates ok
           if +FBIEN
               SET FBRETRN=$$GET1^DIQ(161.4,FBIEN_",",40,"I","","FBERR")
 +10       IF $GET(FBERR("DIERR"))'=""
               SET FBRETRN=0
 +11      ;Site must set parameter to make interface work initially
           if FBRETRN=""
               SET FBRETRN=0
 +12       QUIT FBRETRN
 +13      ;
 +14      ;
ADDONE(FBPROG,FBIEN,FBPAT,FBDATE) ;EP FROM FBPAID
 +1       ; INPUT  : FBPROG : "3" FOR OUTPATIENT, "9" FOR INPATIENT
 +2       ;          FBIEN  : AN ARRAY SET UP FROM THE PARSING ROUTINE IN FBPAID1
 +3       ;          FBPAT  : POINTER TO THE PATIENT FILE
 +4       ;          FBDATE : DATE OF MM MESSAGE FROM CENTRAL FEE PROCESSING
 +5       ;
 +6       ; OUPUT  : ien of new entry or -1 if problems occur
 +7       ;
 +8        NEW FBARRY,FBOK,FBERR
 +9       ;
 +10      ;INTERNAL
           SET FBARRY("PATIENT")=FBPAT
 +11       SET FBARRY("PROGRAM")=FBPROG
 +12       IF $GET(FBPROG)=3
               Begin DoDot:1
 +13               SET FBARRY("FBICN")=$GET(FBIEN(3))_";"_$GET(FBIEN(2))_";"_$GET(FBIEN(1))_";"_$GET(FBIEN)
 +14               SET FBARRY("LI NUMBER")=FBIEN
               End DoDot:1
 +15       IF $GET(FBPROG)=9
               Begin DoDot:1
 +16               SET FBARRY("FBICN")=FBIEN
 +17      ;S FBARRY("LI NUMBER")=1   ;There can be up to 25 line items in the same record
               End DoDot:1
 +18      ;INTERNAL Date message started getting processed
           SET FBARRY("PROCESS DATE")=FBDATE
 +19      ;returns the ien of a new line, or -1
           SET FBOK=$$SETFB2IB("",.FBARRY)
 +20       QUIT FBOK
 +21      ;
EPFBTOIB(FBDATEIN) ;EP FROM FB PAID TO IB OPTION
 +1       ;  INPUT : FBDATEIN - OPTIONAL and not supplied by the OPTION if sent
 +2       ;                      this should be 'DATE OF LAST GOOD RUN' 
 +3       ;                   - all dates after this date will be re-processed in the
 +4       ;                       FEE BASIS PAID TO IB file
 +5       ;                       
 +6        NEW FBIEN,FBTEST,FBQUIT,FBOK,FBIEN3,FBDATE,FBTODAY
 +7        SET FBTODAY=DT
 +8       ;
 +9        DO CLEANUP(FBTODAY)
 +10      ;temporary global to hold info for each date to be processed
           KILL ^TMP($JOB,"FBPAID3")
 +11      ; 
 +12       IF $GET(FBDATEIN)=""
               Begin DoDot:1
 +13               SET FBQUIT=0
 +14               SET FBDATE=""
 +15               SET FBDATE=$ORDER(^FB(161.9,"AC",FBDATE),-1)
 +16      ;FIND LAST PROCCESSED DATE BY LOOKING AT NPI ADDED field which is always populated when processed
 +17               if FBDATE=""
                       SET FBQUIT=1
 +18               FOR 
                       if FBQUIT
                           QUIT 
                       Begin DoDot:2
 +19                       SET FBIEN=0
 +20                       SET FBIEN=$ORDER(^FB(161.9,"AC",FBDATE,FBIEN))
 +21                       IF $$GET1^DIQ(161.9,FBIEN_",",.08,"I","","")'=""
                               SET FBQUIT=1
 +22                       if FBQUIT
                               QUIT 
 +23                       SET FBDATE=$ORDER(^FB(161.9,"AC",FBDATE),-1)
 +24                       IF FBDATE=""
                               SET FBQUIT=1
                       End DoDot:2
 +25      ;then I have found a date that has been processed, stepped back one and then quit...
                   SET FBDATE=$ORDER(^FB(161.9,"AC",FBDATE))
               End DoDot:1
 +26       IF $GET(FBDATEIN)'=""
               SET FBDATE=FBDATEIN
 +27      ;NO UNPROCESSED RECORDS
           if FBDATE=""
               QUIT 
 +28       FOR 
               if (FBDATE="")
                   QUIT 
               Begin DoDot:1
 +29               SET FBIEN3=0
 +30               FOR 
                       SET FBIEN3=$ORDER(^FB(161.9,"AC",FBDATE,FBIEN3))
                       if '+FBIEN3
                           QUIT 
                       SET ^TMP($JOB,"FBPAID3",FBDATE,FBIEN3)=""
 +31               DO SCRUB2IB(FBDATE)
 +32               KILL ^TMP($JOB,"FBPAID3",FBDATE)
 +33               SET FBDATE=$ORDER(^FB(161.9,"AC",FBDATE))
               End DoDot:1
 +34       QUIT 
 +35      ;
CLEANUP(FBDATE) ;delete entries from 161.9 older than 180 days from FBDATE
 +1       ; INPUT : FBDATE - Today's date
 +2       ;
 +3       ;
 +4        NEW FBIEN,FBOLDATE
 +5       ;
 +6        NEW X1,X2,X,%H,DA,DIK,DIE,DR
 +7       ;
 +8        SET X1=FBDATE
 +9        SET X2=-179
 +10       DO C^%DTC
 +11      ;THE FM DATE 179 DAYS BEFORE FBDATE
           SET FBOLDATE=X
 +12      ;
 +13       FOR 
               SET FBOLDATE=$ORDER(^FB(161.9,"AC",FBOLDATE),-1)
               if FBOLDATE=""
                   QUIT 
               Begin DoDot:1
 +14               SET FBIEN=0
 +15               FOR 
                       SET FBIEN=$ORDER(^FB(161.9,"AC",FBOLDATE,FBIEN))
                       if FBIEN=""
                           QUIT 
                       DO DELFB2IB(FBIEN)
               End DoDot:1
 +16       QUIT 
 +17      ;
SCRUB2IB(FBDATE) ; process entries in 161.9 for this process date
 +1       ;
 +2       ; INPUT  : FBDATE - Process date in FEE BASIS PAID TO IB file
 +3       ;
 +4       ; OUTUPT : 1 indication processing is complete
 +5       ;
 +6        NEW FBIEN2,FBCHECK,FBPATARY,FBARRY,FBPAT,FBXIEN,FBNXT,FBRECARY,FBINSRET,FBTRTDT,FBDATE2,FBLINUM
 +7       ;
 +8       ; FBCHECK,FBARRY and FBRECARY are all arrays that keep persistent information
 +9       ;   through subroutine calls and are always passed by reference
 +10      ; 
 +11       SET FBIEN2=0
 +12      ;
 +13      ;the three piece string of info to use if NPI is blank
           SET FBCHECK(0)="^0^0"
 +14      ;
 +15       FOR 
               SET FBIEN2=$ORDER(^TMP($JOB,"FBPAID3",FBDATE,FBIEN2))
               if FBIEN2=""
                   QUIT 
               Begin DoDot:1
 +16               SET FBOK=$$GETFB2IB(FBIEN2,.FBARRY)
 +17               SET FBPAT=$GET(FBARRY("PATIENT INTERNAL"))
 +18               if '+FBPAT
                       QUIT 
 +19      ;(IF SC RETURNS 1, WE WANT 0)
                   if $GET(FBPATARY(FBPAT,0))=""
                       SET FBPATARY(FBPAT,0)='$$FBSC(FBPAT)
 +20               SET FBPATARY(FBPAT,FBIEN2)=""
 +21               if FBPATARY(FBPAT,0)=0
                       QUIT 
 +22               SET FBPROG=$GET(FBARRY("PROGRAM INTERNAL"))
 +23               SET FBICN=$GET(FBARRY("FBICN"))
 +24               SET FBLINUM=$GET(FBARRY("LI NUMBER"))
 +25      ;FLAGS IF DB CALLS RETURN WITH PROBLEMS
                   SET FBOK=0
 +26               IF FBPROG=9
                       Begin DoDot:2
 +27                       SET FBOK=$$GETFBINV(FBICN,.FBRECARY)
 +28                       if 'FBOK
                               QUIT 
 +29                       SET FBTRTDT=FBRECARY("TREATMENT FROM DATE")
 +30                       if $GET(FBPATARY(FBPAT,"STRTDT",FBTRTDT))=""
                               SET FBPATARY(FBPAT,"STRTDT",FBTRTDT)=$$INSUR^IBBAPI(FBPAT,FBTRTDT,"I",.FBINSRET)
 +31                       SET FBPATARY(FBPAT,FBIEN2)=FBPATARY(FBPAT,"STRTDT",FBTRTDT)
                       End DoDot:2
 +32      ;
 +33               IF FBPROG=3
                       Begin DoDot:2
 +34                       SET FBOK=$$GETFBPAY(FBICN,.FBRECARY)
 +35                       if 'FBOK
                               QUIT 
 +36                       SET FBTRTDT=FBRECARY("TREATMENT DATE")
 +37                       if $GET(FBPATARY(FBPAT,"TRTDT",FBTRTDT))=""
                               SET FBPATARY(FBPAT,"TRTDT",FBTRTDT)=$$INSUR^IBBAPI(FBPAT,FBTRTDT,"O",.FBINSRET)
 +38                       SET FBPATARY(FBPAT,FBIEN2)=FBPATARY(FBPAT,"TRTDT",FBTRTDT)
                       End DoDot:2
 +39      ;
 +40               if 'FBOK
                       QUIT 
 +41      ;get rid of this record
                   IF $GET(FBRECARY("CONTRACT"))'=""
                       SET FBPATARY(FBPAT,FBIEN2)=-1
 +42               if $GET(FBRECARY("CONTRACT"))'=""
                       QUIT 
 +43      ;get rid of this record since no valid INPATIENT insurance on 'start date'
                   if FBPATARY(FBPAT,FBIEN2)=0
                       QUIT 
 +44               IF FBPATARY(FBPAT,FBIEN2)=1
                       DO PRCFBREC^FBPAID3A(FBIEN2,.FBRECARY,.FBARRY,.FBCHECK)
               End DoDot:1
 +45      ;NOW REMOVE EACH RECORD EACH PATIENT THAT HAS SC STATUS from FEE BASIS PAID TO IB and from local array 
 +46       SET FBPAT=0
 +47       FOR 
               SET FBPAT=$ORDER(FBPATARY(FBPAT))
               if '+FBPAT
                   QUIT 
               Begin DoDot:1
 +48      ;IF THIS PERSON HAS SERVICE CONNECTED STATUS, KILL ALL HIS/HER ENTRIES
 +49               IF $GET(FBPATARY(FBPAT,0))=0
                       Begin DoDot:2
 +50                       SET FBXIEN=0
 +51                       FOR 
                               SET FBXIEN=$ORDER(FBPATARY(FBPAT,FBXIEN))
                               if '+FBXIEN
                                   QUIT 
                               DO DELFB2IB(FBXIEN)
 +52                       KILL FBPATARY(FBPAT)
                       End DoDot:2
 +53      ;IF THIS PERSON DOES NOT HAVE APPROPRIATE COVERAGE ON THE DATE OF SERVICE, KILL THIS LINE
 +54               IF $GET(FBPATARY(FBPAT,0))=1
                       Begin DoDot:2
 +55                       SET FBXIEN=0
 +56                       FOR 
                               SET FBXIEN=$ORDER(FBPATARY(FBPAT,FBXIEN))
                               if '+FBXIEN
                                   QUIT 
                               Begin DoDot:3
 +57                               IF $GET(FBPATARY(FBPAT,FBXIEN))<=0
                                       Begin DoDot:4
 +58                                       DO DELFB2IB(FBXIEN)
 +59                                       KILL FBPATARY(FBPAT,FBXIEN)
                                       End DoDot:4
                               End DoDot:3
                       End DoDot:2
 +60               SET FBXIEN=0
 +61      ;NOW KILL ANY REMAINING ENTRIES FOR THIS PATIENT THAT ARE FOR CONTRACTED SERVICES
 +62               FOR 
                       SET FBXIEN=$ORDER(FBPATARY(FBPAT,FBXIEN))
                       if '+FBXIEN
                           QUIT 
                       Begin DoDot:2
 +63                       IF $GET(FBPATARY(FBPAT,FBXIEN))<=0
                               Begin DoDot:3
 +64                               DO DELFB2IB(FBXIEN)
 +65                               KILL FBPATARY(FBPAT,FBXIEN)
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +66       QUIT 
 +67      ;
SETFB2IB(FBIEN,FBARRY) ;ADD OR UPDATE A RECORD TO 161.9 FEE BASIS PAID TO IB FILE
 +1       ;SETS FIELD VALUES INTO 161.9 -- FEE BASIS PAID TO IB FILE
 +2       ;
 +3       ; INPUT : FBIEN : IF "" a new entry will be created ELSE an EXISTING entry will be updated
 +4       ;         FBARRY - AN ARRAY OF INFORMATION IN INTERNAL FORMAT THAT WILL BE SET INTO THE NEW RECORD W/O VALIDATION
 +5       ;
 +6       ;         FBERR  - Empty array passed by reference which is populated if DB errors occur
 +7       ;
 +8        NEW FBFDA,FBOK,FBIENRET,FBERR
 +9       ;
 +10       SET FBOK=1
 +11       IF FBIEN=""
               Begin DoDot:1
 +12               SET FBFDA(161.9,"+1,",.01)=$GET(FBARRY("PATIENT"))
 +13               SET FBFDA(161.9,"+1,",.02)=$GET(FBARRY("PROGRAM"))
 +14               SET FBFDA(161.9,"+1,",.03)=$GET(FBARRY("FBICN"))
 +15               SET FBFDA(161.9,"+1,",.04)=$GET(FBARRY("PROCESS DATE"))
 +16               SET FBFDA(161.9,"+1,",.05)=$GET(FBARRY("LI NUMBER"))
 +17               DO UPDATE^DIE("","FBFDA","FBIENRET","FBERR")
               End DoDot:1
 +18       IF FBIEN'=""
               Begin DoDot:1
 +19               SET FBFDA(161.9,FBIEN_",",.05)=$GET(FBARRY("LI NUMBER"))
 +20               SET FBFDA(161.9,FBIEN_",",.06)=$GET(FBARRY("PROVIDER TYPE"))
 +21               SET FBFDA(161.9,FBIEN_",",.07)=$GET(FBARRY("IBICN"))
 +22               SET FBFDA(161.9,FBIEN_",",.08)=$GET(FBARRY("NPI ADDED"))
 +23               SET FBFDA(161.9,FBIEN_",",.09)=$GET(FBARRY("TXY ADDED"))
 +24               DO FILE^DIE("","FBFDA","FBERR")
               End DoDot:1
 +25      ;
 +26       IF $GET(FBERR("DIERR"))=""
               Begin DoDot:1
 +27      ;THE IEN WHICH WAS JUST ADDED
                   if $GET(FBIENRET(1))'=""
                       SET FBOK=FBIENRET(1)
 +28               if $GET(FBIENRET(1))=""
                       SET FBOK=FBIEN
               End DoDot:1
 +29       IF $GET(FBERR("DIERR"))'=""
               SET FBOK=-1
 +30      ;RETURNS IEN JUST ADDED OR UPDATED OR -1
           QUIT FBOK
 +31      ;
GETFB2IB(FBIEN,FBARRY) ;GETS FIELD VALUES FROM 161.9 FEE BASIS PAID TO IB FILE
 +1       ;
 +2       ; INPUT: FBIEN - THE IEN OF THE FEE BASIS PAID TO IB FILE INFORMAITON IS DESIRED FOR
 +3       ;        FBARRY - AN EMPTY ARRAY PASSED BY REFERENCE 
 +4       ;
 +5       ; OUTPUT FBARRY :  POPULATED WITH INFO ABOUT THIS IEN
 +6       ;
 +7        NEW FBIENS,FBFLDS,FBRET,FBOK,FBERR
 +8       ;
 +9        SET FBOK=1
 +10      ;
 +11      ; FB INTERNAL CONTROL NUMBER [4F]
 +12      ;^ 
 +13      ;^  ^
 +14      ;
 +15       DO GETS^DIQ(161.9,FBIEN_",","*","EI","FBRET","FBERR")
 +16       IF $GET(FBERR("DIERR"))'=""
               SET FBOK=-1
 +17      ;NO SUCH RECORD IEN
           IF $GET(FBRET(161.9,FBIEN_",",".01","I"))=""
               SET FBOK=0
 +18      ;
 +19       IF FBOK
               Begin DoDot:1
 +20               SET FBARRY("PATIENT")=$GET(FBRET(161.9,FBIEN_",",".01","E"))
 +21      ;(#.01) ENTRY ID [1N]
                   SET FBARRY("PATIENT INTERNAL")=$GET(FBRET(161.9,FBIEN_",",".01","I"))
 +22      ;
                   SET FBARRY("PROGRAM")=$GET(FBRET(161.9,FBIEN_",",".02","E"))
 +23      ;(#.02) PATIENT [2P:2]
                   SET FBARRY("PROGRAM INTERNAL")=$GET(FBRET(161.9,FBIEN_",",".02","I"))
 +24      ;(#.03)PROGRAM [3S]
                   SET FBARRY("FBICN")=$GET(FBRET(161.9,FBIEN_",",".03","E"))
 +25      ;
                   SET FBARRY("PROCESS DATE")=$GET(FBRET(161.9,FBIEN_",",".04","E"))
 +26      ;(#.04)FB INTERNAL CONTROL NUMBER [4F]
                   SET FBARRY("PROCESS DATE INTERNAL")=$GET(FBRET(161.9,FBIEN_",",".04","I"))
 +27      ;(#.05) PROCESS DATE [5D] 
                   SET FBARRY("LI NUMBER")=$GET(FBRET(161.9,FBIEN_",",".05","E"))
 +28      ;(#.06) PROVIDER TYPE [6S]
                   SET FBARRY("PROVIDER TYPE")=FBRET(161.9,FBIEN_",",".06","E")
 +29      ;(#.07) IB NON/OTHER PNTR[7P] 
                   SET FBARRY("IBICN")=$GET(FBRET(161.9,FBIEN_",",".07","E"))
 +30               SET FBARRY("NPI ADDED")=$GET(FBRET(161.9,FBIEN_",",".08","E"))
 +31      ;(#.08) NPI ADDED [8S]
                   SET FBARRY("NPI ADDED INTERNAL")=$GET(FBRET(161.9,FBIEN_",",".08","I"))
 +32      ;
                   SET FBARRY("TXY ADDED")=$GET(FBRET(161.9,FBIEN_",",".09","E"))
 +33      ;(#.09) TAXONOMY ADDED [9S] 
                   SET FBARRY("TXY ADDED INTERNAL")=$GET(FBRET(161.9,FBIEN_",",".09","I"))
               End DoDot:1
 +34      ;
 +35       IF 'FBOK
               KILL FBARRY
 +36      ;
 +37       QUIT FBOK
 +38      ;
DELFB2IB(FBIEN) ;EP FROM FBPAID3A
 +1       ;DELETES A RECORD FROM 161.9 FEE BASIS PAID TO IB FILE
 +2       ;
 +3       ; INPUT: FBIEN - The IEN of the FEE BASIS PAID TO IB FILE to be deleted
 +4       ;
 +5        NEW DIK,DA
 +6        SET DIK="^FB(161.9,"
 +7        SET DA=FBIEN
 +8        DO ^DIK
 +9        QUIT 
 +10      ;
FBSC(FBDFN) ; returns 1 if service connection indicated, 0 otherwise (based on VAEL(3))
 +1       ; INPUT : FBDFN - ien to the PATIENT file
 +2       ;
 +3       ; OUTPUT : 1 if service connected, 0 if NO service connected
 +4        NEW FBX,VAEL,VAERR,DFN
 +5        SET FBX=0
 +6        SET DFN=FBDFN
 +7        IF +$GET(DFN)
               DO ELIG^VADPT
               SET FBX=$PIECE($GET(VAEL(3)),U,1)
 +8        QUIT FBX
 +9       ;
GETFBINV(FBINVIEN,FBINVARY) ;Get info about a record in FEE BASIS INVOICE file
 +1       ;
 +2       ; INPUT :FBINVIEN   the ien we wish to examine
 +3       ;        FBINVARY  an empty array passed by reference 
 +4       ;
 +5       ; OUTPUT : FBINVARY : populated with information about this record
 +6       ;
 +7        NEW FBFLDS,FBQUIT,FBLIPRV,FBERR,FBFLDS2,FBRET,FBRET2
 +8       ;
 +9        SET FBQUIT=0
 +10      ;
 +11       SET FBFLDS=".01;2;5;6;20;60;64;65;66;67;68;69;70;71;72;73;74;75;80;81;82;83"
 +12      ;(#2)VENDOR [3P:161.2] ;THIS IS OUR PRIMARY PROVIDER
 +13      ;(#5) TREATMENT FROM DATE [6D] ^ (#6) TREATMENT TO DATE [7D] 
 +14      ;(#20) BATCH NUMBER ; (#60) CONTRACT [8P:161.43] 
 +15      ;(#64) ATTENDING PROV NAME [1F] ^ (#65) ATTENDING PROV NPI [2F](#66) ATTENDING PROV TAXONOMY CODE [3F] ^ 
 +16      ;(#67) OPERATING PROV NAME [4F] ^ (#68) OPERATING PROV NPI [5F]
 +17      ; (#69)RENDERING PROV NAME [6F] ^ (#70) RENDERING PROV NPI [7F] ^(#71) RENDERING PROV TAXONOMY CODE [8F] 
 +18      ;(#72) SERVICING PROVNAME [9F] ^ (#73) SERVICING PROV NPI [10F] 
 +19      ;(#74) REFERRING PROV NAME [11F] ^ (#75) REFERRING PROV NPI [12F];(#80) SERVICING FACILITY ADDRESS [1F]
 +20      ;(#81) SERVICING FACILITY CITY [2F] ^ (#82) SERVICING FACILITY STATE [3P:5] ^ (#83) SERVICING FACILITY ZIP [4F]
 +21       DO GETS^DIQ(162.5,FBINVIEN_",",FBFLDS,"I","FBRET","FBERR")
 +22       IF $GET(FBERR("DIERR"))'=""
               SET FBQUIT=1
 +23       IF 'FBQUIT
               Begin DoDot:1
 +24               SET FBINVARY("VENDOR INTERNAL")=$GET(FBRET(162.5,FBINVIEN_",","2","I"))
 +25               SET FBINVARY("TREATMENT FROM DATE")=$GET(FBRET(162.5,FBINVIEN_",","5","I"))
 +26               SET FBINVARY("TREATMENT TO DATE")=$GET(FBRET(162.5,FBINVIEN_",","6","I"))
 +27               SET FBINVARY("BATCH NUMBER")=$GET(FBRET(162.5,FBINVIEN_",","20","I"))
 +28               SET FBINVARY("CONTRACT")=$GET(FBRET(162.5,FBINVIEN_",","60","I"))
 +29               SET FBINVARY("ATTENDING NAME")=$GET(FBRET(162.5,FBINVIEN_",","64","I"))
 +30               SET FBINVARY("ATTENDING NPI")=$GET(FBRET(162.5,FBINVIEN_",","65","I"))
 +31               SET FBINVARY("ATTENDING TXY")=$GET(FBRET(162.5,FBINVIEN_",","66","I"))
 +32               SET FBINVARY("OPERATING NAME")=$GET(FBRET(162.5,FBINVIEN_",","67","I"))
 +33               SET FBINVARY("OPERATING NPI")=$GET(FBRET(162.5,FBINVIEN_",","68","I"))
 +34               SET FBINVARY("RENDERING NAME")=$GET(FBRET(162.5,FBINVIEN_",","69","I"))
 +35               SET FBINVARY("RENDERING NPI")=$GET(FBRET(162.5,FBINVIEN_",","70","I"))
 +36               SET FBINVARY("RENDERING TXY")=$GET(FBRET(162.5,FBINVIEN_",","71","I"))
 +37               SET FBINVARY("SERVICING NAME")=$GET(FBRET(162.5,FBINVIEN_",","72","I"))
 +38               SET FBINVARY("SERVICING NPI")=$GET(FBRET(162.5,FBINVIEN_",","73","I"))
 +39               SET FBINVARY("REFERRING NAME")=$GET(FBRET(162.5,FBINVIEN_",","74","I"))
 +40               SET FBINVARY("REFERRING NPI")=$GET(FBRET(162.5,FBINVIEN_",","75","I"))
 +41               SET FBINVARY("SERVICING ADDRESS")=$GET(FBRET(162.5,FBINVIEN_",","80","I"))
 +42               SET FBINVARY("SERVICING CITY")=$GET(FBRET(162.5,FBINVIEN_",","81","I"))
 +43               SET FBINVARY("SERVICING STATE INT")=$GET(FBRET(162.5,FBINVIEN_",","82","I"))
 +44               SET FBINVARY("SERVICING ZIP")=$GET(FBRET(162.5,FBINVIEN_",","83","I"))
 +45      ;kill any existing LI info, because it may not get overwritten like the above
 +46               KILL FBINVARY("LIRENDER NAME")
 +47               KILL FBINVARY("LIRENDER NPI")
 +48               KILL FBINVARY("LIRENDER TXY")
 +49      ;
 +50      ;NOW GET LI RENDERING PROVIDER INFO
 +51               SET FBLIPRV=0
 +52               FOR 
                       SET FBLIPRV=$ORDER(^FBAAI(FBINVIEN,"RPROV",FBLIPRV))
                       if '+FBLIPRV
                           QUIT 
                       Begin DoDot:2
 +53                       SET FBFLDS2=".01;.02;.03;.04"
 +54      ;(#.01) LINE ITEM NUMBER [1N];(#.02) RENDERING PROV NAME [2F];(#.03) RENDERING PROV NPI [3F]
 +55      ; (#.04)RENDERING PROV TAXONOMY CODE [4F] ^
 +56      ;162.579(#79) LINE ITEM RENDERING PROV
                           DO GETS^DIQ(162.579,FBLIPRV_","_FBINVIEN_",",FBFLDS2,"I","FBRET2","FBERR")
 +57                       IF $GET(FBERR("DIERR"))'=""
                               SET FBQUIT=1
 +58                       IF 'FBQUIT
                               Begin DoDot:3
 +59                               SET FBINVARY("LINE ITEM NUMBER",FBLIPRV)=$GET(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".01","I"))
 +60                               SET FBINVARY("LIRENDER NAME",FBLIPRV)=$GET(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".02","I"))
 +61                               SET FBINVARY("LIRENDER NPI",FBLIPRV)=$GET(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".03","I"))
 +62                               SET FBINVARY("LIRENDER TXY",FBLIPRV)=$GET(FBRET2(162.579,FBLIPRV_","_FBINVIEN_",",".04","I"))
                               End DoDot:3
                       End DoDot:2
               End DoDot:1
 +63       QUIT 'FBQUIT
 +64      ;
GETFBPAY(FBPAYIEN,FBPAYARY) ;Get info about a record in FEE BASIS PAYMENT file
 +1       ;
 +2       ; INPUT :FBPAYIEN   a four piece string that will identify the SERVICE
 +3       ;        FBPAYARY  an empty array passed by reference
 +4       ;
 +5       ; OUTPUT : FBPAYARY :  populated with information about this sub-record
 +6       ;          0 if problems occurred, 1 otherwise
 +7        NEW FBIENS,FBFLDS,FBQUIT,FBRET,FBERR1
 +8       ;
 +9        SET FBQUIT=0
 +10      ;THE PATIENT:VENDOR sub-record id
           SET FBIENS=$PIECE(FBPAYIEN,";",2)_","_$PIECE(FBPAYIEN,";",1)_","
 +11      ;162.01 FEE BASIS PAYMENT FILE:(#.01) VENDOR subrecord
           DO GETS^DIQ(162.01,FBIENS,".01","I","FBRET","FBERR1")
 +12       IF $GET(FBERR1("DIERR"))'=""
               SET FBQUIT=1
 +13       IF 'FBQUIT
               Begin DoDot:1
 +14               SET FBPAYARY("VENDOR INTERNAL")=$GET(FBRET(162.01,FBIENS,".01","I"))
 +15      ;
 +16               SET FBIENS=$PIECE(FBPAYIEN,";",3)_","_FBIENS
 +17      ;162.02 (#.01) INITIAL TREATMENT DATE [1D]
                   DO GETS^DIQ(162.02,FBIENS,".01","I","FBRET","FBERR1")
 +18               IF $GET(FBERR1("DIERR"))'=""
                       SET FBQUIT=1
 +19               SET FBPAYARY("TREATMENT DATE")=$GET(FBRET(162.02,FBIENS,".01","I"))
 +20      ;
 +21               IF 'FBQUIT
                       Begin DoDot:2
 +22                       SET FBIENS=$PIECE(FBPAYIEN,";",4)_","_FBIENS
 +23                       SET FBFLDS="7;54;58;59;60;61;62;63;64;65;66;67;68;69;73;74;75;76;77;78;79"
 +24      ;162.03  ; (#2) SERVICE PROVIDED
                           DO GETS^DIQ(162.03,FBIENS,FBFLDS,"I","FBRET","FBERR1")
 +25                       IF $GET(FBERR1("DIERR"))'=""
                               SET FBQUIT=1
 +26                       if FBQUIT
                               QUIT 
 +27                       SET FBPAYARY("BATCH NUMBER")=$GET(FBRET(162.03,FBIENS,"7","I"))
 +28                       SET FBPAYARY("LI NUMBER")=$PIECE(FBPAYIEN,";",4)
 +29                       SET FBPAYARY("CONTRACT")=$GET(FBRET(162.03,FBIENS,"54","I"))
 +30                       SET FBPAYARY("ATTENDING NAME")=$GET(FBRET(162.03,FBIENS,"58","I"))
 +31                       SET FBPAYARY("ATTENDING NPI")=$GET(FBRET(162.03,FBIENS,"59","I"))
 +32                       SET FBPAYARY("ATTENDING TXY")=$GET(FBRET(162.03,FBIENS,"60","I"))
 +33                       SET FBPAYARY("OPERATING NAME")=$GET(FBRET(162.03,FBIENS,"61","I"))
 +34                       SET FBPAYARY("OPERATING NPI")=$GET(FBRET(162.03,FBIENS,"62","I"))
 +35                       SET FBPAYARY("RENDERING NAME")=$GET(FBRET(162.03,FBIENS,"63","I"))
 +36                       SET FBPAYARY("RENDERING NPI")=$GET(FBRET(162.03,FBIENS,"64","I"))
 +37                       SET FBPAYARY("RENDERING TXY")=$GET(FBRET(162.03,FBIENS,"65","I"))
 +38                       SET FBPAYARY("SERVICING NAME")=$GET(FBRET(162.03,FBIENS,"66","I"))
 +39                       SET FBPAYARY("SERVICING NPI")=$GET(FBRET(162.03,FBIENS,"67","I"))
 +40                       SET FBPAYARY("REFERRING NAME")=$GET(FBRET(162.03,FBIENS,"68","I"))
 +41                       SET FBPAYARY("REFERRING NPI")=$GET(FBRET(162.03,FBIENS,"69","I"))
 +42                       SET FBPAYARY("LI RENDERING NAME")=$GET(FBRET(162.03,FBIENS,"73","I"))
 +43                       SET FBPAYARY("LI RENDERING NPI")=$GET(FBRET(162.03,FBIENS,"74","I"))
 +44                       SET FBPAYARY("LI RENDERING TXY")=$GET(FBRET(162.03,FBIENS,"75","I"))
 +45                       SET FBPAYARY("SERVICING ADDRESS")=$GET(FBRET(162.03,FBIENS,"76","I"))
 +46                       SET FBPAYARY("SERVICING CITY")=$GET(FBRET(162.03,FBIENS,"77","I"))
 +47                       SET FBPAYARY("SERVICING STATE INT")=$GET(FBRET(162.03,FBIENS,"78","I"))
 +48                       SET FBPAYARY("SERVICING ZIP")=$GET(FBRET(162.03,FBIENS,"79","I"))
                       End DoDot:2
               End DoDot:1
 +49       QUIT 'FBQUIT