IBCNS3 ;ALB/ARH - DISPLAY EXTENDED INSURANCE ; 01-DEC-04
;;2.0;INTEGRATED BILLING;**287,399,416,516**;21-MAR-94;Build 123
;;Per VA Directive 6402, this routine should not be modified.
;
DISP(DFN,DATE,DISPLAY) ; Display all insurance company information
; input: DFN = pointer to patient
; DATE = date to check for coverage and riders
; DISPLAY = contain indicators of data to display (1234)
; 1 : first line of display ins company and plan data
; 2 : extended data (Plan Filing Timeframe, Plan Coverage, Conditional Coverage Comments, and Riders)
; 3 : ins. policy comments and plan comments
; 4 : eIV eligibility/benefit information (IB*2*416)
;
Q:'$G(DFN) D:'$D(IOF) HOME^%ZIS
N IBINS,IBPOLFN,IBPOL0,IBPLNFN S DISPLAY=$G(DISPLAY) I '$G(DATE) S DATE=DT
K ^TMP($J,"IBCNS3")
;
D ALL^IBCNS1(DFN,"IBINS",3,DATE)
;
I '$D(IBINS) D SETLN(" "),SETLN("No Insurance Information")
;
S IBPOLFN=0 F S IBPOLFN=$O(IBINS(IBPOLFN)) Q:'IBPOLFN D
. S IBPOL0=IBINS(IBPOLFN,0),IBPLNFN=$P(IBPOL0,U,18)
. S ^TMP($J,"IBCNS3")=IBPOLFN
. ;
. D GETLN(IBPOL0,DATE)
. I DISPLAY[2 D GETEXT(DFN,IBPOLFN,IBPOL0,DATE) ; display extended
. I DISPLAY[3 D GETCOM(IBPLNFN,$G(IBINS(IBPOLFN,1))) ; display extended 3, comments
. I DISPLAY[4 D EB(DFN,IBPOLFN) ; display eIV elig/ben data
. Q
;
S ^TMP($J,"IBCNS3")="" D GETNOTES(DFN) ; display final notes/warning messages
;
D PRINT
;
DISPQ K ^TMP($J,"IBCNS3")
Q
;
PRINT ; display compiled array of patient insurance information in ^TMP($J,"IBCNS3")
N IBSUB,IBCOUNT,IBQUIT,IBLEVEL,IBLNX,IBDASH,IBLINE,IBCNTLN S $P(IBDASH,"-",80)="-" S DISPLAY=+$G(DISPLAY)
;
D HDR S IBSUB="IBCNS3",IBCOUNT=3,IBQUIT=0
;
S IBLEVEL=0 F S IBLEVEL=$O(^TMP($J,IBSUB,IBLEVEL)) Q:'IBLEVEL D Q:IBQUIT
. S IBCNTLN=+$G(^TMP($J,IBSUB,IBLEVEL))+1
. ;
. I IBCOUNT>10,(IBCNTLN+IBCOUNT)>(IOSL-3) S IBQUIT=$$EOP Q:IBQUIT D HDR S IBCOUNT=3
. ;
. S IBLNX=0 F S IBLNX=$O(^TMP($J,IBSUB,IBLEVEL,IBLNX)) Q:'IBLNX D Q:IBQUIT
.. ;
.. S IBLINE=$G(^TMP($J,IBSUB,IBLEVEL,IBLNX))
.. ;
.. W !,IBLINE S IBCOUNT=IBCOUNT+1 I IBCOUNT>(IOSL-3) S IBQUIT=$$EOP Q:IBQUIT W @IOF S IBCOUNT=2
. ;
. I 'IBQUIT,DISPLAY>1 W !,IBDASH S IBCOUNT=IBCOUNT+1
;
I 'IBQUIT,IBCOUNT>2 S IBQUIT=$$EOP
Q
;
SETLN(LINE) ; set line as next line for current policy
N CNT,POL S LINE=$G(LINE)
S POL=+$G(^TMP($J,"IBCNS3"))
I 'POL S POL=$O(^TMP($J,"IBCNS3","~"),-1)+1 S ^TMP($J,"IBCNS3")=POL
;
S CNT=+$G(^TMP($J,"IBCNS3",POL))+1
S ^TMP($J,"IBCNS3",POL)=CNT
S ^TMP($J,"IBCNS3",POL,CNT)=LINE
Q
;
;
;
GETLN(IBPOL0,IBDATE) ; get single line of primary data on insurance policy
; input: IBPOL0 = line from array, zero node of patient policy (2,.312)
; IBDATE = date to check coverage, default today
; output: formatted line of data for insurance policy in TMP($J,"IBCNS")
;
N IBX,IBLINE S IBLINE=" " S IBPOL0=$G(IBPOL0)
;
S IBX=$G(^DIC(36,+IBPOL0,0)),IBX=$S($P(IBX,U,1)'="":$P(IBX,U,1),1:"UNKNOWN") S IBLINE=$$FRMLN(IBX,IBLINE,11,0)
S IBX=$P(IBPOL0,U,20),IBX=$S(IBX=1:"p",IBX=2:"s",IBX=3:"t",1:"") S IBLINE=$$FRMLN(IBX,IBLINE,1,14)
S IBX=$P(IBPOL0,U,2) S IBLINE=$$FRMLN(IBX,IBLINE,16,17)
S IBX=$$FNDGRP($P(IBPOL0,U,18)) S IBLINE=$$FRMLN(IBX,IBLINE,10,35)
S IBX=$P(IBPOL0,U,6),IBX=$S(IBX="v":"SELF",IBX="s":"SPOUSE",1:"OTHER") S IBLINE=$$FRMLN(IBX,IBLINE,7,47)
S IBX=$$DAT1^IBOUTL($P(IBPOL0,U,8)) S IBLINE=$$FRMLN(IBX,IBLINE,8,55)
S IBX=$$DAT1^IBOUTL($P(IBPOL0,U,4)) S IBLINE=$$FRMLN(IBX,IBLINE,8,65)
S IBX=$$FNDCOV(+IBPOL0,+$P(IBPOL0,U,18),$G(IBDATE)) S IBLINE=$$FRMLN(IBX,IBLINE,6,74)
;
D SETLN(IBLINE)
GETLNQ Q
;
;
GETEXT(DFN,IBPOLFN,IBPOL0,DATE) ; display extended insurance information
; Plan Filing Timeframe, Plan Coverage, Conditional Coverage Comments, and Riders
; input: DFN = pointer to patient (2)
; IBPOLFN = pointer to patient insurance policy in 2.312
; IBPOL0 = line from array, zero node of patient policy (2,.312)
; DATE = date to check coverage, default today
; DISPARR = array to pass data back in, pass by reference
; output: array of extended data in TMP($J,"IBCNS")
;
N IBX,IBY,IBZ,IBC,IBINSFN,IBPLNFN,IBPLN0,IBLINE,IBCAT,IBCATFN,IBCOVRD,IBU,ARR,ARR1 S:'$G(DATE) DATE=DT
S IBINSFN=+$G(IBPOL0) Q:'IBINSFN S IBPLNFN=+$P(IBPOL0,U,18),IBPLN0=$G(^IBA(355.3,IBPLNFN,0)) Q:IBPLN0=""
;
S IBLINE="Last Verified: ",(IBY,IBX)=""
S IBY=$P($G(^DPT(DFN,.312,IBPOLFN,1)),U,3) I IBY'="" S IBX=$$DAT1^IBOUTL(IBY) S IBLINE=IBLINE_IBX D SETLN(" "),SETLN(IBLINE)
;
S IBLINE="Plan Filing Time Frame: "
S IBY=$P(IBPLN0,U,13) S:IBY'="" IBY=IBY_" " I +$P(IBPLN0,U,16) S IBY=IBY_"("_$$FTFN^IBCNSU31(IBPLNFN)_")"
I IBY'="" S IBLINE=IBLINE_IBY D:IBX="" SETLN(" ") D SETLN(IBLINE)
;
S IBLINE="Insurance Comp: "
I $P($G(^DIC(36,IBINSFN,0)),U,2)="N" S IBLINE=IBLINE_"Will Not Reimburse" D SETLN(" "),SETLN(IBLINE)
;
S IBLINE="Conditional: ",IBCOVRD="",IBU=""
K ARR F IBCAT="INPATIENT","OUTPATIENT","PHARMACY","MENTAL HEALTH","DENTAL","LONG TERM CARE" D
. S IBCATFN=+$O(^IBE(355.31,"B",IBCAT,"")) Q:'IBCATFN
. S IBY=$$PLCOV^IBCNSU3(+IBPLNFN,DATE,IBCATFN,.ARR) Q:IBY'>0
. I IBY=1 S IBCOVRD=$G(IBCOVRD)_IBU_$S(IBCAT["PATIENT":$P(IBCAT,"IENT",1),1:IBCAT),IBU=", " Q
. S IBX=IBCAT_": ",IBC=$G(IBC)+100 S IBLINE=$$FRMLN(IBX,IBLINE,15,17)
. S IBZ=0 F S IBZ=$O(ARR(IBZ)) Q:'IBZ S IBX=ARR(IBZ) D S IBLINE=""
.. S IBLINE=$$FRMLN(IBX,IBLINE,46,33) S ARR1(IBC+IBZ)=IBLINE
I IBCOVRD'="" S IBLINE="Plan Coverage: "_$G(IBCOVRD) D SETLN(" "),SETLN(IBLINE)
I $O(ARR1("")) D:IBCOVRD="" SETLN(" ") S IBZ=0 F S IBZ=$O(ARR1(IBZ)) Q:'IBZ S IBX=ARR1(IBZ) D SETLN(IBX)
;
S IBLINE="Policy Riders: "
K ARR D RIDERS^IBCNSU3(+$G(DFN),+$G(IBPOLFN),.ARR) I $O(ARR("")) D SETLN(" ")
S IBZ=0 F S IBZ=$O(ARR(IBZ)) Q:'IBZ S IBX=ARR(IBZ) D S IBLINE=""
. S IBLINE=$$FRMLN(IBX,IBLINE,62,17) D SETLN(IBLINE)
Q
;
;
GETCOM(IBPLNFN,IBPOL1) ; get patient insurance and plan insurance comments in TMP($J,"IBCNS")
N IBX,IBY
;
S IBX=$P($G(IBPOL1),U,8) I IBX'="" S IBY="Patient Policy Comments: " D SETLN(" "),SETLN(IBY),SETLN(IBX)
;
I +$G(IBPLNFN),$O(^IBA(355.3,+IBPLNFN,11,0)) S IBX="Group/Plan Comments:" D SETLN(" "),SETLN(IBX) D
. S IBX=0 F S IBX=$O(^IBA(355.3,+IBPLNFN,11,IBX)) Q:'IBX S IBY=$G(^IBA(355.3,+IBPLNFN,11,IBX,0)) D SETLN(IBY)
Q
;
;
GETNOTES(DFN) ; get final notes/warnings in TMP($J,"IBCNS")
N IBX,IBY,IBLINE1,IBLINE2,IBFND S (IBFND,IBLINE1,IBLINE2)="" Q:'$G(DFN)
;
S IBX=+$G(^IBA(354,DFN,60)) I +IBX S IBY="*** Verification of No Coverage "_$$FMTE^XLFDT(IBX)_" ***" S IBLINE1=$$FRMLN(IBY,"",60,16),IBFND=1
I $$BUFFER^IBCNBU1(DFN) S IBY="*** Patient has Insurance Buffer entries ***" S IBLINE2=$$FRMLN(IBY,"",50,17),IBFND=1
;
I +IBFND D SETLN(" ") D:IBLINE1'="" SETLN(IBLINE1) D:IBLINE2'="" SETLN(IBLINE2) D SETLN(" ")
;
Q
;
;
EB(DFN,IBCDFN) ; Build eIV elig/benefit display for ?INX screen display
NEW IBX,IBY
D INIT^IBCNES(2.322,IBCDFN_","_DFN_",","A",,"?INX")
D SETLN(" ")
D SETLN("eIV Eligibility/Benefit Information:")
S IBX=0
F S IBX=$O(^TMP("?INX",$J,"DISP",IBX)) Q:'IBX D
. S IBY=$G(^TMP("?INX",$J,"DISP",IBX,0))
. D SETLN(IBY)
. Q
;
; clean up scratch global
K ^TMP("?INX",$J)
;
EBX ;
Q
;
;
FRMLN(FIELD,IBLINE,FLNG,COL) ; format line data fields, returns IBLINE with FIELD of length FLNG at column COL
N IBNEW,IBL S FIELD=$G(FIELD),IBLINE=$G(IBLINE),FLNG=$G(FLNG),COL=$G(COL)
;
S IBNEW=$E(IBLINE,1,COL),IBL=$L(IBNEW),IBNEW=IBNEW_$J("",COL-IBL)
S IBNEW=IBNEW_$E(FIELD,1,FLNG),IBL=$L(FIELD),IBNEW=IBNEW_$J("",FLNG-IBL)
S IBNEW=IBNEW_$E(IBLINE,COL+FLNG+1,9999)
Q IBNEW
;
;
;
FNDCOV(IBINSFN,IBPLNFN,IBDATE) ; -- return group/plan coverage limitations indications
; input: IBINSFN = pointer to insurance company entry in 36
; IBPLNFN = pointer to insurance plan entry in 355.3
; IBDATE = date to check coverage, default today
; output: if insurance company will not reimburse = WNR, if all covered then returns null
; otherwise list of first characters of types covered, if conditional then character in lower case
;
N IBOUT,IBX,IBY,IBCAT,IBCATFN S IBOUT="" S:'$G(IBDATE) IBDATE=DT I '$G(IBINSFN)!'$G(IBPLNFN) G FNDCOVQ
;
I $P($G(^DIC(36,+IBINSFN,0)),U,2)="N" S IBOUT="*WNR*" G FNDCOVQ
F IBCAT="INPATIENT","OUTPATIENT","PHARMACY","MENTAL HEALTH","DENTAL","LONG TERM CARE" D
. S IBCATFN=+$O(^IBE(355.31,"B",IBCAT,"")) Q:'IBCATFN
. S IBY=$$PLCOV^IBCNSU3(+IBPLNFN,IBDATE,+IBCATFN) Q:'IBY
. S IBX=$S(IBCAT="PHARMACY":"R",1:$E(IBCAT)) S:IBY>1 IBX=$C($A(IBX)+32) S IBOUT=IBOUT_IBX
S:IBOUT="" IBOUT="no CV" I IBOUT?6U S IBOUT=""
FNDCOVQ Q IBOUT
;
;
FNDGRP(IBPLNFN) ; -- return group name/group policy
; input: IBPLNFN = pointer to insurance plan entry in 355.3
; output: group name or group number, if both group NUMBER, check for Individual plans
;
;IB*2.0*516/TAZ - Use HIPAA compliant fields
;N IBX,IBOUT S IBOUT=""
;S IBX=$G(^IBA(355.3,+$G(IBPLNFN),0))
;S IBOUT=$S($P(IBX,U,4)'="":$P(IBX,U,4),1:$P(IBX,U,3))
;I $P(IBX,U,10) S IBOUT="Ind. Plan "_IBOUT
FNDGRPQ ;
;Q IBOUT
Q $$GRP^IBCNS(+$G(IBPLNFN))
;
;
;
;
HDR ; -- print header
N IBX W @IOF
W !,"Insurance",?13,"COB",?17,"Subscriber ID",?35,"Group",?47,"Holder",?55,"Effectve",?65,"Expires",?75,"Only"
S IBX="",$P(IBX,"=",80)="=" W !,IBX
Q
;
EOP() ; ask user for return at end of page, return 1 if '^' entered
N IBQ,DIR,DIRUT,DUOUT,DTOUT,X,Y W ! S IBQ=0,DIR(0)="E" D ^DIR K DIR I $D(DUOUT)!($D(DIRUT)) S IBQ=1
Q IBQ
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCNS3 9804 printed Dec 13, 2024@02:16:44 Page 2
IBCNS3 ;ALB/ARH - DISPLAY EXTENDED INSURANCE ; 01-DEC-04
+1 ;;2.0;INTEGRATED BILLING;**287,399,416,516**;21-MAR-94;Build 123
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
DISP(DFN,DATE,DISPLAY) ; Display all insurance company information
+1 ; input: DFN = pointer to patient
+2 ; DATE = date to check for coverage and riders
+3 ; DISPLAY = contain indicators of data to display (1234)
+4 ; 1 : first line of display ins company and plan data
+5 ; 2 : extended data (Plan Filing Timeframe, Plan Coverage, Conditional Coverage Comments, and Riders)
+6 ; 3 : ins. policy comments and plan comments
+7 ; 4 : eIV eligibility/benefit information (IB*2*416)
+8 ;
+9 if '$GET(DFN)
QUIT
if '$DATA(IOF)
DO HOME^%ZIS
+10 NEW IBINS,IBPOLFN,IBPOL0,IBPLNFN
SET DISPLAY=$GET(DISPLAY)
IF '$GET(DATE)
SET DATE=DT
+11 KILL ^TMP($JOB,"IBCNS3")
+12 ;
+13 DO ALL^IBCNS1(DFN,"IBINS",3,DATE)
+14 ;
+15 IF '$DATA(IBINS)
DO SETLN(" ")
DO SETLN("No Insurance Information")
+16 ;
+17 SET IBPOLFN=0
FOR
SET IBPOLFN=$ORDER(IBINS(IBPOLFN))
if 'IBPOLFN
QUIT
Begin DoDot:1
+18 SET IBPOL0=IBINS(IBPOLFN,0)
SET IBPLNFN=$PIECE(IBPOL0,U,18)
+19 SET ^TMP($JOB,"IBCNS3")=IBPOLFN
+20 ;
+21 DO GETLN(IBPOL0,DATE)
+22 ; display extended
IF DISPLAY[2
DO GETEXT(DFN,IBPOLFN,IBPOL0,DATE)
+23 ; display extended 3, comments
IF DISPLAY[3
DO GETCOM(IBPLNFN,$GET(IBINS(IBPOLFN,1)))
+24 ; display eIV elig/ben data
IF DISPLAY[4
DO EB(DFN,IBPOLFN)
+25 QUIT
End DoDot:1
+26 ;
+27 ; display final notes/warning messages
SET ^TMP($JOB,"IBCNS3")=""
DO GETNOTES(DFN)
+28 ;
+29 DO PRINT
+30 ;
DISPQ KILL ^TMP($JOB,"IBCNS3")
+1 QUIT
+2 ;
PRINT ; display compiled array of patient insurance information in ^TMP($J,"IBCNS3")
+1 NEW IBSUB,IBCOUNT,IBQUIT,IBLEVEL,IBLNX,IBDASH,IBLINE,IBCNTLN
SET $PIECE(IBDASH,"-",80)="-"
SET DISPLAY=+$GET(DISPLAY)
+2 ;
+3 DO HDR
SET IBSUB="IBCNS3"
SET IBCOUNT=3
SET IBQUIT=0
+4 ;
+5 SET IBLEVEL=0
FOR
SET IBLEVEL=$ORDER(^TMP($JOB,IBSUB,IBLEVEL))
if 'IBLEVEL
QUIT
Begin DoDot:1
+6 SET IBCNTLN=+$GET(^TMP($JOB,IBSUB,IBLEVEL))+1
+7 ;
+8 IF IBCOUNT>10
IF (IBCNTLN+IBCOUNT)>(IOSL-3)
SET IBQUIT=$$EOP
if IBQUIT
QUIT
DO HDR
SET IBCOUNT=3
+9 ;
+10 SET IBLNX=0
FOR
SET IBLNX=$ORDER(^TMP($JOB,IBSUB,IBLEVEL,IBLNX))
if 'IBLNX
QUIT
Begin DoDot:2
+11 ;
+12 SET IBLINE=$GET(^TMP($JOB,IBSUB,IBLEVEL,IBLNX))
+13 ;
+14 WRITE !,IBLINE
SET IBCOUNT=IBCOUNT+1
IF IBCOUNT>(IOSL-3)
SET IBQUIT=$$EOP
if IBQUIT
QUIT
WRITE @IOF
SET IBCOUNT=2
End DoDot:2
if IBQUIT
QUIT
+15 ;
+16 IF 'IBQUIT
IF DISPLAY>1
WRITE !,IBDASH
SET IBCOUNT=IBCOUNT+1
End DoDot:1
if IBQUIT
QUIT
+17 ;
+18 IF 'IBQUIT
IF IBCOUNT>2
SET IBQUIT=$$EOP
+19 QUIT
+20 ;
SETLN(LINE) ; set line as next line for current policy
+1 NEW CNT,POL
SET LINE=$GET(LINE)
+2 SET POL=+$GET(^TMP($JOB,"IBCNS3"))
+3 IF 'POL
SET POL=$ORDER(^TMP($JOB,"IBCNS3","~"),-1)+1
SET ^TMP($JOB,"IBCNS3")=POL
+4 ;
+5 SET CNT=+$GET(^TMP($JOB,"IBCNS3",POL))+1
+6 SET ^TMP($JOB,"IBCNS3",POL)=CNT
+7 SET ^TMP($JOB,"IBCNS3",POL,CNT)=LINE
+8 QUIT
+9 ;
+10 ;
+11 ;
GETLN(IBPOL0,IBDATE) ; get single line of primary data on insurance policy
+1 ; input: IBPOL0 = line from array, zero node of patient policy (2,.312)
+2 ; IBDATE = date to check coverage, default today
+3 ; output: formatted line of data for insurance policy in TMP($J,"IBCNS")
+4 ;
+5 NEW IBX,IBLINE
SET IBLINE=" "
SET IBPOL0=$GET(IBPOL0)
+6 ;
+7 SET IBX=$GET(^DIC(36,+IBPOL0,0))
SET IBX=$SELECT($PIECE(IBX,U,1)'="":$PIECE(IBX,U,1),1:"UNKNOWN")
SET IBLINE=$$FRMLN(IBX,IBLINE,11,0)
+8 SET IBX=$PIECE(IBPOL0,U,20)
SET IBX=$SELECT(IBX=1:"p",IBX=2:"s",IBX=3:"t",1:"")
SET IBLINE=$$FRMLN(IBX,IBLINE,1,14)
+9 SET IBX=$PIECE(IBPOL0,U,2)
SET IBLINE=$$FRMLN(IBX,IBLINE,16,17)
+10 SET IBX=$$FNDGRP($PIECE(IBPOL0,U,18))
SET IBLINE=$$FRMLN(IBX,IBLINE,10,35)
+11 SET IBX=$PIECE(IBPOL0,U,6)
SET IBX=$SELECT(IBX="v":"SELF",IBX="s":"SPOUSE",1:"OTHER")
SET IBLINE=$$FRMLN(IBX,IBLINE,7,47)
+12 SET IBX=$$DAT1^IBOUTL($PIECE(IBPOL0,U,8))
SET IBLINE=$$FRMLN(IBX,IBLINE,8,55)
+13 SET IBX=$$DAT1^IBOUTL($PIECE(IBPOL0,U,4))
SET IBLINE=$$FRMLN(IBX,IBLINE,8,65)
+14 SET IBX=$$FNDCOV(+IBPOL0,+$PIECE(IBPOL0,U,18),$GET(IBDATE))
SET IBLINE=$$FRMLN(IBX,IBLINE,6,74)
+15 ;
+16 DO SETLN(IBLINE)
GETLNQ QUIT
+1 ;
+2 ;
GETEXT(DFN,IBPOLFN,IBPOL0,DATE) ; display extended insurance information
+1 ; Plan Filing Timeframe, Plan Coverage, Conditional Coverage Comments, and Riders
+2 ; input: DFN = pointer to patient (2)
+3 ; IBPOLFN = pointer to patient insurance policy in 2.312
+4 ; IBPOL0 = line from array, zero node of patient policy (2,.312)
+5 ; DATE = date to check coverage, default today
+6 ; DISPARR = array to pass data back in, pass by reference
+7 ; output: array of extended data in TMP($J,"IBCNS")
+8 ;
+9 NEW IBX,IBY,IBZ,IBC,IBINSFN,IBPLNFN,IBPLN0,IBLINE,IBCAT,IBCATFN,IBCOVRD,IBU,ARR,ARR1
if '$GET(DATE)
SET DATE=DT
+10 SET IBINSFN=+$GET(IBPOL0)
if 'IBINSFN
QUIT
SET IBPLNFN=+$PIECE(IBPOL0,U,18)
SET IBPLN0=$GET(^IBA(355.3,IBPLNFN,0))
if IBPLN0=""
QUIT
+11 ;
+12 SET IBLINE="Last Verified: "
SET (IBY,IBX)=""
+13 SET IBY=$PIECE($GET(^DPT(DFN,.312,IBPOLFN,1)),U,3)
IF IBY'=""
SET IBX=$$DAT1^IBOUTL(IBY)
SET IBLINE=IBLINE_IBX
DO SETLN(" ")
DO SETLN(IBLINE)
+14 ;
+15 SET IBLINE="Plan Filing Time Frame: "
+16 SET IBY=$PIECE(IBPLN0,U,13)
if IBY'=""
SET IBY=IBY_" "
IF +$PIECE(IBPLN0,U,16)
SET IBY=IBY_"("_$$FTFN^IBCNSU31(IBPLNFN)_")"
+17 IF IBY'=""
SET IBLINE=IBLINE_IBY
if IBX=""
DO SETLN(" ")
DO SETLN(IBLINE)
+18 ;
+19 SET IBLINE="Insurance Comp: "
+20 IF $PIECE($GET(^DIC(36,IBINSFN,0)),U,2)="N"
SET IBLINE=IBLINE_"Will Not Reimburse"
DO SETLN(" ")
DO SETLN(IBLINE)
+21 ;
+22 SET IBLINE="Conditional: "
SET IBCOVRD=""
SET IBU=""
+23 KILL ARR
FOR IBCAT="INPATIENT","OUTPATIENT","PHARMACY","MENTAL HEALTH","DENTAL","LONG TERM CARE"
Begin DoDot:1
+24 SET IBCATFN=+$ORDER(^IBE(355.31,"B",IBCAT,""))
if 'IBCATFN
QUIT
+25 SET IBY=$$PLCOV^IBCNSU3(+IBPLNFN,DATE,IBCATFN,.ARR)
if IBY'>0
QUIT
+26 IF IBY=1
SET IBCOVRD=$GET(IBCOVRD)_IBU_$SELECT(IBCAT["PATIENT":$PIECE(IBCAT,"IENT",1),1:IBCAT)
SET IBU=", "
QUIT
+27 SET IBX=IBCAT_": "
SET IBC=$GET(IBC)+100
SET IBLINE=$$FRMLN(IBX,IBLINE,15,17)
+28 SET IBZ=0
FOR
SET IBZ=$ORDER(ARR(IBZ))
if 'IBZ
QUIT
SET IBX=ARR(IBZ)
Begin DoDot:2
+29 SET IBLINE=$$FRMLN(IBX,IBLINE,46,33)
SET ARR1(IBC+IBZ)=IBLINE
End DoDot:2
SET IBLINE=""
End DoDot:1
+30 IF IBCOVRD'=""
SET IBLINE="Plan Coverage: "_$GET(IBCOVRD)
DO SETLN(" ")
DO SETLN(IBLINE)
+31 IF $ORDER(ARR1(""))
if IBCOVRD=""
DO SETLN(" ")
SET IBZ=0
FOR
SET IBZ=$ORDER(ARR1(IBZ))
if 'IBZ
QUIT
SET IBX=ARR1(IBZ)
DO SETLN(IBX)
+32 ;
+33 SET IBLINE="Policy Riders: "
+34 KILL ARR
DO RIDERS^IBCNSU3(+$GET(DFN),+$GET(IBPOLFN),.ARR)
IF $ORDER(ARR(""))
DO SETLN(" ")
+35 SET IBZ=0
FOR
SET IBZ=$ORDER(ARR(IBZ))
if 'IBZ
QUIT
SET IBX=ARR(IBZ)
Begin DoDot:1
+36 SET IBLINE=$$FRMLN(IBX,IBLINE,62,17)
DO SETLN(IBLINE)
End DoDot:1
SET IBLINE=""
+37 QUIT
+38 ;
+39 ;
GETCOM(IBPLNFN,IBPOL1) ; get patient insurance and plan insurance comments in TMP($J,"IBCNS")
+1 NEW IBX,IBY
+2 ;
+3 SET IBX=$PIECE($GET(IBPOL1),U,8)
IF IBX'=""
SET IBY="Patient Policy Comments: "
DO SETLN(" ")
DO SETLN(IBY)
DO SETLN(IBX)
+4 ;
+5 IF +$GET(IBPLNFN)
IF $ORDER(^IBA(355.3,+IBPLNFN,11,0))
SET IBX="Group/Plan Comments:"
DO SETLN(" ")
DO SETLN(IBX)
Begin DoDot:1
+6 SET IBX=0
FOR
SET IBX=$ORDER(^IBA(355.3,+IBPLNFN,11,IBX))
if 'IBX
QUIT
SET IBY=$GET(^IBA(355.3,+IBPLNFN,11,IBX,0))
DO SETLN(IBY)
End DoDot:1
+7 QUIT
+8 ;
+9 ;
GETNOTES(DFN) ; get final notes/warnings in TMP($J,"IBCNS")
+1 NEW IBX,IBY,IBLINE1,IBLINE2,IBFND
SET (IBFND,IBLINE1,IBLINE2)=""
if '$GET(DFN)
QUIT
+2 ;
+3 SET IBX=+$GET(^IBA(354,DFN,60))
IF +IBX
SET IBY="*** Verification of No Coverage "_$$FMTE^XLFDT(IBX)_" ***"
SET IBLINE1=$$FRMLN(IBY,"",60,16)
SET IBFND=1
+4 IF $$BUFFER^IBCNBU1(DFN)
SET IBY="*** Patient has Insurance Buffer entries ***"
SET IBLINE2=$$FRMLN(IBY,"",50,17)
SET IBFND=1
+5 ;
+6 IF +IBFND
DO SETLN(" ")
if IBLINE1'=""
DO SETLN(IBLINE1)
if IBLINE2'=""
DO SETLN(IBLINE2)
DO SETLN(" ")
+7 ;
+8 QUIT
+9 ;
+10 ;
EB(DFN,IBCDFN) ; Build eIV elig/benefit display for ?INX screen display
+1 NEW IBX,IBY
+2 DO INIT^IBCNES(2.322,IBCDFN_","_DFN_",","A",,"?INX")
+3 DO SETLN(" ")
+4 DO SETLN("eIV Eligibility/Benefit Information:")
+5 SET IBX=0
+6 FOR
SET IBX=$ORDER(^TMP("?INX",$JOB,"DISP",IBX))
if 'IBX
QUIT
Begin DoDot:1
+7 SET IBY=$GET(^TMP("?INX",$JOB,"DISP",IBX,0))
+8 DO SETLN(IBY)
+9 QUIT
End DoDot:1
+10 ;
+11 ; clean up scratch global
+12 KILL ^TMP("?INX",$JOB)
+13 ;
EBX ;
+1 QUIT
+2 ;
+3 ;
FRMLN(FIELD,IBLINE,FLNG,COL) ; format line data fields, returns IBLINE with FIELD of length FLNG at column COL
+1 NEW IBNEW,IBL
SET FIELD=$GET(FIELD)
SET IBLINE=$GET(IBLINE)
SET FLNG=$GET(FLNG)
SET COL=$GET(COL)
+2 ;
+3 SET IBNEW=$EXTRACT(IBLINE,1,COL)
SET IBL=$LENGTH(IBNEW)
SET IBNEW=IBNEW_$JUSTIFY("",COL-IBL)
+4 SET IBNEW=IBNEW_$EXTRACT(FIELD,1,FLNG)
SET IBL=$LENGTH(FIELD)
SET IBNEW=IBNEW_$JUSTIFY("",FLNG-IBL)
+5 SET IBNEW=IBNEW_$EXTRACT(IBLINE,COL+FLNG+1,9999)
+6 QUIT IBNEW
+7 ;
+8 ;
+9 ;
FNDCOV(IBINSFN,IBPLNFN,IBDATE) ; -- return group/plan coverage limitations indications
+1 ; input: IBINSFN = pointer to insurance company entry in 36
+2 ; IBPLNFN = pointer to insurance plan entry in 355.3
+3 ; IBDATE = date to check coverage, default today
+4 ; output: if insurance company will not reimburse = WNR, if all covered then returns null
+5 ; otherwise list of first characters of types covered, if conditional then character in lower case
+6 ;
+7 NEW IBOUT,IBX,IBY,IBCAT,IBCATFN
SET IBOUT=""
if '$GET(IBDATE)
SET IBDATE=DT
IF '$GET(IBINSFN)!'$GET(IBPLNFN)
GOTO FNDCOVQ
+8 ;
+9 IF $PIECE($GET(^DIC(36,+IBINSFN,0)),U,2)="N"
SET IBOUT="*WNR*"
GOTO FNDCOVQ
+10 FOR IBCAT="INPATIENT","OUTPATIENT","PHARMACY","MENTAL HEALTH","DENTAL","LONG TERM CARE"
Begin DoDot:1
+11 SET IBCATFN=+$ORDER(^IBE(355.31,"B",IBCAT,""))
if 'IBCATFN
QUIT
+12 SET IBY=$$PLCOV^IBCNSU3(+IBPLNFN,IBDATE,+IBCATFN)
if 'IBY
QUIT
+13 SET IBX=$SELECT(IBCAT="PHARMACY":"R",1:$EXTRACT(IBCAT))
if IBY>1
SET IBX=$CHAR($ASCII(IBX)+32)
SET IBOUT=IBOUT_IBX
End DoDot:1
+14 if IBOUT=""
SET IBOUT="no CV"
IF IBOUT?6U
SET IBOUT=""
FNDCOVQ QUIT IBOUT
+1 ;
+2 ;
FNDGRP(IBPLNFN) ; -- return group name/group policy
+1 ; input: IBPLNFN = pointer to insurance plan entry in 355.3
+2 ; output: group name or group number, if both group NUMBER, check for Individual plans
+3 ;
+4 ;IB*2.0*516/TAZ - Use HIPAA compliant fields
+5 ;N IBX,IBOUT S IBOUT=""
+6 ;S IBX=$G(^IBA(355.3,+$G(IBPLNFN),0))
+7 ;S IBOUT=$S($P(IBX,U,4)'="":$P(IBX,U,4),1:$P(IBX,U,3))
+8 ;I $P(IBX,U,10) S IBOUT="Ind. Plan "_IBOUT
FNDGRPQ ;
+1 ;Q IBOUT
+2 QUIT $$GRP^IBCNS(+$GET(IBPLNFN))
+3 ;
+4 ;
+5 ;
+6 ;
HDR ; -- print header
+1 NEW IBX
WRITE @IOF
+2 WRITE !,"Insurance",?13,"COB",?17,"Subscriber ID",?35,"Group",?47,"Holder",?55,"Effectve",?65,"Expires",?75,"Only"
+3 SET IBX=""
SET $PIECE(IBX,"=",80)="="
WRITE !,IBX
+4 QUIT
+5 ;
EOP() ; ask user for return at end of page, return 1 if '^' entered
+1 NEW IBQ,DIR,DIRUT,DUOUT,DTOUT,X,Y
WRITE !
SET IBQ=0
SET DIR(0)="E"
DO ^DIR
KILL DIR
IF $DATA(DUOUT)!($DATA(DIRUT))
SET IBQ=1
+2 QUIT IBQ