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

IBJDF61.m

Go to the documentation of this file.
  1. IBJDF61 ;ALB/RB - MISC. BILLS FOLLOW-UP REPORT (COMPILE) ;15-APR-00
  1. ;;2.0;INTEGRATED BILLING;**123,159,356,618**;21-MAR-94;Build 61
  1. ;;Per VHA Directive 6402, this routine should not be modified.
  1. ;
  1. ST ; - Tasked entry point.
  1. K IB,IBCAT,^TMP("IBJDF6P",$J),^TMP("IBJDF6D",$J) S IBQ=0
  1. N IBPDFLG ;Patient (1) or Debtor (0) flag
  1. ;
  1. ; - Set selected categories for report.
  1. ; IB*2.0*618 - Added Community Care Misc. Categories
  1. I IBSEL[",1," S IBCAT(21)=1 ; MEDICARE
  1. I IBSEL[",2," S IBCAT(7)=2 ; NO-FAULT AUTO ACCIDENT
  1. I IBSEL[",3," D ; COMMUNITY CARE NO-FAULT AUTO
  1. . S IBCAT(52)=3
  1. . S IBCAT(55)=3
  1. . S IBCAT(58)=3
  1. I IBSEL[",4," S IBCAT(10)=4 ; TORT FEASOR
  1. I IBSEL[",5," D ; COMMUNITY CARE TORT FEASOR
  1. . S IBCAT(53)=5
  1. . S IBCAT(56)=5
  1. . S IBCAT(59)=5
  1. I IBSEL[6 S IBCAT(6)=6 ; WORKMEN'S COMP
  1. I IBSEL[7 D ; COMMUNITY CARE NO-FAULT AUTO
  1. . S IBCAT(54)=7
  1. . S IBCAT(57)=7
  1. . S IBCAT(60)=7
  1. I IBSEL[8 S IBCAT(16)=8 ; CURRENT EMPLOYEE
  1. I IBSEL[9 S IBCAT(15)=9 ; EX-EMPLOYEE
  1. I IBSEL[10 S IBCAT(13)=10 ; FEDERAL AGENCIES-REFUND
  1. I IBSEL[11 S IBCAT(14)=11 ; FEDERAL AGENCIES-REIMBURSEMENT
  1. I IBSEL[12 S IBCAT(12)=12 ; MILITARY
  1. I IBSEL[13 S IBCAT(20)=13 ; INTERAGENCY
  1. I IBSEL[14 S IBCAT(17)=14 ; VENDOR
  1. ;
  1. ; Initialize the Summary Information
  1. S IBCAT="" F S IBCAT=$O(IBCAT(IBCAT)) Q:IBCAT="" D
  1. . S IBDIV=0
  1. . I IBSDV,$$CATCHK(IBCAT) D Q ;IB*2.0*618
  1. . . F S IBDIV=$O(VAUTD(IBDIV)) Q:IBDIV="" D INIT^IBJDF63
  1. . D INIT^IBJDF63
  1. ;
  1. ; - Print the header line for the Excel spreadsheet
  1. I $G(IBEXCEL) D PHDL
  1. ;
  1. ; - Find data required for the report.
  1. S IBA=0 F S IBA=$O(^PRCA(430,"AC",16,IBA)) Q:'IBA D Q:IBQ
  1. . I IBA#100=0 D Q:IBQ
  1. . . S IBQ=$$STOP^IBOUTL("Miscellaneous Bills Follow-Up Report")
  1. . S IBAR=$G(^PRCA(430,IBA,0)) Q:'IBAR
  1. . S IBCAT=+$P(IBAR,U,2) Q:'$D(IBCAT(IBCAT)) ; Invalid AR category.
  1. . S IBCAT1=IBCAT(IBCAT),IBPDFLG=$$CATCHK(IBCAT)
  1. . I IBPDFLG,'$D(^DGCR(399,IBA,0)) Q ; No claim.
  1. . I IBPDFLG,$P($G(^DGCR(399,IBA,0)),U,13)=7 Q ; Cancelled claim.
  1. . ;
  1. . ; - Get division, if necessary.
  1. . I (IBCAT1>7),(IBCAT1<15) S IBDIV=0 ;IB*2.0*618
  1. . E D
  1. . . I 'IBSDV S IBDIV=0
  1. . . E S IBDIV=$$DIV^IBJDF51(IBA)
  1. . ;
  1. . I IBSDV,IBDIV,'VAUTD Q:'$D(VAUTD(IBDIV)) ; Not a selected division.
  1. . ;
  1. . ; - Get patient or debtor for report.
  1. . I IBRPT="D" S IBPTDB=$$PTDB(IBA) Q:IBPTDB=""
  1. . ;
  1. . ; - Check the receivable age, if necessary.
  1. . I IBRPT="D",IBSMN D I (IBARD)<IBSMN!(IBARD>IBSMX) Q
  1. . . S IBARD=+$$ACT^IBJDF2(IBA) S:IBARD IBARD=$$FMDIFF^XLFDT(DT,IBARD)
  1. . ;
  1. . ; - Check the minimum balance amount, if necessary.
  1. . S IBBA=0 F X=1:1:5 S IBBA=IBBA+$P($G(^PRCA(430,IBA,7)),U,X)
  1. . I IBRPT="D",IBSAM,IBBA<IBSAM Q
  1. . ;
  1. . ; - Get stats for summary
  1. . I '$G(IBEXCEL) D EN^IBJDF63 Q:IBRPT="S"
  1. . ;
  1. . ; - Get remaining AR/claim info and set indexes for detailed report.
  1. . S (IBFR,IBLP,IBOI,IBTO,IBCLM)="",IBIN=0
  1. . S IBBN=$P(IBAR,U),IBOR=$P(IBAR,U,3),IBDP=$P(IBAR,U,10)
  1. . I IBPDFLG D Q:'IBI!('IBCLM) ;IB*2.0*618
  1. . . S IBI=+$G(^DGCR(399,IBA,"MP")) Q:'IBI ; Get primary ins carrier.
  1. . . S IBIN=$P($G(^DIC(36,IBI,0)),U)_"@@"_IBI,DFN=$P($P(IBPTDB,U),"@@",2)
  1. . . S IBDP=$P(IBAR,U,10),IBCLM=$$CLMACT^IBJD(IBA,IBCAT) Q:IBCLM=""
  1. . . S IBR=$S(+IBCLM=1:$G(^IB($P(IBCLM,U,2),0)),+IBCLM=2:$G(^DGCR(399,IBA,"U")),1:IBDP)
  1. . . S IBFR=$P(IBR,U,$S(+IBCLM=1:14,1:1)),IBTO=$P(IBR,U,$S(+IBCLM=1:15,+IBCLM=2:2,1:1))
  1. . . S IBOI=$$OTH(DFN,$P(IBIN,"@@",2),IBFR) ; Get other insurance carrier.
  1. . . I $G(IBEXCEL) Q
  1. . . I '($D(^TMP("IBJDF6P",$J,IBDIV,IBCAT,IBIN,$P(IBPTDB,U)))#10) D
  1. . . . S ^TMP("IBJDF6P",$J,IBDIV,IBCAT,IBIN,$P(IBPTDB,U))=$P(IBPTDB,U,2)_" "_$P(IBPTDB,U,6)_U_$P(IBPTDB,U,3,4)_U_IBOI
  1. . . S ^TMP("IBJDF6P",$J,IBDIV,IBCAT,IBIN,$P(IBPTDB,U),IBBN)=IBDP_U_IBFR_U_IBTO_U_IBOR_U_IBBA
  1. . I 'IBPDFLG D
  1. . . S IBLP=+$P($$PYMT^IBJD1(IBA),U,2)
  1. . . I '($D(^TMP("IBJDF6D",$J,IBDIV,IBCAT,0,$P(IBPTDB,U)))#10) D
  1. . . . S ^TMP("IBJDF6D",$J,IBDIV,IBCAT,0,$P(IBPTDB,U))=$P(IBPTDB,U,2)_" "_$P(IBPTDB,U,6)
  1. . . S ^TMP("IBJDF6D",$J,IBDIV,IBCAT,0,$P(IBPTDB,U),IBBN)=IBDP_U_$P(IBPTDB,U,5)_U_IBOR_U_IBLP_U_IBBA
  1. . ;
  1. . I '$G(IBEXCEL) D:IBSH COM Q
  1. . ;
  1. . ; - Set up and write line for Excel document.
  1. . S IBDIV=$P($G(^DG(40.8,$S('IBDIV:+$$PRIM^VASITE(),1:IBDIV),0)),U)
  1. . S IBEXCEL1=IBDIV_U_$P($G(^PRCA(430.2,IBCAT,0)),U,2)_U_$S(IBIN=0:"",1:$P(IBIN,"@@"))
  1. . S IBEXCEL1=IBEXCEL1_U_$P(IBPTDB,U,2)_U_$S($P(IBPTDB,"^",6)="*":"E",1:"")_U_$TR($P(IBPTDB,U,4),"-")
  1. . S IBEXCEL1=IBEXCEL1_U_$P(IBPTDB,U,3)_U_IBOI_U_IBBN_U_$$DT^IBJD(IBDP,1)
  1. . S IBEXCEL1=IBEXCEL1_U_$$DT^IBJD(IBFR,1)_U_$$DT^IBJD(IBTO,1)_U_IBOR
  1. . S IBEXCEL1=IBEXCEL1_U_IBLP_U_IBBA_U
  1. . I IBSH D COM ; This will capture the Last Comment Date
  1. . S IBD=$$FMDIFF^XLFDT(DT,$S('$P(IBEXCEL1,U,17):IBDP,1:$G(DAT)))
  1. . S IBEXCEL1=IBEXCEL1_U_IBD W !,IBEXCEL1 K IBD,IBEXCEL1
  1. ;
  1. I 'IBQ,'$G(IBEXCEL) D EN^IBJDF62 ; Print the report.
  1. ;
  1. ENQ K ^TMP("IBJDF6P",$J),^TMP("IBJDF6D",$J)
  1. I $D(ZTQUEUED) S ZTREQ="@" G ENQ1
  1. ;
  1. D ^%ZISC
  1. ENQ1 K IBA,IBA1,IBAR,IBARD,IBCAT,IBCAT1,IBDIV,IBD,IBI,IBIN,IBQ,IBR,IBOI,IBBA
  1. K IBBN,IBCLM,IBDP,IBEXCEL,IBFR,IBLP,IBOR,IBPTDB,IBTO,IBTYP,COM
  1. K COM1,DAT,DFN,J,X,X1,X2,Y,Z
  1. Q
  1. ;
  1. PTDB(X) ; - Find Patient/Debtor and decide to include the AR.
  1. ; Input: X=Pointer to the AR in file #430 plus all IBS* variables
  1. ; Output: Y=Sort key (name or last 4) and Patient/Debtor IEN(file #2)
  1. ; ^ Patient/Debtor name (1st 25 chars) ^ Age ^ SSN
  1. ; ^ Processed by (File #200) ^ Current VA Employee? (*=Yes)
  1. N AGE,ALL,ARZ,CAT,DEB,DA,DFN,DIC,DIQ,DR,END,IBZ,INI,KEY,NAME,PRC,SSN
  1. N VA,VADM,VAERR,Y,IBPTFLG
  1. ;
  1. S Y="" I '$G(X) G PDQ
  1. S DFN=0,ARZ=$G(^PRCA(430,X,0)),CAT=$P(ARZ,"^",2)
  1. S (NAME,AGE,SSN,PRC)=""
  1. ;
  1. ; - Look for Patient (Medicare,Tort Feasor,Work's Comp,No-Fault Auto Acc)
  1. S IBPTFLG=$$CATCHK(CAT) ;IB*2.0*618
  1. I IBPTFLG D I 'DFN S Y="" G PDQ
  1. . I '$D(^DGCR(399,X,0)) Q
  1. . S IBZ=^DGCR(399,X,0),DFN=+$P(IBZ,"^",2)
  1. . S INI=IBSNF,END=IBSNL,ALL=IBSNA
  1. . D DEM^VADPT S NAME=VADM(1),SSN=$P(VADM(2),"^",2),AGE=VADM(4)
  1. . S KEY=$S(IBSN="N":NAME,1:$P(SSN,"-",3))
  1. . ; - Look for Debtor (All the other Categories)
  1. I 'IBPTFLG D I 'DFN S Y="" G PDQ
  1. . S DIC="^PRCA(430,",DA=X,DR="9;97",DIQ="DEB" D EN^DIQ1
  1. . S DFN=+$P(ARZ,"^",9) I 'DFN Q
  1. . S NAME=$G(DEB(430,DA,9)),PRC=$G(DEB(430,DA,97)),KEY=NAME
  1. . S DIC="^RCD(340,",DA=DFN,DR="110",DIQ="DEB" D EN^DIQ1
  1. . S SSN=$G(DEB(340,DA,110)) S:SSN=-1 SSN=""
  1. . S INI=IBSDF,END=IBSDL,ALL=IBSDA
  1. ;
  1. I (INI'="@"&('DFN)) S Y="" G PDQ
  1. I ALL="ALL"&('DFN)!(ALL="NULL"&(DFN)) S Y="" G PDQ
  1. I INI="@",END="zzzzz" G PDC
  1. I INI]KEY!(KEY]END) S Y="" G PDQ
  1. ;
  1. S KEY=KEY_"@@"_DFN
  1. PDC S Y=KEY_U_$E(NAME,1,25)_U_AGE_U_SSN_U_PRC_U_$$VAEMP(+$TR(SSN,"-"))
  1. PDQ Q Y
  1. ;
  1. PHDL ; - Print the header line for the Excel spreadsheet
  1. N X
  1. S X="Division^Cat.^Prim.Ins.Carrier^Patient/Debtor^VA Empl.?^SSN^Age^"
  1. S X=X_"Other Ins.Carrier^Bill #^Dt Bill prep.^Bill From Dt^Bill To Dt^"
  1. S X=X_"Orig.Amt^Lst Pymt Amt^Curr.Bal.^Lst Comm.Dt^Days Lst Comm."
  1. W !,X
  1. Q
  1. ;
  1. VAEMP(SSN) ; - Check if the Patient/Debtor is a current VA Employee
  1. ; Input: SSN - Patient/Debtor Social Security Number
  1. ;Output: VAEMP - "*":Current VA Employee / "":Not a Current VA Employee
  1. ;
  1. N IEN I 'SSN Q ""
  1. S IEN=+$O(^PRSPC("SSN",SSN,0)) Q:'IEN ""
  1. I $P($G(^PRSPC(IEN,1)),U,33)'="Y" Q "*"
  1. Q ""
  1. ;
  1. OTH(DFN,INS,DS) ; - Find a patient's other valid insurance carrier (if any).
  1. ; Input: DFN=Pointer to the patient in file #2
  1. ; INS=Pointer to the patient's primary carrier in file #36
  1. ; DS=Date of service for validity check
  1. ; Output: Valid insurance carrier (first 22 chars.) or null
  1. N Y S Y="" G:'$G(DFN)!('$G(DS)) OTHQ
  1. S Z=0 F S Z=$O(^DPT(DFN,.312,Z)) Q:'Z S X=$G(^(Z,0)) D:X Q:Y]""
  1. .I $G(INS),+X=INS Q
  1. .S X1=$G(^DIC(36,+X,0)) Q:X1=""
  1. .I $P(X1,U,2)'="N",$$CHK^IBCNS1(X,DS) S Y=$E($P(X1,U),1,22)
  1. ;
  1. OTHQ Q Y
  1. ;
  1. COM ; - Get bill comments.
  1. N IBGLB,DAT,IBA1,IBC,COM,COM1,X1,X2
  1. ;
  1. S DAT=0,IBA1=$S(IBSH1="M":999999999,1:0)
  1. F S IBA1=$S(IBSH1="M":$O(^PRCA(433,"C",IBA,IBA1),-1),1:$O(^PRCA(433,"C",IBA,IBA1))) Q:'IBA1 D I IBSH1="M",DAT Q
  1. . S IBC=$G(^PRCA(433,IBA1,1)) Q:'IBC
  1. . I $G(IBSH2),$$FMDIFF^XLFDT(DT,+IBC)<IBSH2 Q ; Comment age not minimum.
  1. . I $P(IBC,U,2)'=35,$P(IBC,U,2)'=45 Q ; Not decrease/comment transact.
  1. . S DAT=$S(IBC:+IBC\1,1:+$P(IBC,U,9)\1)
  1. . I $G(IBEXCEL),IBSH1="M" S IBEXCEL1=IBEXCEL1_$$DT^IBJD(DAT,1) Q
  1. . ;
  1. . ; - Append brief and transaction comments.
  1. . K COM,COM1 S COM(0)=DAT,X1=0
  1. . S COM1(1)=$P($G(^PRCA(433,IBA1,5)),U,2)
  1. . S COM1(2)=$E($P($G(^PRCA(433,IBA1,8)),U,6),1,70)
  1. . S COM(1)=COM1(1)_$S(COM1(1)]""&(COM1(2)]""):"|",1:"")_COM1(2)
  1. . I COM(1)]"" S COM(1)="**"_COM(1)_"**",X1=1
  1. . ;
  1. . ; - Get main comments.
  1. . S X2=0 F S X2=$O(^PRCA(433,IBA1,7,X2)) Q:'X2 S COM($S(X1:X2+1,1:X2))=^(X2,0)
  1. . ;
  1. . S X1="" F S X1=$O(COM(X1)) Q:X1="" D
  1. . . S IBGLB=$S(IBCAT1<8:"IBJDF6P",1:"IBJDF6D") ;IB*2.0*618
  1. . . S ^TMP(IBGLB,$J,IBDIV,IBCAT,IBIN,$P(IBPTDB,U),IBBN,IBA1,X1)=COM(X1)
  1. ;
  1. Q
  1. CATCHK(IBCAT) ; Check to see if the AR Category should be a patient or Debtor Category
  1. ; Output: 1 - Patient, 0 - Debtor (default)
  1. Q:IBCAT=6 1 ;Worker's Comp
  1. Q:IBCAT=7 1 ;No Fault
  1. Q:IBCAT=10 1 ;Tort
  1. Q:IBCAT=21 1 ;Medicare
  1. I (IBCAT>51),(IBCAT<61) Q 1 ; a WC, TORT or NF category for Community Care
  1. Q 0