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

IBOHLS1.m

Go to the documentation of this file.
  1. IBOHLS1 ;ALB/BAA - IB HELD CHARGES LIST MANAGER ;08-SEP-2015
  1. ;;2.0;INTEGRATED BILLING;**554,616,618**;21-MAR-94;Build 61
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. SORT ; get the data
  1. N CNT,IBN,SINST
  1. S CNT=0
  1. ; compile data to display here
  1. I 'PATS D
  1. . S IBN=0 F S IBN=$O(^IB("AC",8,IBN)) Q:'IBN D CHRGS(IBN,PATS)
  1. I PATS D
  1. . S DFN=0 F S DFN=$O(FILTERS(2,DFN)) Q:'DFN D
  1. .. S IBN=0 F S IBN=$O(^IB("AH",DFN,IBN)) Q:'IBN D CHRGS(IBN,PATS)
  1. Q
  1. ;
  1. CHRGS(IBN,PATS) ; charges on hold
  1. N IBFR,IBTO,HDAYS,IBND,HINST,DFN,HST,IBACT,IBCHG,ID,SS,SSLE,SSLS,NAME,HLDT,FLAG
  1. N CLINIC,IBND1,RSLTFRM
  1. S SINST=""
  1. S IBND=$G(^IB(IBN,0)) Q:'IBND
  1. S RSLTFRM=$P(IBND,U,4)
  1. S HINST=$$INST(RSLTFRM),CLINIC=$P(HINST,U,2),HINST=$P(HINST,U,1)
  1. S FLAG=""
  1. I HINST="*" S FLAG="*",HINST=$P(IBND,U,13)
  1. I HINST="" S FLAG="*",HINST=$P(IBND,U,13)
  1. I HINST'="" S SINST=$P(^DIC(4,HINST,0),U,1)
  1. I INSTS,HINST="" Q
  1. I INSTS,'$D(FILTERS(1,HINST)) Q
  1. S IBND1=$G(^IB(IBN,1))
  1. S HLDT=$P(IBND1,U,6)
  1. S IBACT=+IBND
  1. S DFN=$P(IBND,U,2)
  1. D PAT
  1. S HST=$P(IBND,U,5)
  1. I HST'=8 Q
  1. S IBFR=$P(IBND,U,14),IBTO=$P(IBND,U,15)
  1. I $P(IBND,U,4)["52:" D
  1. .S IBRXN=$P($P(IBND,U,4),":",2),IBRF=$P($P(IBND,U,4),":",3)
  1. .I +IBRF>0 S IBFR=$$SUBFILE^IBRXUTL(+IBRXN,IBRF,52,.01),IBTO=$P($$SUBFILE^IBRXUTL(+IBRXN,IBRF,52,17),".")
  1. .I +IBRF=0 S IBFR=$$FILE^IBRXUTL(+IBRXN,22),IBTO=$P($$FILE^IBRXUTL(+IBRXN,31),".")
  1. I HLDT<BDATE!(HLDT>EDATE) Q
  1. S HDAYS=$$FMDIFF^XLFDT(DT,HLDT,1)
  1. S IBCHG=$P(IBND,U,7)
  1. D BILLS
  1. Q
  1. ;
  1. INST(RF) ; figure out where performed
  1. N FL,IEN,IBIEN,DIEN,INT,CLNM,IBSTA
  1. S IBRXN=$P(RF,":",2),INT="*",CLNM=""
  1. S IBIEN=$P(IBRXN,";",1)
  1. S FL=$P(RF,":",1)
  1. ;
  1. I FL=350 S INT="*",CLNM=""
  1. ;
  1. I FL=45 D
  1. . S IBSTA=$$GET1^DIQ(45,IBIEN_",",3,"I"),CLNM="" ;IB*2*616, 45 file stores Station Number
  1. . D FIND^DIC(4,"","@;.01;IX","X",IBSTA,99,"D","","","MSG") S INT=$G(MSG("DILIST",2,1)) ;Convert Station number to Institution file IEN
  1. ;
  1. I FL=52 D
  1. . S IEN=$$GET1^DIQ(52,IBIEN_",",20,"I"),CLNM=$$GET1^DIQ(52,IBIEN_",",20,"E")
  1. . S INT=$$GET1^DIQ(59,IEN_",",100,"I")
  1. ;
  1. I FL=405 D
  1. . S IEN=$$GET1^DIQ(405,IBIEN_",",.06,"I"),CLNM=$$GET1^DIQ(405,IBIEN_",",.06,"E")
  1. . S DIEN=$$GET1^DIQ(42,IEN_",",.015,"I")
  1. . S INT=$$GET1^DIQ(40.8,DIEN_",",.07,"I")
  1. ;
  1. I FL=409.68 D
  1. . S IEN=$$GET1^DIQ(409.68,IBIEN_",",.04,"I"),CLNM=$$GET1^DIQ(409.68,IBIEN_",",.04,"E")
  1. . S INT=$$GET1^DIQ(44,IEN_",",3,"I")
  1. ;
  1. Q INT_U_CLNM
  1. ;
  1. ;
  1. PAT ; patient name
  1. N VAERR,VADM D DEM^VADPT I VAERR K VADM
  1. S NAME=$G(VADM(1)) S:NAME="" NAME=" "
  1. S SS=$P($G(VADM(2)),U,1),SSLE=$L(SS),SSLS=6 I $E(SS,SSLE)="P" S SSLS=5
  1. S ID=$E(NAME,1)_$E(SS,SSLS,SSLE)
  1. Q
  1. ;
  1. BILLS ; find bills for charges on hold
  1. N IBT,IBATYPE,IBCHRG,IBTP
  1. ; Look up the type to match to using the Action Type name
  1. S IBATYPE=$$FNDBTYP^IBOHLD1($P(IBND,"^",3)) ;IB*2.0*618
  1. S CNT=CNT+1
  1. ; Patch IB*2.0*618 - added community care - action types to HELD CHARGES report
  1. S IBTP=$P(IBND,"^",3),IBTP=$P($G(^IBE(350.1,IBTP,0)),"^",1)
  1. S IBTP=$$IBACTYPE^IBOHLD2(IBTP)
  1. ; end of Patch IB*2.0*618
  1. S ^TMP($J,"IBOHLS",NAME,CNT)=NAME_U_ID_U_IBTP_U_IBFR_U_IBTO_U_HDAYS_U_IBCHG
  1. S ^TMP($J,"IBOHLS",NAME,CNT,"IBND")=DFN_U_NAME_U_IBN_U_IBFR_U_IBTO_U_SINST_U_FLAG_U_CLINIC
  1. I IBATYPE="I" D INP
  1. I IBATYPE="O" D OTP
  1. E D RX
  1. I IINS,$D(^TMP($J,"IBOHLS",NAME,CNT)),'$D(^TMP($J,"IBOHLS INS",NAME)) D GETINS
  1. Q
  1. ;
  1. INP ; inpatient bills
  1. N IBEV,IBBILL,IBT,X,X1,X2,IBEND,IBOK,IBBCHG,IBBILL0,IBBILLU1,BILL,BCNT,BLTRK,RNB,STATUS
  1. N HLDDT,AUDT,IBTYPE
  1. S IBTYPE=$P(IBND,"^",3),IBTYPE=$P($G(^IBE(350.1,IBTYPE,0)),"^",1),IBTYPE=$S(IBTYPE["PSO NSC":"RXNSC",IBTYPE["PSO SC":"RX SC",1:$E(IBTYPE,4,7))
  1. S IBEV=$P(IBND,U,16) Q:'IBEV ; parent event
  1. S IBEV=($P($G(^IB(IBEV,0)),U,17)\1) Q:'IBEV ; date of parent event
  1. S X1=IBEV,X2=1 D C^%DTC S IBEND=X
  1. S BCNT=0
  1. S IBT=(IBEV-.0001) F S IBT=$O(^DGCR(399,"D",IBT)) Q:'IBT!(IBT'<IBEND) S IBBILL=0 F S IBBILL=$O(^DGCR(399,"D",IBT,IBBILL)) Q:IBBILL="" D
  1. . S IBBILL0=$G(^DGCR(399,IBBILL,0))
  1. . S BILL=$P(IBBILL0,U,1)
  1. . S AUDT=$$GET1^DIQ(399,IBBILL,10,"I")
  1. . S HLDDT=$S(AUDT'="":$$FMDIFF^XLFDT(DT,AUDT,1),1:HDAYS)
  1. . S IBBCHG=$$GET1^DIQ(430,IBBILL,77)
  1. . S STATUS=$$GET1^DIQ(430,IBBILL,8,"O")
  1. . S (BLTRK,RNB)=""
  1. . S BLTRK=$O(^IBT(356,"E",IBBILL,BLTRK))
  1. . I BLTRK'="" S RNB=$$GET1^DIQ(356,BLTRK,.19,"O")
  1. . D INPTCK
  1. . I IBOK D
  1. .. ;BILL#AR STATUS^DATE BILLED^AUTH DATE^HLD DAYS^CHARGE^RNB^BILL TRK #
  1. .. S BCNT=BCNT+1
  1. .. S ^TMP($J,"IBOHLS",NAME,CNT,2,BCNT)=BILL_U_STATUS_U_IBT_U_AUDT_U_HLDDT_U_IBBCHG_U_RNB_U_BLTRK ;BILL#^AR STATUS^DATE BILLED^CHARGE
  1. .. S ^TMP($J,"IBOHLS",NAME,CNT,2,BCNT,"B")=IBBILL_U_BLTRK_U_RNB
  1. Q
  1. ;
  1. INPTCK ; does bill belong to charge? returns IBOK=0 if no
  1. N IBBILLU
  1. S IBBILLU=$G(^DGCR(399,IBBILL,"U"))
  1. S IBBILL=$P(IBBILL0,U,1)
  1. S IBOK=1
  1. CK1 ; for same patient?
  1. I DFN=$P(IBBILL0,U,2)
  1. S IBOK=$T
  1. Q:'IBOK
  1. CK2 ; same type- inp or opt?
  1. N B S B=$S(+$P(IBBILL0,U,5)<3:"I",1:"O")
  1. I B=IBATYPE S IBOK=1
  1. S IBOK=$T
  1. Q:'IBOK
  1. CK3 ; overlap in date range?
  1. N F,T
  1. S F=+IBBILLU,T=$P(IBBILLU,U,2)
  1. I (IBTO<F)!(IBFR>T)
  1. S IBOK='$T
  1. Q:'IBOK
  1. CK4 ; insurance bill?
  1. I $P(IBBILL0,U,11)="i"
  1. S IBOK=$T
  1. Q
  1. ;
  1. OTP ; outpatient bills
  1. N X,IBV,IBBILL,IBOK,IBBILL0,IBBCHG,IBBILLU1,IBBILLU,BILL,BCNT
  1. S BCNT=0
  1. S IBV=(IBFR\1)-.0001 F S IBV=$O(^DGCR(399,"AOPV",DFN,IBV)) Q:'IBV!(IBV>IBTO) S IBBILL=0 D
  1. .F S IBBILL=$O(^DGCR(399,"AOPV",DFN,IBV,IBBILL)) Q:('IBBILL) D
  1. .. S IBBILL0=$G(^DGCR(399,IBBILL,0)),IBBILLU=$G(^DGCR(399,IBBILL,"U")) D CK4 Q:'IBOK
  1. .. S BILL=$P(IBBILL0,U,1)
  1. .. S AUDT=$$GET1^DIQ(399,IBBILL,10,"I")
  1. .. S HLDDT=$S(AUDT'="":$$FMDIFF^XLFDT(DT,AUDT,1),1:HDAYS)
  1. .. S IBBCHG=$$GET1^DIQ(430,IBBILL,77)
  1. .. S STATUS=$$GET1^DIQ(430,IBBILL,8,"O")
  1. .. S (BLTRK,RNB)=""
  1. .. S BLTRK=$O(^IBT(356,"E",IBBILL,BLTRK))
  1. .. I BLTRK'="" S RNB=$$GET1^DIQ(356,BLTRK,.19,"O")
  1. .. S BILL=$P(IBBILL0,U,1),BCNT=BCNT+1
  1. .. S IBBILLU1=$G(^DGCR(399,IBBILL,"U1")),IBBCHG=$P(IBBILLU1,U,1)
  1. .. S ^TMP($J,"IBOHLS",NAME,CNT,2,BCNT)=BILL_U_STATUS_U_IBV_U_AUDT_U_HLDDT_U_IBBCHG_U_RNB_U_BLTRK ;BILL#^AR STATUS^DATE BILLED^AUTH DATE^DAYS ON HOLD^CHARGE^RNB^BILL TRK NO
  1. .. S ^TMP($J,"IBOHLS",NAME,CNT,2,BCNT,"B")=IBBILL_U_BLTRK
  1. Q
  1. ;
  1. RX ; rx refill bills
  1. N IBRDT,IBRF,IBRX,IBRXN,IBTYPE
  1. S (IBRX,IBRXN,IBRF,IBRDT)=0 N IENS
  1. I $P(IBND,U,4)'["52:" Q
  1. ;
  1. S IBTYPE=$P(IBND,"^",3),IBTYPE=$P($G(^IBE(350.1,IBTYPE,0)),"^",1),IBTYPE=$S(IBTYPE["PSO NSC":"RXNSC",IBTYPE["PSO SC":"RX SC",1:$E(IBTYPE,4,7))
  1. S IBRXN=$P($P(IBND,U,4),":",2),IBRX=$P($P(IBND,U,8),"-"),IBRF=$P($P(IBND,U,4),":",3)
  1. S ^TMP($J,"IBOHLS",NAME,CNT,1)=IBRX ;RX VALUE
  1. I +IBRF>0 S IBRDT=$$SUBFILE^IBRXUTL(+IBRXN,IBRF,52,.01)
  1. I +IBRF=0 S IBRDT=$$FILE^IBRXUTL(+IBRXN,22)
  1. ;
  1. Q:(IBRX="")!('IBRDT)
  1. N X,IBBILL,IBBILL0,IBFILL,IBFILL0,IBOK,IBBCHG,BCNT
  1. S BCNT=0
  1. S IBFILL=0 F S IBFILL=$O(^IBA(362.4,"B",IBRX,IBFILL)) Q:IBFILL="" D
  1. . S BCNT=BCNT+1
  1. . S IBFILL0=$G(^IBA(362.4,IBFILL,0)) I $P(IBFILL0,U,3)'=IBRDT Q
  1. . S IBBILL=+$P(IBFILL0,U,2) I 'IBBILL Q
  1. . S IBBILL0=$G(^DGCR(399,IBBILL,0)) D CK4 I 'IBOK Q
  1. . S BILL=$P(IBBILL0,U,1)
  1. . S AUDT=$$GET1^DIQ(399,IBBILL,10,"I")
  1. . S HLDDT=$S(AUDT'="":$$FMDIFF^XLFDT(DT,AUDT,1),1:HDAYS)
  1. . S IBBCHG=$$GET1^DIQ(430,IBBILL,77)
  1. . S STATUS=$$GET1^DIQ(430,IBBILL,8,"O")
  1. . S (BLTRK,RNB)=""
  1. . S BLTRK=$O(^IBT(356,"E",IBBILL,BLTRK))
  1. . I BLTRK'="" S RNB=$$GET1^DIQ(356,BLTRK,.19,"O")
  1. . S BCNT=BCNT+1
  1. . S IBBILLU1=$G(^DGCR(399,IBBILL,"U1")),IBBCHG=$P(IBBILLU1,U,1)
  1. . S ^TMP($J,"IBOHLS",NAME,CNT,2,BCNT)=BILL_U_STATUS_U_IBRDT_U_AUDT_U_HLDDT_U_IBBCHG_U_RNB_U_BLTRK ;BILL#^AR STATUS^DATE BILLED^CHARGE
  1. . S ^TMP($J,"IBOHLS",NAME,CNT,2,BCNT,"B")=IBBILL_U_BLTRK_U_RNB
  1. Q
  1. ;
  1. GETINS ; get insurance information
  1. N XX,IBINS,IBX,ICNT,INSCO,SUBID,PLNID,EFFDT,EFDTCK,EXPDT,EXDTCK,LEDT,SUBNAM,CVD
  1. N PLNCOV,PEFDT,PCOVD,PCOM,PCNT,COVFN,GRP,CKDT,IBCNT
  1. N IBINS0,IBINS7,LIM,INSTYP,IB0,IBS,REIMB
  1. S (PLNCOV,PLNID,PEFDT,PCOVD,PCOM)=""
  1. S ICNT=0
  1. D ALL^IBCNS1(DFN,"IBINS")
  1. S XX=0
  1. F S XX=$O(IBINS(XX)) Q:'XX D
  1. . S IBINS0=IBINS(XX,0)
  1. . S IBINS7=$G(IBINS(XX,7))
  1. . S PLNID=$P(IBINS0,U,18),GRP=$P(IBINS0,U,3)
  1. . I PLNID'="" I $P($G(^IBA(355.3,PLNID,0)),"^",11) Q ;plan is inactive
  1. . S INSCO=$P(^DIC(36,+IBINS0,0),U,1),REIMB=$P(INSCO,U,2)
  1. . I $P(INSCO,U,5) Q ;insurance company inactive
  1. . S SUBID=$P(IBINS7,U,2)
  1. . S SUBNAM=$P(IBINS7,U,1)
  1. . S EXDTCK=+$P(IBINS0,U,4)
  1. . S EFDTCK=+$P(IBINS0,U,8)
  1. . I EXDTCK,EXDTCK<IBFR Q ; if insurance expired before the from date of copay quit
  1. . I EFDTCK,EFDTCK>IBTO Q ; if insurance not in effect for period quit
  1. . S EFFDT=$$DAT1^IBOUTL(EFDTCK)
  1. . S EXPDT=$$DAT1^IBOUTL(EXDTCK)
  1. . S ICNT=ICNT+1
  1. . ;ins co^sub id^plan id^effective dt^expiration date
  1. . S ^TMP($J,"IBOHLS",NAME,CNT,3,ICNT)=IBINS0_U_PLNID
  1. . S ^TMP($J,"IBOHLS INS",NAME,ICNT)=INSCO_U_SUBNAM_U_GRP_U_EFFDT_U_EXPDT
  1. . ;plan coverage^effective date^covered?^limit comments
  1. . S LIM=0,PCNT=0
  1. . F S LIM=$O(^IBE(355.31,LIM)) Q:'LIM D
  1. .. S PLNCOV=$P($G(^IBE(355.31,LIM,0)),U),IBCNT=0,PEFDT=""
  1. .. S PCOVD="",LEDT="",PCOM=""
  1. .. F S LEDT=$O(^IBA(355.32,"APCD",PLNID,LIM,LEDT)) Q:$S(LEDT="":IBCNT,1:0) D Q:LEDT=""
  1. ... S COVFN=+$O(^IBA(355.32,"APCD",PLNID,LIM,+LEDT,"")),PCOVD=$G(^IBA(355.32,+COVFN,0))
  1. ... S PEFDT=$$DAT1^IBOUTL($P(LEDT,"-",2))
  1. ... I PCOVD="" S PCOVD="BY DEFAULT" D SETINS(PLNCOV,PEFDT,PCOVD,PCOM,IBCNT) Q
  1. ... S IBCNT=IBCNT+1,PCOM=""
  1. ... I PCOVD'="" S CVD=$P(PCOVD,U,4),PCOVD=$S(CVD:$S(CVD<2:"YES",CVD=2:"CONDITIONAL",1:"UNKNOWN"),1:"NO")
  1. ... I '$O(^IBA(355.32,COVFN,2,0)) D SETINS(PLNCOV,PEFDT,PCOVD,PCOM,IBCNT) Q
  1. ... S (IBS,IB0)=0 F S IB0=$O(^IBA(355.32,COVFN,2,IB0)) Q:'IB0 D
  1. .... S PCOM=""
  1. .... S PCOM=^IBA(355.32,COVFN,2,IB0,0)
  1. .... I IBS=0 D SETINS(PLNCOV,PEFDT,PCOVD,PCOM,IBCNT)
  1. .... I IBS>0 D SETCOV(PCOM)
  1. .... S IBS=IBS+1
  1. Q
  1. ;
  1. SETINS(PLNCOV,PEFDT,PCOVD,PCOM,IBCNT) ; SET GLOBAL ENTRY
  1. S PCNT=PCNT+1
  1. I IBCNT>1 S PLNCOV=""
  1. S ^TMP($J,"IBOHLS",NAME,CNT,3,ICNT,PCNT)=""
  1. S ^TMP($J,"IBOHLS INS",NAME,ICNT,0)=IBINS0_U_PLNID
  1. S ^TMP($J,"IBOHLS INS",NAME,ICNT,PCNT)=PLNCOV_U_PEFDT_U_PCOVD_U_PCOM
  1. Q
  1. ;
  1. SETCOV(PCOM) ; SET COVERAGE WHEN MULTIPLE
  1. S PCNT=PCNT+1
  1. S ^TMP($J,"IBOHLS INS",NAME,ICNT,PCNT)=""_U_""_U_""_U_PCOM
  1. Q