Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: FBAAIARC

FBAAIARC.m

Go to the documentation of this file.
  1. FBAAIARC ;ALB/ESG - FEE IPAC Vendor Payment Report (Detail) Compile continued ;2/4/2014
  1. ;;3.5;FEE BASIS;**123**;JAN 30, 1995;Build 51
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. Q
  1. ;
  1. COMPILE ; entry point for the compile to build the scratch global
  1. ; may be background task if job queued
  1. ;
  1. K ^TMP("FBAAIARB",$J)
  1. I '$D(ZTQUEUED) W !!,"Compiling IPAC Vendor Payment Report. Please wait ... "
  1. I $D(FBIATYPE("OUT"))!$D(FBIATYPE("ANC")) D COMPOUT ; outpatient/ancillary
  1. I $D(FBIATYPE("INP")) D COMPIN ; inpatient
  1. I $D(FBIATYPE("RX")) D COMPRX ; prescription
  1. ;
  1. D PRINT^FBAAIARD ; print report
  1. D ^%ZISC ; close the device
  1. K ^TMP("FBAAIARB",$J) ; kill scratch
  1. I $D(ZTQUEUED) S ZTREQ="@" ; purge the task
  1. COMPILX ;
  1. Q
  1. ;
  1. COMPOUT ; compile Outpatient and Ancillary data
  1. ;
  1. N DATA,FBDODINV,FBDT,FBJ,FBK,FBL,FBM,FBPTSSN,FBVENAME,FBVENID
  1. N FBY0,FBY2,FBY3,FBYREJ,FBZADJ,FBZDOS,FBZIENS,FBZPTNM,FBZTYPE,FEEPROG
  1. S FBDT=$O(^FBAAC("AK",FBIABEG),-1)
  1. F S FBDT=$O(^FBAAC("AK",FBDT)) Q:'FBDT!(FBDT>FBIAEND) D
  1. . S FBJ=0 F S FBJ=$O(^FBAAC("AK",FBDT,FBJ)) Q:'FBJ D ; FBJ=patient DFN
  1. .. S FBZPTNM=$P($G(^DPT(FBJ,0)),U,1) Q:FBZPTNM="" ; patient name for scratch global
  1. .. S FBPTSSN=$P($G(^DPT(FBJ,0)),U,9) ; full patient SSN
  1. .. S FBK=0 F S FBK=$O(^FBAAC("AK",FBDT,FBJ,FBK)) Q:'FBK D ; FBK=vendor ien
  1. ... I '$D(FBIAVEN(FBK)) Q ; make sure vendor is among the selected vendors for the report
  1. ... S FBVENAME=$P($G(^FBAAV(FBK,0)),U,1) ; vendor name
  1. ... I FBVENAME="" S FBVENAME="~unk"
  1. ... S FBVENID=$P($G(^FBAAV(FBK,0)),U,2) ; vendor external ID
  1. ... S FBL=0 F S FBL=$O(^FBAAC("AK",FBDT,FBJ,FBK,FBL)) Q:'FBL D
  1. .... S FBZDOS=+$P($G(^FBAAC(FBJ,1,FBK,1,FBL,0)),U,1) Q:'FBZDOS ; initial treatment date (DOS) for scratch global
  1. .... S FBM=0 F S FBM=$O(^FBAAC("AK",FBDT,FBJ,FBK,FBL,FBM)) Q:'FBM D
  1. ..... S FBY0=$G(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,0))
  1. ..... S FEEPROG=+$P(FBY0,U,9) ; Fee Program ptr
  1. ..... I FEEPROG=2,'$D(FBIATYPE("OUT")) Q ; Outpatient not a chosen type for report
  1. ..... I FEEPROG'=2,'$D(FBIATYPE("ANC")) Q ; Civil Hosp Ancillary not a chosen type for report
  1. ..... S FBZTYPE=$S(FEEPROG=2:"1-OUTPAT",1:"4-ANCIL") ; type subscript for scratch global
  1. ..... S FBY2=$G(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,2))
  1. ..... S FBY3=$G(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,3))
  1. ..... S FBYREJ=$G(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,"FBREJ"))
  1. ..... S FBDODINV=$P(FBY3,U,7) I FBDODINV="" Q ; DoD invoice# must be present
  1. ..... I FBIAIGNORE,$P(FBY2,U,4) Q ; cancellation date exists
  1. ..... I FBIAIGNORE,$P(FBY0,U,21)'="" Q ; line has been voided
  1. ..... I FBIAIGNORE,$P(FBYREJ,U,1)'="" Q ; line has been rejected
  1. ..... I FBIAADJ,$P(FBY0,U,3)'<$P(FBY0,U,2) Q ; skip paid in full line items
  1. ..... ;
  1. ..... S FBZIENS=FBM_","_FBL_","_FBK_","_FBJ_"," ; iens
  1. ..... S FBZADJ=$$ADJ(1)
  1. ..... S DATA=FBK
  1. ..... S $P(DATA,U,2)=FBVENID
  1. ..... S $P(DATA,U,3)=FBDT
  1. ..... S $P(DATA,U,4)=FBPTSSN
  1. ..... S $P(DATA,U,5)=$P($$CPT^ICPTCOD(+$P(FBY0,U,1),FBZDOS),U,2) ; CPT procedure code
  1. ..... S $P(DATA,U,6)=$$MODS ; comma-delimited list of CPT modifiers
  1. ..... S $P(DATA,U,7)=$$GET1^DIQ(162.03,FBZIENS,48) ; external 3 digit revenue code
  1. ..... S $P(DATA,U,8)=""
  1. ..... S $P(DATA,U,9)=""
  1. ..... S $P(DATA,U,10)="" ; these are Inpatient or Pharmacy fields
  1. ..... S $P(DATA,U,11)=""
  1. ..... S $P(DATA,U,12)=""
  1. ..... S $P(DATA,U,13)=""
  1. ..... S $P(DATA,U,14)=$P(FBY0,U,2) ; amount claimed
  1. ..... S $P(DATA,U,15)=$P(FBY0,U,3) ; amount paid
  1. ..... S $P(DATA,U,16)=$P(FBZADJ,U,1) ; adjustment amount #1
  1. ..... S $P(DATA,U,17)=$P(FBZADJ,U,2) ; adjustment group code-reason code #1
  1. ..... S $P(DATA,U,18)=$P(FBZADJ,U,3) ; adjustment amount #2
  1. ..... S $P(DATA,U,19)=$P(FBZADJ,U,4) ; adjustment group code-reason code #2
  1. ..... S $P(DATA,U,20)=$P(FBY0,U,16) ; fee invoice#
  1. ..... S $P(DATA,U,21)=$P($G(^FBAA(161.7,+$P(FBY0,U,8),0)),U,1) ; external batch#
  1. ..... S $P(DATA,U,22)=$P($G(^FBAA(161.7,+$P(FBY0,U,8),0)),U,2) ; obligation# from the batch file
  1. ..... S $P(DATA,U,23)=$P(FBY0,U,14) ; date paid
  1. ..... S $P(DATA,U,24)=$P(FBY2,U,3) ; check number
  1. ..... S $P(DATA,U,25)=$P(FBY2,U,8) ; disbursed amount
  1. ..... S $P(DATA,U,26)=$P(FBY2,U,4) ; cancellation date
  1. ..... S $P(DATA,U,27)=$S($P(FBY0,U,21)'="":1,1:0) ; voided payment flag
  1. ..... S $P(DATA,U,28)=$$GET1^DIQ(162.03,FBZIENS,19) ; reject status external value
  1. ..... ;
  1. ..... S ^TMP("FBAAIARB",$J,FBVENAME,FBZTYPE,FBDODINV,FBZDOS,FBZPTNM,FBZIENS)=DATA ; store data outpat/ancil
  1. ..... S ^TMP("FBAAIARB",$J,FBVENAME)=FBVENID
  1. ..... Q
  1. .... Q
  1. ... Q
  1. .. Q
  1. . Q
  1. COMPOUTX ;
  1. Q
  1. ;
  1. MODS() ; Build a list of CPT modifiers for subfile 162.03
  1. ; Assumes all variables are set from above
  1. N RET,FBN,MODIEN,MOD
  1. S RET=""
  1. S FBN=0 F S FBN=$O(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,"M",FBN)) Q:'FBN D
  1. . S MODIEN=+$P($G(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,"M",FBN,0)),U,1) Q:'MODIEN
  1. . S MOD=$P($$MOD^ICPTMOD(MODIEN,"I",FBZDOS),U,2) Q:MOD=""
  1. . S RET=$S(RET="":MOD,1:RET_","_MOD)
  1. . Q
  1. MODSX ;
  1. Q RET
  1. ;
  1. ADJ(TYPE) ; Builds a string of Adjustment amounts and group-reason codes
  1. ; TYPE indicates which payment file to look at to obtain adjustment information
  1. ; TYPE=1: 162.03 Outpatient/Ancillary
  1. ; TYPE=2: 162.5 Inpatient
  1. ; TYPE=3: 162.11 Pharmacy
  1. ;
  1. ; Returns a string:
  1. ; [1] adjustment amount #1
  1. ; [2] adjustment group code-reason code #1
  1. ; [3] adjustment amount #2
  1. ; [4] adjustment group code-reason code #2
  1. ;
  1. N RET,GLO,STOP,Z,G,AMT,GRP,RSN,X
  1. S RET="",GLO="",STOP=0
  1. I TYPE=1 S GLO=$NA(^FBAAC(FBJ,1,FBK,1,FBL,1,FBM,7))
  1. I TYPE=2 S GLO=$NA(^FBAAI(FBJ,8))
  1. I TYPE=3 S GLO=$NA(^FBAA(162.1,FBJ,"RX",FBK,4))
  1. I GLO="" G ADJX
  1. ;
  1. S Z=0 F S Z=$O(@GLO@(Z)) Q:'Z!STOP S G=$G(@GLO@(Z,0)) D
  1. . S AMT=$P(G,U,3) ; adj amount
  1. . S GRP=$P($G(^FB(161.92,+$P(G,U,2),0)),U,1) ; adj group code
  1. . S RSN=$P($G(^FB(161.91,+$P(G,U,1),0)),U,1) ; adj reason code
  1. . S X=GRP_"-"_RSN
  1. . I RET="" S RET=AMT_U_X Q ; 1st adjustment data pair
  1. . S $P(RET,U,3)=AMT
  1. . S $P(RET,U,4)=X
  1. . S STOP=1
  1. . Q
  1. ADJX ;
  1. Q RET
  1. ;
  1. COMPIN ; compile Inpatient data
  1. ;
  1. N DATA,DFN,FBDODINV,FBDT,FBJ,FBPTSSN,FBV,FBVENAME,FBVENID,FBY0,FBY2,FBY5,FBYREJ,FBZADJ,FBZDOS,FBZIENS,FBZPTNM,FBZTYPE
  1. S FBDT=$O(^FBAAI("AD",FBIABEG),-1)
  1. F S FBDT=$O(^FBAAI("AD",FBDT)) Q:'FBDT!(FBDT>FBIAEND) S FBJ=0 F S FBJ=$O(^FBAAI("AD",FBDT,FBJ)) Q:'FBJ D
  1. . S FBY0=$G(^FBAAI(FBJ,0))
  1. . S FBY2=$G(^FBAAI(FBJ,2))
  1. . S FBY5=$G(^FBAAI(FBJ,5))
  1. . S FBYREJ=$G(^FBAAI(FBJ,"FBREJ"))
  1. . S FBDODINV=$P(FBY5,U,7) I FBDODINV="" Q ; DoD invoice# must be present
  1. . S FBV=+$P(FBY0,U,3) ; vendor ien
  1. . I '$D(FBIAVEN(FBV)) Q ; vendor is not among the selected vendors for the report
  1. . S FBVENAME=$P($G(^FBAAV(FBV,0)),U,1) ; vendor name
  1. . I FBVENAME="" S FBVENAME="~unk"
  1. . S FBVENID=$P($G(^FBAAV(FBV,0)),U,2) ; vendor external ID
  1. . S DFN=+$P(FBY0,U,4) Q:'DFN
  1. . S FBZPTNM=$P($G(^DPT(DFN,0)),U,1) Q:FBZPTNM="" ; patient name
  1. . S FBPTSSN=$P($G(^DPT(DFN,0)),U,9) ; full patient SSN
  1. . S FBZIENS=FBJ_"," ; iens
  1. . S FBZDOS=$$B9ADMIT^FBAAV5(FBZIENS) ; admission date
  1. . I 'FBZDOS S FBZDOS=+$P(FBY0,U,6) ; treatment from date
  1. . I 'FBZDOS Q ; need to have a date of service
  1. . I FBIAIGNORE,$P(FBY2,U,5) Q ; cancelled
  1. . I FBIAIGNORE,$P(FBY0,U,14)'="" Q ; voided
  1. . I FBIAIGNORE,$P(FBYREJ,U,1)'="" Q ; rejected
  1. . I FBIAADJ,$P(FBY0,U,9)'<$P(FBY0,U,8) Q ; skip paid in full line items
  1. . ;
  1. . S FBZTYPE="2-INPAT"
  1. . S FBZADJ=$$ADJ(2)
  1. . S DATA=FBV
  1. . S $P(DATA,U,2)=FBVENID
  1. . S $P(DATA,U,3)=FBDT
  1. . S $P(DATA,U,4)=FBPTSSN
  1. . S $P(DATA,U,5)=""
  1. . S $P(DATA,U,6)=""
  1. . S $P(DATA,U,7)=""
  1. . S $P(DATA,U,8)=$P($$B9DISCHG^FBAAV5(FBZIENS),U,1) ; discharge date
  1. . S $P(DATA,U,9)=$$DIAG ; list of up to 25 Dx & POA codes
  1. . S $P(DATA,U,10)=$$ICD9^FBCSV1(+$P(FBY5,U,9),FBZDOS) ; admitting dx
  1. . S $P(DATA,U,11)=$$PROC ; list of up to 25 proc codes
  1. . S $P(DATA,U,12)=""
  1. . S $P(DATA,U,13)=""
  1. . S $P(DATA,U,14)=$P(FBY0,U,8) ; amount claimed
  1. . S $P(DATA,U,15)=$P(FBY0,U,9) ; amount paid
  1. . S $P(DATA,U,16)=$P(FBZADJ,U,1) ; adjustment amount #1
  1. . S $P(DATA,U,17)=$P(FBZADJ,U,2) ; adjustment group code-reason code #1
  1. . S $P(DATA,U,18)="" ; only 1 adj for inpatient
  1. . S $P(DATA,U,19)=""
  1. . S $P(DATA,U,20)=$P(FBY0,U,1) ; fee invoice number
  1. . S $P(DATA,U,21)=$P($G(^FBAA(161.7,+$P(FBY0,U,17),0)),U,1) ; external batch#
  1. . S $P(DATA,U,22)=$P($G(^FBAA(161.7,+$P(FBY0,U,17),0)),U,2) ; obligation# from the batch file
  1. . S $P(DATA,U,23)=$P(FBY2,U,1) ; Date Paid
  1. . S $P(DATA,U,24)=$P(FBY2,U,4) ; check number
  1. . S $P(DATA,U,25)=$P(FBY2,U,8) ; disbursed amount
  1. . S $P(DATA,U,26)=$P(FBY2,U,5) ; cancellation date
  1. . S $P(DATA,U,27)=$S($P(FBY0,U,14)'="":1,1:0) ; voided payment flag
  1. . S $P(DATA,U,28)=$$GET1^DIQ(162.5,FBZIENS,13) ; reject status external value
  1. . ;
  1. . S ^TMP("FBAAIARB",$J,FBVENAME,FBZTYPE,FBDODINV,FBZDOS,FBZPTNM,FBZIENS)=DATA ; store data inpatient
  1. . S ^TMP("FBAAIARB",$J,FBVENAME)=FBVENID
  1. . Q
  1. COMPINX ;
  1. Q
  1. ;
  1. DIAG() ; capture and format Dx codes and POA codes in a string
  1. N RET,P1,P2,PCE,DXN,POAN,DX,POA,Z
  1. S P1=$G(^FBAAI(FBJ,"DX")),P2=$G(^FBAAI(FBJ,"POA"))
  1. S RET=""
  1. F PCE=1:1:25 D
  1. . S DXN=+$P(P1,U,PCE),POAN=+$P(P2,U,PCE) Q:'DXN
  1. . S DX=$$ICD9^FBCSV1(DXN,FBZDOS) Q:DX="" ; external diag code
  1. . S POA=$P($G(^FB(161.94,POAN,0)),U,1) ; external POA indicator
  1. . S Z=DX
  1. . I POA'="" S Z=Z_"("_POA_")"
  1. . S RET=$S(RET="":Z,1:RET_", "_Z)
  1. . Q
  1. Q RET
  1. ;
  1. PROC() ; capture and format procedure codes into a string
  1. N RET,P1,PCE,PROCN,PROC
  1. S P1=$G(^FBAAI(FBJ,"PROC"))
  1. S RET=""
  1. F PCE=1:1:25 D
  1. . S PROCN=+$P(P1,U,PCE) Q:'PROCN ; ptr ien to file 80.1
  1. . S PROC=$$ICD0^FBCSV1(PROCN,FBZDOS) Q:PROC="" ; external procedure code
  1. . S RET=$S(RET="":PROC,1:RET_", "_PROC)
  1. . Q
  1. Q RET
  1. ;
  1. COMPRX ; compile Pharmacy data
  1. ;
  1. N BCH,DATA,DFN,FBDODINV,FBDT,FBIA,FBINVN,FBJ,FBK,FBPTSSN,FBRXINV,FBVEN,FBVENAME,FBVENID
  1. N FBY0,FBY2,FBY6,FBYREJ,FBZADJ,FBZDOS,FBZIENS,FBZPTNM,FBZTYPE
  1. ; loop thru batch file by date finalized for specified date range
  1. S FBDT=$O(^FBAA(161.7,"AF",FBIABEG),-1)
  1. F S FBDT=$O(^FBAA(161.7,"AF",FBDT)) Q:'FBDT!(FBDT>FBIAEND) D
  1. . S BCH=0 F S BCH=$O(^FBAA(161.7,"AF",FBDT,BCH)) Q:'BCH D
  1. .. ;
  1. .. ; loop thru the pharmacy (B5) payments for a batch
  1. .. S FBJ=0 F S FBJ=$O(^FBAA(162.1,"AE",BCH,FBJ)) Q:'FBJ D
  1. ... S FBRXINV=$G(^FBAA(162.1,FBJ,0)) ; rx invoice level data
  1. ... S FBVEN=+$P(FBRXINV,U,4) ; vendor ien
  1. ... I '$D(FBIAVEN(FBVEN)) Q ; vendor is not among the selected vendors for report
  1. ... S FBIA=+$P(FBRXINV,U,23) ; ipac ptr
  1. ... I 'FBIA Q ; ipac ptr must exist to be included on this report
  1. ... S FBINVN=$P(FBRXINV,U,1) ; Rx invoice#
  1. ... S FBVENAME=$P($G(^FBAAV(FBVEN,0)),U,1) ; vendor name
  1. ... I FBVENAME="" S FBVENAME="~unk"
  1. ... S FBVENID=$P($G(^FBAAV(FBVEN,0)),U,2) ; vendor external ID
  1. ... ;
  1. ... S FBK=0 F S FBK=$O(^FBAA(162.1,"AE",BCH,FBJ,FBK)) Q:'FBK D
  1. .... S FBY0=$G(^FBAA(162.1,FBJ,"RX",FBK,0))
  1. .... S FBY2=$G(^FBAA(162.1,FBJ,"RX",FBK,2))
  1. .... S FBY6=$G(^FBAA(162.1,FBJ,"RX",FBK,6))
  1. .... S FBYREJ=$G(^FBAA(162.1,FBJ,"RX",FBK,"FBREJ"))
  1. .... S FBDODINV=$P(FBY6,U,1) I FBDODINV="" Q ; DoD invoice# must be present
  1. .... I FBIAIGNORE,$P(FBY2,U,11) Q ; cancelled
  1. .... I FBIAIGNORE,$P(FBY2,U,3)'="" Q ; voided
  1. .... I FBIAIGNORE,$P(FBYREJ,U,1)'="" Q ; rejected
  1. .... I FBIAADJ,$P(FBY0,U,16)'<$P(FBY0,U,4) Q ; skip paid in full line items
  1. .... S DFN=+$P(FBY0,U,5) Q:'DFN ; patient ien
  1. .... S FBZPTNM=$P($G(^DPT(DFN,0)),U,1) Q:FBZPTNM="" ; patient name
  1. .... S FBPTSSN=$P($G(^DPT(DFN,0)),U,9) ; full patient SSN
  1. .... S FBZIENS=FBK_","_FBJ_"," ; iens
  1. .... S FBZDOS=+$P(FBY0,U,3) Q:'FBZDOS ; date prescription filled is DOS
  1. .... ;
  1. .... S FBZTYPE="3-RX"
  1. .... S FBZADJ=$$ADJ(3)
  1. .... S DATA=FBVEN
  1. .... S $P(DATA,U,2)=FBVENID
  1. .... S $P(DATA,U,3)=FBDT
  1. .... S $P(DATA,U,4)=FBPTSSN
  1. .... S $P(DATA,U,5)=""
  1. .... S $P(DATA,U,6)=""
  1. .... S $P(DATA,U,7)=""
  1. .... S $P(DATA,U,8)=""
  1. .... S $P(DATA,U,9)=""
  1. .... S $P(DATA,U,10)=""
  1. .... S $P(DATA,U,11)=""
  1. .... S $P(DATA,U,12)=$P(FBY0,U,1) ; prescription#
  1. .... S $P(DATA,U,13)=$P(FBY0,U,2) ; drug name
  1. .... S $P(DATA,U,14)=$P(FBY0,U,4) ; amount claimed
  1. .... S $P(DATA,U,15)=$P(FBY0,U,16) ; amount paid
  1. .... S $P(DATA,U,16)=$P(FBZADJ,U,1) ; adjustment amount #1
  1. .... S $P(DATA,U,17)=$P(FBZADJ,U,2) ; adjustment group code-reason code #1
  1. .... S $P(DATA,U,18)=$P(FBZADJ,U,3) ; adjustment amount #2
  1. .... S $P(DATA,U,19)=$P(FBZADJ,U,4) ; adjustment group code-reason code #2
  1. .... S $P(DATA,U,20)=FBINVN ; fee invoice number
  1. .... S $P(DATA,U,21)=$P($G(^FBAA(161.7,+$P(FBY0,U,17),0)),U,1) ; external batch#
  1. .... S $P(DATA,U,22)=$P($G(^FBAA(161.7,+$P(FBY0,U,17),0)),U,2) ; obligation# from the batch file
  1. .... S $P(DATA,U,23)=$P(FBY2,U,8) ; Date Paid
  1. .... S $P(DATA,U,24)=$P(FBY2,U,10) ; check number
  1. .... S $P(DATA,U,25)=$P(FBY2,U,14) ; disbursed amount
  1. .... S $P(DATA,U,26)=$P(FBY2,U,11) ; cancellation date
  1. .... S $P(DATA,U,27)=$S($P(FBY2,U,3)'="":1,1:0) ; voided payment flag
  1. .... S $P(DATA,U,28)=$$GET1^DIQ(162.11,FBZIENS,17) ; reject status external value
  1. .... ;
  1. .... S ^TMP("FBAAIARB",$J,FBVENAME,FBZTYPE,FBDODINV,FBZDOS,FBZPTNM,FBZIENS)=DATA ; store data pharmacy
  1. .... S ^TMP("FBAAIARB",$J,FBVENAME)=FBVENID
  1. .... ;
  1. .... Q
  1. ... Q
  1. .. Q
  1. . Q
  1. COMPRXX ;
  1. Q
  1. ;