IBCNBCD ;ALB/ARH - Ins Buffer: display/compare buffer and existing ins ;1 Jun 97
;;2.0;INTEGRATED BILLING;**82,251,361,371,416,438,452,497,528,549**;21-MAR-94;Build 54
;;Per VA Directive 6402, this routine should not be modified.
;
INS(IBBUFDA,IBINSDA) ; display a buffer entry's insurance company fields and
; an existing insurance company's fields for comparison
N IBEXTDA,IBFLD1,IBFLD2,X I '$G(IBBUFDA) Q
;
S IBEXTDA=$G(IBINSDA)_","
;
I +$P($G(^DIC(36,+IBEXTDA,0)),U,5) W !,?10,"Selected Insurance Company "_$$GET1^DIQ(36,IBEXTDA,.01)_" is Inactive!",!
;
W ! D WRTFLD(" Insurance Data: Buffer Data Selected Insurance Company ",0,80,"BU")
S IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.01),IBFLD2=$S(+IBEXTDA:$$GET1^DIQ(36,IBEXTDA,.01),1:"<none selected>") D WRTLN("Company Name:",IBFLD1,IBFLD2,"","","")
S IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.05),IBFLD2=$S(+IBEXTDA:$$GET1^DIQ(36,IBEXTDA,1),1:"") D WRTLN("Reimburse?:",IBFLD1,IBFLD2,"","","U")
;
D DISPLAY(20.02,36,.131,"Phone Number:")
D DISPLAY(20.03,36,.132,"Billing Phone:")
D DISPLAY(20.04,36,.133,"Pre-Cert Phone:")
D DISPLAY(21.01,36,.111,"Street [Line 1]:")
D DISPLAY(21.02,36,.112,"Street [Line 2]:")
D DISPLAY(21.03,36,.113,"Street [Line 3]:")
D DISPLAY(21.04,36,.114,"City:")
D DISPLAY(21.05,36,.115,"State:")
D DISPLAY(21.06,36,.116,"Zip Code:")
;
S IBFLD1="(bold=accepted on Merge)",IBFLD2="(bold=replaced on Overwrite)" D WRTLN("",IBFLD1,IBFLD2,"","","U")
Q
;
GRP(IBBUFDA,IBGRPDA) ; display a buffer entry's group insurance fields and an existing group/plan's fields for comparison
N IBEXTDA,IBFLD1,IBFLD2,X I '$G(IBBUFDA) Q
;
S IBEXTDA=$G(IBGRPDA)_","
;
I +$P($G(^IBA(355.3,+IBEXTDA,0)),U,11) W !,?23,"Selected Group/Plan is Inactive!",!
;
W ! D WRTFLD(" Group/Plan Data: Buffer Data Selected Group/Plan ",0,80,"BU")
S IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.01),IBFLD2=$S(+IBEXTDA:$$GET1^DIQ(355.3,IBEXTDA,.01),1:"<none selected>") D WRTLN("Company Name:",IBFLD1,IBFLD2,"","","")
S IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,40.01),IBFLD2=$S(+IBEXTDA:$$GET1^DIQ(355.3,IBEXTDA,.02),1:"") D WRTLN("Is Group Plan?:",IBFLD1,IBFLD2,"","","U")
;
D DISPLAY(90.01,355.3,2.01,"Group Name:")
D DISPLAY(90.02,355.3,2.02,"Group Number:")
D DISPLAY(40.1,355.3,6.02,"BIN:") ;;Daou/EEN - adding BIN and PCN
D DISPLAY(40.11,355.3,6.03,"PCN:")
D DISPLAY(40.04,355.3,.05,"Require UR:")
D DISPLAY(40.05,355.3,.06,"Require Pre-Cert:")
D DISPLAY(40.06,355.3,.12,"Require Amb Cert:")
D DISPLAY(40.07,355.3,.07,"Exclude Pre-Cond:")
D DISPLAY(40.08,355.3,.08,"Benefits Assign:")
D DISPLAY(40.09,355.3,.09,"Type of Plan:")
;
S IBFLD1="(bold=accepted on merge)",IBFLD2="(bold=replaced on overwrite)" D WRTLN("",IBFLD1,IBFLD2,"","","U")
Q
;
POLICY(IBBUFDA,IBPOLDA) ; display a buffer entry's patient policy fields and an existing patient policy's fields for comparison
N DFN,IBEXTDA,IBFLD1,IBFLD2,X,Y,DIR,DIRUT I '$G(IBBUFDA) Q
S DFN=+$G(^IBA(355.33,IBBUFDA,60))
;
S IBEXTDA=$G(IBPOLDA)_","_DFN_","
;
W ! D WRTFLD(" Policy Data: Buffer Data Selected Policy ",0,80,"BU")
S IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.01),IBFLD2=$S(+IBEXTDA:$$GET1^DIQ(2.312,IBEXTDA,.01),1:"<none selected>") D WRTLN("Company Name:",IBFLD1,IBFLD2,"","","")
S IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,90.02),IBFLD2=$S(+IBEXTDA:$$GET1^DIQ(2.312,IBEXTDA,21),1:"") D WRTLN("Group #:",IBFLD1,IBFLD2,"","","")
S IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,60.01),IBFLD2=$S(+IBEXTDA:$$GET1^DIQ(2,DFN,.01),1:"") D WRTLN("Patient Name:",IBFLD1,IBFLD2,"","","")
S IBFLD1=$P($$GET1^DIQ(355.33,IBBUFDA,.1),"@"),IBFLD2=$S(+IBEXTDA:$P($$GET1^DIQ(2.312,IBEXTDA,1.03),"@"),1:"") D WRTLN("Last Verified:",IBFLD1,IBFLD2,"","","U")
;
D DISPLAY(60.02,2.312,8,"Effective Date:")
D DISPLAY(60.03,2.312,3,"Expiration Date:")
D DISPLAY(90.03,2.312,7.02,"Subscriber Id:")
D DISPLAY(60.05,2.312,6,"Whose Insurance:")
D DISPLAY(60.06,2.312,16,"Relationship:")
D DISPLAY(60.15,2.312,4.05,"Rx Relationship:")
D DISPLAY(60.16,2.312,4.06,"Rx Person Code:")
D DISPLAY(91.01,2.312,7.01,"Subscriber Name:")
D DISPLAY(60.08,2.312,3.01,"Subscriber's DOB:")
D DISPLAY(60.09,2.312,3.05,"Subscriber's SSN:")
D DISPLAY(60.13,2.312,3.12,"Subscriber's SEX:")
D DISPLAY(60.1,2.312,4.01,"Primary Provider:")
D DISPLAY(60.11,2.312,4.02,"Provider Phone:")
D DISPLAY(60.12,2.312,.2,"Coor of Benefits:")
D DISPLAY(61.01,2.312,2.1,"Emp Sponsored?:")
D DISPLAY(62.01,2.312,5.01,"Patient Id:")
D DISPLAY(62.02,2.312,3.06,"Subscr Str Ln 1:")
D DISPLAY(62.03,2.312,3.07,"Subscr Str Ln 2:")
D DISPLAY(62.04,2.312,3.08,"Subscr City:")
D DISPLAY(62.05,2.312,3.09,"Subscr State:")
D DISPLAY(62.06,2.312,3.1,"Subscr Zip:")
D DISPLAY(62.07,2.312,3.13,"Subscr Country:")
D DISPLAY(62.08,2.312,3.14,"Subscr Subdiv:")
D DISPLAY(62.09,2.312,3.11,"Subscr Phone:") ; 528 - baa
;
I +$G(^IBA(355.33,IBBUFDA,61))!($$GET1^DIQ(2.312,IBEXTDA,2.1)="YES") D ESGHP
;
S IBFLD1="(bold=accepted on merge)",IBFLD2="(bold=replaced on overwrite)" D WRTLN("",IBFLD1,IBFLD2,"","","U")
;
Q
;
ESGHP ; display employee sponsored group health plan
W ! S DIR(0)="E",DIR("A")="Enter RETURN to continue" D ^DIR W ! Q:$D(DIRUT)
;
D DISPLAY(61.02,2.312,2.015,"Employer Name:")
D DISPLAY(61.03,2.312,2.11,"Emp Status:")
D DISPLAY(61.04,2.312,2.12,"Retirement Date:")
D DISPLAY(61.05,2.312,2.01,"Send to Employer:")
D DISPLAY(61.06,2.312,2.02,"Emp Street Ln 1:")
D DISPLAY(61.07,2.312,2.03,"Emp Street Ln 2:")
D DISPLAY(61.08,2.312,2.04,"Emp Street Ln 3:")
D DISPLAY(61.09,2.312,2.05,"Emp City:")
D DISPLAY(61.1,2.312,2.06,"Emp State:")
D DISPLAY(61.11,2.312,2.07,"Emp Zip Code:")
D DISPLAY(61.12,2.312,2.08,"Emp Phone:")
Q
;
ELIG(IBBUFDA,IBPOLDA) ; Display eligibility/benefit data
; IB*2.0*549 Added EBGSTR,EBGLEN, arranged in alphabetical order
N ATTR,BRELEN,BRESTR,BRPLEN,BRPSTR,CMPLEN,CMPSTR,DFN,EBDDATA,EBGLEN,EBGSTR,EBILEN,EBISTR
N ENDSEC,EX,FLD1,FLD2,FLDIDX,GRPLEN,GRPSTR,HCSLEN,HCSSTR,I,I1,I2,IBVEBCOL,IDATA,LEN,NOBLEN
N NOBSTR,NOCLEN,NOCSTR,NODATA,NOHLEN,NOHSTR,NOIDATA,RDATA,RESPIEN,SECEND,XX
S EBGSTR="Payer Summary - from Payer's Response",EBGLEN=$L(EBGSTR) ;IB*2.0*549 Added line
S GRPSTR="Eligibility/Group Plan Information",GRPLEN=$L(GRPSTR) ;IB*2*497
S EBISTR="Eligibility/Benefit Information",EBILEN=$L(EBISTR)
S CMPSTR="Composite Medical Procedure Information",CMPLEN=$L(CMPSTR)
S HCSSTR="Health Care Service Delivery",HCSLEN=$L(HCSSTR)
S BRESTR="Benefit Related Entity",BRELEN=$L(BRESTR)
S BRPSTR="Benefit Related Provider Information",BRPLEN=$L(BRPSTR)
S NOHSTR=" No Health Care Service Delivery data on file for this EB record.",NOHLEN=$L(NOHSTR)
S NOCSTR=" No Composite Medical Procedure Information data on file for this EB record.",NOCLEN=$L(NOCSTR)
S NOBSTR=" No Benefit Related Entity data on file for this EB record.",NOBLEN=$L(NOBSTR)
S EBDDATA=" eIV Eligibility/Benefit Data Group#"
S NODATA=1,EX=0
;
; Get the last response and make sure it contains EB data
I $G(IBBUFDA) D
. S RESPIEN=$O(^IBCN(365,"AF",IBBUFDA,""),-1)
. I RESPIEN S:$O(^IBCN(365,RESPIEN,2,""))'="" NODATA=0
W !
S XX=" *** Non-editable Patient Eligibility/Benefit data from payer *** "
D WRTFLD(XX,0,80,"B")
I NODATA D Q
. W !
. S XX=" *** No Patient Eligibility/Benefit data from payer found*** "
. D WRTFLD(XX,0,80,"B")
. D ELIGX
W !
S XX=" Payer Response VISTA Pt.Insurance "
D WRTFLD(XX,0,80,"BU")
K ^TMP("RESP. EB DATA",$J),^TMP("INS. EB DATA",$J)
K ^TMP("RESP. PS DATA",$J),^TMP("INS. PS DATA",$J)
S DFN=+$G(^IBA(355.33,IBBUFDA,60))
S IBVEBCOL=1,IDATA=""
;
; Fetch data from both eIV response and pat. insurance
D INIT^IBCNES(365.02,RESPIEN_",","A",1,"RESP. EB DATA")
D INIT0^IBCNES4(365.02,RESPIEN_",","RESP. PS DATA")
D INIT^IBCNES(2.322,IBPOLDA_","_DFN_",","A",1,"INS. EB DATA")
D INIT0^IBCNES4(2.322,IBPOLDA_","_DFN_",","INS. PS DATA",1)
;
; Check if there is any existing pat. insurance data
I $E(^TMP("INS. EB DATA",$J,"DISP",2,0),1,41)=" No eIV Eligibility/Benefit Data Found" D
. S NOIDATA=1
;
; Loop through response data and display it
F FLDIDX=0:1:1 Q:EX D
. I +FLDIDX S FLD1=$NA(^TMP("RESP. EB DATA",$J,"DISP")),FLD2=$NA(^TMP("INS. EB DATA",$J,"DISP"))
. E S FLD1=$NA(^TMP("RESP. PS DATA",$J)),FLD2=$NA(^TMP("INS. PS DATA",$J))
. S (I,I1)="",NOIDATA=0
. F S I=$O(@FLD1@(I)) Q:I=""!EX D
. . I $Y+3>IOSL D PAUSE^VALM1 W @IOF I 'Y S EX=1 Q
. . S RDATA=@FLD1@(I,0)
. . ;
. . ; If group title, display it and quit
. . I RDATA[EBDDATA D Q
. . . W !
. . . D WRTFLD(RDATA,0,80,"B")
. . . S IDATA=""
. . ;
. . ; If section title, display it and quit
. . I $E(RDATA,1,EBGLEN)=EBGSTR D Q ; IB*2.0*549 Added if statement
. . . W !!
. . . D WRTFLD(RDATA,0,80,"U")
. . . S I1=$$FNDNXT(I1,EBGSTR,EBGLEN),SECEND=0
. . I $E(RDATA,1,GRPLEN)=GRPSTR D Q ;IB*2*497
. . . W !!
. . . D WRTFLD(RDATA,0,80,"U")
. . . S I1=$$FNDNXT(I1,GRPSTR,GRPLEN),SECEND=0
. . I $E(RDATA,1,EBILEN)=EBISTR D Q
. . . W !!
. . . D WRTFLD(RDATA,0,80,"U")
. . . S I1=$$FNDNXT(I1,EBISTR,EBILEN),SECEND=0
. . I $E(RDATA,1,CMPLEN)=CMPSTR D Q
. . . W !!
. . . D WRTFLD(RDATA,0,80,"U")
. . . S I1=$$FNDNXT(I1,CMPSTR,CMPLEN),SECEND=0
. . I $E(RDATA,1,HCSLEN)=HCSSTR D Q
. . . W !!
. . . D WRTFLD(RDATA,0,80,"U")
. . . S I1=$$FNDNXT(I1,HCSSTR,HCSLEN),SECEND=0
. . I $E(RDATA,1,BRELEN)=BRESTR D Q
. . . W !!
. . . D WRTFLD(RDATA,0,80,"U")
. . . S I1=$$FNDNXT(I1,BRESTR,BRELEN),SECEND=0
. . I $E(RDATA,1,BRPLEN)=BRPSTR D Q
. . . W !!
. . . D WRTFLD(RDATA,0,80,"U")
. . . S I1=$$FNDNXT(I1,BRPSTR,BRPLEN),SECEND=0
. . I $E(RDATA,1,NOHLEN)=NOHSTR W ! D WRTFLD(RDATA,0,80,"") Q
. . I $E(RDATA,1,NOCLEN)=NOCSTR W ! D WRTFLD(RDATA,0,80,"") Q
. . I $E(RDATA,1,NOBLEN)=NOBSTR W ! D WRTFLD(RDATA,0,80,"") Q
. . ;
. . ; Build line with both eIV and pat. insurance values to compare
. . I 'NOIDATA,I1'="",'SECEND S IDATA=$G(@FLD2@(I1,0)) D
. . . ; if we run out of data for this section in pat. insurance
. . . I $E(IDATA,1,EBILEN)=EBISTR!($E(IDATA,1,CMPLEN)=CMPSTR)!($E(IDATA,1,HCSLEN)=HCSSTR) D Q
. . . . S SECEND=1,IDATA=""
. . . I $E(IDATA,1,BRELEN)=BRESTR!($E(IDATA,1,BRPLEN)=BRPSTR)!($E(IDATA,1,NOHLEN)=NOHSTR) D Q
. . . . S SECEND=1,IDATA=""
. . . I $E(IDATA,1,GRPLEN)=GRPSTR!(IDATA[EBDDATA) S SECEND=1,IDATA="" Q
. . . S I1=I1+1
. . . I '$D(@FLD2@(I1)) S NOIDATA=1
. . W !
. . D WRTFLD(RDATA,0,47,""),WRTFLD(" | ",48,3,""),WRTFLD(IDATA,51,29,"")
. I 'NOIDATA,'SECEND,'EX D ; Print remaining data in second file, if any
. . S I2=$O(@FLD2@(999999),-1)
. . F I=I1:1:I2 S IDATA=$G(@FLD2@(I,0)) I $TR(IDATA," ")'="" D
. . . W ! D WRTFLD(" | ",48,3,""),WRTFLD(IDATA,51,29,"")
ELIGX ;
I 'EX D PAUSE^VALM1
K ^TMP("RESP. EB DATA",$J),^TMP("INS. EB DATA",$J)
K ^TMP("RESP. PS DATA",$J),^TMP("INS. PS DATA",$J)
Q
;
FNDNXT(IDX,STR,LEN) ; find next node in INS. EB DATA after one that starts with string STR (section title)
; IDX - current index
; STR - string to find
; LEN - length of STR
; returns index of the node found or "" if nothing is found
;
N I
S I=IDX F S I=$O(@FLD2@(I)) Q:I="" Q:($E(@FLD2@(I,0),1,LEN)=STR)
I +I S I=I+1 ; if found a match for section title, return the next index
Q I
;
DISPLAY(BFLD,IFILE,IFLD,LABEL) ; extract, compare, write the two corresponding fields; one from buffer, one from ins files
N BUFDATA,EXTDATA,IBOVER,IBMERG,IBITER,IBITER1,IBITER2 S EXTDATA=""
S (IBITER1,IBITER2)=0
S IBITER=1
S BUFDATA=$$GET1^DIQ(355.33,IBBUFDA,BFLD)
;S IBITER1=$L(BUFDATA)/29
;I $P(IBITER1,".",2)>0 S IBITER1=$P(IBITER1,".",1)+1
S IBITER1=$L(BUFDATA)-1\29+1
I +IBEXTDA D
. S EXTDATA=$$GET1^DIQ(IFILE,IBEXTDA,IFLD)
. ; S IBITER2=$L(EXTDATA)/29
. ; I $P(IBITER2,".",2)>0 S IBITER2=$P(IBITER2,".",1)+1
. S IBITER2=$L(EXTDATA)-1\29+1
;
S IBITER=$S(IBITER2>IBITER1:IBITER2,IBITER1>IBITER2:IBITER1,IBITER1=IBITER2:IBITER1,1:1)
S IBOVER=$S(BUFDATA'=""&(BUFDATA'=EXTDATA):"B",1:""),IBMERG=$S(EXTDATA="":"B",1:"")
;
D WRTLN(LABEL,BUFDATA,EXTDATA,IBOVER,IBMERG)
Q
;
WRTLN(LABEL,FLD1,FLD2,OVER,MERG,ATTR) ; write a line of formatted data with label and two fields
N IBCTR,IBSV,IBEV,IBBUFV,IBSPV
S IBSV=1,IBEV=29
S ATTR=$G(ATTR),OVER=ATTR_$G(OVER),MERG=ATTR_$G(MERG)
;S LABEL=$J(LABEL,17)_" ",FLD1=FLD1_$J("",29-$L(FLD1)),FLD2=FLD2_$J("",29-$L(FLD2))
S LABEL=$J(LABEL,17)_" "
W !
I '$G(IBITER) S IBITER=1
F IBCTR=1:1:IBITER D
. S IBBUFV=$E(FLD1,IBSV,IBEV)
. S IBSPV=$E(FLD2,IBSV,IBEV)
. I $L(IBBUFV)<29 S IBBUFV=IBBUFV_$J("",29-$L(IBBUFV))
. I $L(IBSPV)<29 S IBSPV=IBSPV_$J("",29-$L(IBSPV))
. D:IBCTR=1 WRTFLD(LABEL,0,19,ATTR)
. D WRTFLD(IBBUFV,19,29,MERG)
. D WRTFLD(" | ",48,3,ATTR),WRTFLD(IBSPV,51,29,OVER)
. I IBITER>1,IBCTR'=IBITER W !
. S IBSV=IBSV+29
. S IBEV=IBEV+29
Q
;
WRTFLD(STRING,COL,WD,ATTR) ; write an individual field with display attributes
N ATTRB,ATTRE,DX,DY,X,Y
S ATTRB="",ATTRB=$S(ATTR["B":$G(IOINHI),1:"")_$S(ATTR["U":$G(IOUON),1:"")
S ATTRE="",ATTRE=$S(ATTR["B":$G(IOINORM),1:"")_$S(ATTR["U":$G(IOUOFF),1:"")
;
S DX=COL,DY=$Y X IOXY
W ATTRB,$E(STRING,1,WD),ATTRE
S DX=(COL+WD),DY=$Y X IOXY
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCNBCD 13456 printed Oct 16, 2024@18:14:28 Page 2
IBCNBCD ;ALB/ARH - Ins Buffer: display/compare buffer and existing ins ;1 Jun 97
+1 ;;2.0;INTEGRATED BILLING;**82,251,361,371,416,438,452,497,528,549**;21-MAR-94;Build 54
+2 ;;Per VA Directive 6402, this routine should not be modified.
+3 ;
INS(IBBUFDA,IBINSDA) ; display a buffer entry's insurance company fields and
+1 ; an existing insurance company's fields for comparison
+2 NEW IBEXTDA,IBFLD1,IBFLD2,X
IF '$GET(IBBUFDA)
QUIT
+3 ;
+4 SET IBEXTDA=$GET(IBINSDA)_","
+5 ;
+6 IF +$PIECE($GET(^DIC(36,+IBEXTDA,0)),U,5)
WRITE !,?10,"Selected Insurance Company "_$$GET1^DIQ(36,IBEXTDA,.01)_" is Inactive!",!
+7 ;
+8 WRITE !
DO WRTFLD(" Insurance Data: Buffer Data Selected Insurance Company ",0,80,"BU")
+9 SET IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.01)
SET IBFLD2=$SELECT(+IBEXTDA:$$GET1^DIQ(36,IBEXTDA,.01),1:"<none selected>")
DO WRTLN("Company Name:",IBFLD1,IBFLD2,"","","")
+10 SET IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.05)
SET IBFLD2=$SELECT(+IBEXTDA:$$GET1^DIQ(36,IBEXTDA,1),1:"")
DO WRTLN("Reimburse?:",IBFLD1,IBFLD2,"","","U")
+11 ;
+12 DO DISPLAY(20.02,36,.131,"Phone Number:")
+13 DO DISPLAY(20.03,36,.132,"Billing Phone:")
+14 DO DISPLAY(20.04,36,.133,"Pre-Cert Phone:")
+15 DO DISPLAY(21.01,36,.111,"Street [Line 1]:")
+16 DO DISPLAY(21.02,36,.112,"Street [Line 2]:")
+17 DO DISPLAY(21.03,36,.113,"Street [Line 3]:")
+18 DO DISPLAY(21.04,36,.114,"City:")
+19 DO DISPLAY(21.05,36,.115,"State:")
+20 DO DISPLAY(21.06,36,.116,"Zip Code:")
+21 ;
+22 SET IBFLD1="(bold=accepted on Merge)"
SET IBFLD2="(bold=replaced on Overwrite)"
DO WRTLN("",IBFLD1,IBFLD2,"","","U")
+23 QUIT
+24 ;
GRP(IBBUFDA,IBGRPDA) ; display a buffer entry's group insurance fields and an existing group/plan's fields for comparison
+1 NEW IBEXTDA,IBFLD1,IBFLD2,X
IF '$GET(IBBUFDA)
QUIT
+2 ;
+3 SET IBEXTDA=$GET(IBGRPDA)_","
+4 ;
+5 IF +$PIECE($GET(^IBA(355.3,+IBEXTDA,0)),U,11)
WRITE !,?23,"Selected Group/Plan is Inactive!",!
+6 ;
+7 WRITE !
DO WRTFLD(" Group/Plan Data: Buffer Data Selected Group/Plan ",0,80,"BU")
+8 SET IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.01)
SET IBFLD2=$SELECT(+IBEXTDA:$$GET1^DIQ(355.3,IBEXTDA,.01),1:"<none selected>")
DO WRTLN("Company Name:",IBFLD1,IBFLD2,"","","")
+9 SET IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,40.01)
SET IBFLD2=$SELECT(+IBEXTDA:$$GET1^DIQ(355.3,IBEXTDA,.02),1:"")
DO WRTLN("Is Group Plan?:",IBFLD1,IBFLD2,"","","U")
+10 ;
+11 DO DISPLAY(90.01,355.3,2.01,"Group Name:")
+12 DO DISPLAY(90.02,355.3,2.02,"Group Number:")
+13 ;;Daou/EEN - adding BIN and PCN
DO DISPLAY(40.1,355.3,6.02,"BIN:")
+14 DO DISPLAY(40.11,355.3,6.03,"PCN:")
+15 DO DISPLAY(40.04,355.3,.05,"Require UR:")
+16 DO DISPLAY(40.05,355.3,.06,"Require Pre-Cert:")
+17 DO DISPLAY(40.06,355.3,.12,"Require Amb Cert:")
+18 DO DISPLAY(40.07,355.3,.07,"Exclude Pre-Cond:")
+19 DO DISPLAY(40.08,355.3,.08,"Benefits Assign:")
+20 DO DISPLAY(40.09,355.3,.09,"Type of Plan:")
+21 ;
+22 SET IBFLD1="(bold=accepted on merge)"
SET IBFLD2="(bold=replaced on overwrite)"
DO WRTLN("",IBFLD1,IBFLD2,"","","U")
+23 QUIT
+24 ;
POLICY(IBBUFDA,IBPOLDA) ; display a buffer entry's patient policy fields and an existing patient policy's fields for comparison
+1 NEW DFN,IBEXTDA,IBFLD1,IBFLD2,X,Y,DIR,DIRUT
IF '$GET(IBBUFDA)
QUIT
+2 SET DFN=+$GET(^IBA(355.33,IBBUFDA,60))
+3 ;
+4 SET IBEXTDA=$GET(IBPOLDA)_","_DFN_","
+5 ;
+6 WRITE !
DO WRTFLD(" Policy Data: Buffer Data Selected Policy ",0,80,"BU")
+7 SET IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,20.01)
SET IBFLD2=$SELECT(+IBEXTDA:$$GET1^DIQ(2.312,IBEXTDA,.01),1:"<none selected>")
DO WRTLN("Company Name:",IBFLD1,IBFLD2,"","","")
+8 SET IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,90.02)
SET IBFLD2=$SELECT(+IBEXTDA:$$GET1^DIQ(2.312,IBEXTDA,21),1:"")
DO WRTLN("Group #:",IBFLD1,IBFLD2,"","","")
+9 SET IBFLD1=$$GET1^DIQ(355.33,IBBUFDA,60.01)
SET IBFLD2=$SELECT(+IBEXTDA:$$GET1^DIQ(2,DFN,.01),1:"")
DO WRTLN("Patient Name:",IBFLD1,IBFLD2,"","","")
+10 SET IBFLD1=$PIECE($$GET1^DIQ(355.33,IBBUFDA,.1),"@")
SET IBFLD2=$SELECT(+IBEXTDA:$PIECE($$GET1^DIQ(2.312,IBEXTDA,1.03),"@"),1:"")
DO WRTLN("Last Verified:",IBFLD1,IBFLD2,"","","U")
+11 ;
+12 DO DISPLAY(60.02,2.312,8,"Effective Date:")
+13 DO DISPLAY(60.03,2.312,3,"Expiration Date:")
+14 DO DISPLAY(90.03,2.312,7.02,"Subscriber Id:")
+15 DO DISPLAY(60.05,2.312,6,"Whose Insurance:")
+16 DO DISPLAY(60.06,2.312,16,"Relationship:")
+17 DO DISPLAY(60.15,2.312,4.05,"Rx Relationship:")
+18 DO DISPLAY(60.16,2.312,4.06,"Rx Person Code:")
+19 DO DISPLAY(91.01,2.312,7.01,"Subscriber Name:")
+20 DO DISPLAY(60.08,2.312,3.01,"Subscriber's DOB:")
+21 DO DISPLAY(60.09,2.312,3.05,"Subscriber's SSN:")
+22 DO DISPLAY(60.13,2.312,3.12,"Subscriber's SEX:")
+23 DO DISPLAY(60.1,2.312,4.01,"Primary Provider:")
+24 DO DISPLAY(60.11,2.312,4.02,"Provider Phone:")
+25 DO DISPLAY(60.12,2.312,.2,"Coor of Benefits:")
+26 DO DISPLAY(61.01,2.312,2.1,"Emp Sponsored?:")
+27 DO DISPLAY(62.01,2.312,5.01,"Patient Id:")
+28 DO DISPLAY(62.02,2.312,3.06,"Subscr Str Ln 1:")
+29 DO DISPLAY(62.03,2.312,3.07,"Subscr Str Ln 2:")
+30 DO DISPLAY(62.04,2.312,3.08,"Subscr City:")
+31 DO DISPLAY(62.05,2.312,3.09,"Subscr State:")
+32 DO DISPLAY(62.06,2.312,3.1,"Subscr Zip:")
+33 DO DISPLAY(62.07,2.312,3.13,"Subscr Country:")
+34 DO DISPLAY(62.08,2.312,3.14,"Subscr Subdiv:")
+35 ; 528 - baa
DO DISPLAY(62.09,2.312,3.11,"Subscr Phone:")
+36 ;
+37 IF +$GET(^IBA(355.33,IBBUFDA,61))!($$GET1^DIQ(2.312,IBEXTDA,2.1)="YES")
DO ESGHP
+38 ;
+39 SET IBFLD1="(bold=accepted on merge)"
SET IBFLD2="(bold=replaced on overwrite)"
DO WRTLN("",IBFLD1,IBFLD2,"","","U")
+40 ;
+41 QUIT
+42 ;
ESGHP ; display employee sponsored group health plan
+1 WRITE !
SET DIR(0)="E"
SET DIR("A")="Enter RETURN to continue"
DO ^DIR
WRITE !
if $DATA(DIRUT)
QUIT
+2 ;
+3 DO DISPLAY(61.02,2.312,2.015,"Employer Name:")
+4 DO DISPLAY(61.03,2.312,2.11,"Emp Status:")
+5 DO DISPLAY(61.04,2.312,2.12,"Retirement Date:")
+6 DO DISPLAY(61.05,2.312,2.01,"Send to Employer:")
+7 DO DISPLAY(61.06,2.312,2.02,"Emp Street Ln 1:")
+8 DO DISPLAY(61.07,2.312,2.03,"Emp Street Ln 2:")
+9 DO DISPLAY(61.08,2.312,2.04,"Emp Street Ln 3:")
+10 DO DISPLAY(61.09,2.312,2.05,"Emp City:")
+11 DO DISPLAY(61.1,2.312,2.06,"Emp State:")
+12 DO DISPLAY(61.11,2.312,2.07,"Emp Zip Code:")
+13 DO DISPLAY(61.12,2.312,2.08,"Emp Phone:")
+14 QUIT
+15 ;
ELIG(IBBUFDA,IBPOLDA) ; Display eligibility/benefit data
+1 ; IB*2.0*549 Added EBGSTR,EBGLEN, arranged in alphabetical order
+2 NEW ATTR,BRELEN,BRESTR,BRPLEN,BRPSTR,CMPLEN,CMPSTR,DFN,EBDDATA,EBGLEN,EBGSTR,EBILEN,EBISTR
+3 NEW ENDSEC,EX,FLD1,FLD2,FLDIDX,GRPLEN,GRPSTR,HCSLEN,HCSSTR,I,I1,I2,IBVEBCOL,IDATA,LEN,NOBLEN
+4 NEW NOBSTR,NOCLEN,NOCSTR,NODATA,NOHLEN,NOHSTR,NOIDATA,RDATA,RESPIEN,SECEND,XX
+5 ;IB*2.0*549 Added line
SET EBGSTR="Payer Summary - from Payer's Response"
SET EBGLEN=$LENGTH(EBGSTR)
+6 ;IB*2*497
SET GRPSTR="Eligibility/Group Plan Information"
SET GRPLEN=$LENGTH(GRPSTR)
+7 SET EBISTR="Eligibility/Benefit Information"
SET EBILEN=$LENGTH(EBISTR)
+8 SET CMPSTR="Composite Medical Procedure Information"
SET CMPLEN=$LENGTH(CMPSTR)
+9 SET HCSSTR="Health Care Service Delivery"
SET HCSLEN=$LENGTH(HCSSTR)
+10 SET BRESTR="Benefit Related Entity"
SET BRELEN=$LENGTH(BRESTR)
+11 SET BRPSTR="Benefit Related Provider Information"
SET BRPLEN=$LENGTH(BRPSTR)
+12 SET NOHSTR=" No Health Care Service Delivery data on file for this EB record."
SET NOHLEN=$LENGTH(NOHSTR)
+13 SET NOCSTR=" No Composite Medical Procedure Information data on file for this EB record."
SET NOCLEN=$LENGTH(NOCSTR)
+14 SET NOBSTR=" No Benefit Related Entity data on file for this EB record."
SET NOBLEN=$LENGTH(NOBSTR)
+15 SET EBDDATA=" eIV Eligibility/Benefit Data Group#"
+16 SET NODATA=1
SET EX=0
+17 ;
+18 ; Get the last response and make sure it contains EB data
+19 IF $GET(IBBUFDA)
Begin DoDot:1
+20 SET RESPIEN=$ORDER(^IBCN(365,"AF",IBBUFDA,""),-1)
+21 IF RESPIEN
if $ORDER(^IBCN(365,RESPIEN,2,""))'=""
SET NODATA=0
End DoDot:1
+22 WRITE !
+23 SET XX=" *** Non-editable Patient Eligibility/Benefit data from payer *** "
+24 DO WRTFLD(XX,0,80,"B")
+25 IF NODATA
Begin DoDot:1
+26 WRITE !
+27 SET XX=" *** No Patient Eligibility/Benefit data from payer found*** "
+28 DO WRTFLD(XX,0,80,"B")
+29 DO ELIGX
End DoDot:1
QUIT
+30 WRITE !
+31 SET XX=" Payer Response VISTA Pt.Insurance "
+32 DO WRTFLD(XX,0,80,"BU")
+33 KILL ^TMP("RESP. EB DATA",$JOB),^TMP("INS. EB DATA",$JOB)
+34 KILL ^TMP("RESP. PS DATA",$JOB),^TMP("INS. PS DATA",$JOB)
+35 SET DFN=+$GET(^IBA(355.33,IBBUFDA,60))
+36 SET IBVEBCOL=1
SET IDATA=""
+37 ;
+38 ; Fetch data from both eIV response and pat. insurance
+39 DO INIT^IBCNES(365.02,RESPIEN_",","A",1,"RESP. EB DATA")
+40 DO INIT0^IBCNES4(365.02,RESPIEN_",","RESP. PS DATA")
+41 DO INIT^IBCNES(2.322,IBPOLDA_","_DFN_",","A",1,"INS. EB DATA")
+42 DO INIT0^IBCNES4(2.322,IBPOLDA_","_DFN_",","INS. PS DATA",1)
+43 ;
+44 ; Check if there is any existing pat. insurance data
+45 IF $EXTRACT(^TMP("INS. EB DATA",$JOB,"DISP",2,0),1,41)=" No eIV Eligibility/Benefit Data Found"
Begin DoDot:1
+46 SET NOIDATA=1
End DoDot:1
+47 ;
+48 ; Loop through response data and display it
+49 FOR FLDIDX=0:1:1
if EX
QUIT
Begin DoDot:1
+50 IF +FLDIDX
SET FLD1=$NAME(^TMP("RESP. EB DATA",$JOB,"DISP"))
SET FLD2=$NAME(^TMP("INS. EB DATA",$JOB,"DISP"))
+51 IF '$TEST
SET FLD1=$NAME(^TMP("RESP. PS DATA",$JOB))
SET FLD2=$NAME(^TMP("INS. PS DATA",$JOB))
+52 SET (I,I1)=""
SET NOIDATA=0
+53 FOR
SET I=$ORDER(@FLD1@(I))
if I=""!EX
QUIT
Begin DoDot:2
+54 IF $Y+3>IOSL
DO PAUSE^VALM1
WRITE @IOF
IF 'Y
SET EX=1
QUIT
+55 SET RDATA=@FLD1@(I,0)
+56 ;
+57 ; If group title, display it and quit
+58 IF RDATA[EBDDATA
Begin DoDot:3
+59 WRITE !
+60 DO WRTFLD(RDATA,0,80,"B")
+61 SET IDATA=""
End DoDot:3
QUIT
+62 ;
+63 ; If section title, display it and quit
+64 ; IB*2.0*549 Added if statement
IF $EXTRACT(RDATA,1,EBGLEN)=EBGSTR
Begin DoDot:3
+65 WRITE !!
+66 DO WRTFLD(RDATA,0,80,"U")
+67 SET I1=$$FNDNXT(I1,EBGSTR,EBGLEN)
SET SECEND=0
End DoDot:3
QUIT
+68 ;IB*2*497
IF $EXTRACT(RDATA,1,GRPLEN)=GRPSTR
Begin DoDot:3
+69 WRITE !!
+70 DO WRTFLD(RDATA,0,80,"U")
+71 SET I1=$$FNDNXT(I1,GRPSTR,GRPLEN)
SET SECEND=0
End DoDot:3
QUIT
+72 IF $EXTRACT(RDATA,1,EBILEN)=EBISTR
Begin DoDot:3
+73 WRITE !!
+74 DO WRTFLD(RDATA,0,80,"U")
+75 SET I1=$$FNDNXT(I1,EBISTR,EBILEN)
SET SECEND=0
End DoDot:3
QUIT
+76 IF $EXTRACT(RDATA,1,CMPLEN)=CMPSTR
Begin DoDot:3
+77 WRITE !!
+78 DO WRTFLD(RDATA,0,80,"U")
+79 SET I1=$$FNDNXT(I1,CMPSTR,CMPLEN)
SET SECEND=0
End DoDot:3
QUIT
+80 IF $EXTRACT(RDATA,1,HCSLEN)=HCSSTR
Begin DoDot:3
+81 WRITE !!
+82 DO WRTFLD(RDATA,0,80,"U")
+83 SET I1=$$FNDNXT(I1,HCSSTR,HCSLEN)
SET SECEND=0
End DoDot:3
QUIT
+84 IF $EXTRACT(RDATA,1,BRELEN)=BRESTR
Begin DoDot:3
+85 WRITE !!
+86 DO WRTFLD(RDATA,0,80,"U")
+87 SET I1=$$FNDNXT(I1,BRESTR,BRELEN)
SET SECEND=0
End DoDot:3
QUIT
+88 IF $EXTRACT(RDATA,1,BRPLEN)=BRPSTR
Begin DoDot:3
+89 WRITE !!
+90 DO WRTFLD(RDATA,0,80,"U")
+91 SET I1=$$FNDNXT(I1,BRPSTR,BRPLEN)
SET SECEND=0
End DoDot:3
QUIT
+92 IF $EXTRACT(RDATA,1,NOHLEN)=NOHSTR
WRITE !
DO WRTFLD(RDATA,0,80,"")
QUIT
+93 IF $EXTRACT(RDATA,1,NOCLEN)=NOCSTR
WRITE !
DO WRTFLD(RDATA,0,80,"")
QUIT
+94 IF $EXTRACT(RDATA,1,NOBLEN)=NOBSTR
WRITE !
DO WRTFLD(RDATA,0,80,"")
QUIT
+95 ;
+96 ; Build line with both eIV and pat. insurance values to compare
+97 IF 'NOIDATA
IF I1'=""
IF 'SECEND
SET IDATA=$GET(@FLD2@(I1,0))
Begin DoDot:3
+98 ; if we run out of data for this section in pat. insurance
+99 IF $EXTRACT(IDATA,1,EBILEN)=EBISTR!($EXTRACT(IDATA,1,CMPLEN)=CMPSTR)!($EXTRACT(IDATA,1,HCSLEN)=HCSSTR)
Begin DoDot:4
+100 SET SECEND=1
SET IDATA=""
End DoDot:4
QUIT
+101 IF $EXTRACT(IDATA,1,BRELEN)=BRESTR!($EXTRACT(IDATA,1,BRPLEN)=BRPSTR)!($EXTRACT(IDATA,1,NOHLEN)=NOHSTR)
Begin DoDot:4
+102 SET SECEND=1
SET IDATA=""
End DoDot:4
QUIT
+103 IF $EXTRACT(IDATA,1,GRPLEN)=GRPSTR!(IDATA[EBDDATA)
SET SECEND=1
SET IDATA=""
QUIT
+104 SET I1=I1+1
+105 IF '$DATA(@FLD2@(I1))
SET NOIDATA=1
End DoDot:3
+106 WRITE !
+107 DO WRTFLD(RDATA,0,47,"")
DO WRTFLD(" | ",48,3,"")
DO WRTFLD(IDATA,51,29,"")
End DoDot:2
+108 ; Print remaining data in second file, if any
IF 'NOIDATA
IF 'SECEND
IF 'EX
Begin DoDot:2
+109 SET I2=$ORDER(@FLD2@(999999),-1)
+110 FOR I=I1:1:I2
SET IDATA=$GET(@FLD2@(I,0))
IF $TRANSLATE(IDATA," ")'=""
Begin DoDot:3
+111 WRITE !
DO WRTFLD(" | ",48,3,"")
DO WRTFLD(IDATA,51,29,"")
End DoDot:3
End DoDot:2
End DoDot:1
ELIGX ;
+1 IF 'EX
DO PAUSE^VALM1
+2 KILL ^TMP("RESP. EB DATA",$JOB),^TMP("INS. EB DATA",$JOB)
+3 KILL ^TMP("RESP. PS DATA",$JOB),^TMP("INS. PS DATA",$JOB)
+4 QUIT
+5 ;
FNDNXT(IDX,STR,LEN) ; find next node in INS. EB DATA after one that starts with string STR (section title)
+1 ; IDX - current index
+2 ; STR - string to find
+3 ; LEN - length of STR
+4 ; returns index of the node found or "" if nothing is found
+5 ;
+6 NEW I
+7 SET I=IDX
FOR
SET I=$ORDER(@FLD2@(I))
if I=""
QUIT
if ($EXTRACT(@FLD2@(I,0),1,LEN)=STR)
QUIT
+8 ; if found a match for section title, return the next index
IF +I
SET I=I+1
+9 QUIT I
+10 ;
DISPLAY(BFLD,IFILE,IFLD,LABEL) ; extract, compare, write the two corresponding fields; one from buffer, one from ins files
+1 NEW BUFDATA,EXTDATA,IBOVER,IBMERG,IBITER,IBITER1,IBITER2
SET EXTDATA=""
+2 SET (IBITER1,IBITER2)=0
+3 SET IBITER=1
+4 SET BUFDATA=$$GET1^DIQ(355.33,IBBUFDA,BFLD)
+5 ;S IBITER1=$L(BUFDATA)/29
+6 ;I $P(IBITER1,".",2)>0 S IBITER1=$P(IBITER1,".",1)+1
+7 SET IBITER1=$LENGTH(BUFDATA)-1\29+1
+8 IF +IBEXTDA
Begin DoDot:1
+9 SET EXTDATA=$$GET1^DIQ(IFILE,IBEXTDA,IFLD)
+10 ; S IBITER2=$L(EXTDATA)/29
+11 ; I $P(IBITER2,".",2)>0 S IBITER2=$P(IBITER2,".",1)+1
+12 SET IBITER2=$LENGTH(EXTDATA)-1\29+1
End DoDot:1
+13 ;
+14 SET IBITER=$SELECT(IBITER2>IBITER1:IBITER2,IBITER1>IBITER2:IBITER1,IBITER1=IBITER2:IBITER1,1:1)
+15 SET IBOVER=$SELECT(BUFDATA'=""&(BUFDATA'=EXTDATA):"B",1:"")
SET IBMERG=$SELECT(EXTDATA="":"B",1:"")
+16 ;
+17 DO WRTLN(LABEL,BUFDATA,EXTDATA,IBOVER,IBMERG)
+18 QUIT
+19 ;
WRTLN(LABEL,FLD1,FLD2,OVER,MERG,ATTR) ; write a line of formatted data with label and two fields
+1 NEW IBCTR,IBSV,IBEV,IBBUFV,IBSPV
+2 SET IBSV=1
SET IBEV=29
+3 SET ATTR=$GET(ATTR)
SET OVER=ATTR_$GET(OVER)
SET MERG=ATTR_$GET(MERG)
+4 ;S LABEL=$J(LABEL,17)_" ",FLD1=FLD1_$J("",29-$L(FLD1)),FLD2=FLD2_$J("",29-$L(FLD2))
+5 SET LABEL=$JUSTIFY(LABEL,17)_" "
+6 WRITE !
+7 IF '$GET(IBITER)
SET IBITER=1
+8 FOR IBCTR=1:1:IBITER
Begin DoDot:1
+9 SET IBBUFV=$EXTRACT(FLD1,IBSV,IBEV)
+10 SET IBSPV=$EXTRACT(FLD2,IBSV,IBEV)
+11 IF $LENGTH(IBBUFV)<29
SET IBBUFV=IBBUFV_$JUSTIFY("",29-$LENGTH(IBBUFV))
+12 IF $LENGTH(IBSPV)<29
SET IBSPV=IBSPV_$JUSTIFY("",29-$LENGTH(IBSPV))
+13 if IBCTR=1
DO WRTFLD(LABEL,0,19,ATTR)
+14 DO WRTFLD(IBBUFV,19,29,MERG)
+15 DO WRTFLD(" | ",48,3,ATTR)
DO WRTFLD(IBSPV,51,29,OVER)
+16 IF IBITER>1
IF IBCTR'=IBITER
WRITE !
+17 SET IBSV=IBSV+29
+18 SET IBEV=IBEV+29
End DoDot:1
+19 QUIT
+20 ;
WRTFLD(STRING,COL,WD,ATTR) ; write an individual field with display attributes
+1 NEW ATTRB,ATTRE,DX,DY,X,Y
+2 SET ATTRB=""
SET ATTRB=$SELECT(ATTR["B":$GET(IOINHI),1:"")_$SELECT(ATTR["U":$GET(IOUON),1:"")
+3 SET ATTRE=""
SET ATTRE=$SELECT(ATTR["B":$GET(IOINORM),1:"")_$SELECT(ATTR["U":$GET(IOUOFF),1:"")
+4 ;
+5 SET DX=COL
SET DY=$Y
XECUTE IOXY
+6 WRITE ATTRB,$EXTRACT(STRING,1,WD),ATTRE
+7 SET DX=(COL+WD)
SET DY=$Y
XECUTE IOXY
+8 QUIT