IBCNES4 ;ALB/JNM - eIV elig/Benefit screen ; 06/08/2016
 ;;2.0;INTEGRATED BILLING;**549,702,763**;21-MAR-94;Build 29
 ;;Per VA Directive 6402, this routine should not be modified.
 ;
EN ; entry point for IBCNB ELIG PAYER SUMMARY action protocol
 ;IB*702/CKB,TAZ,DJW - Fixed restore of IBVF and IBVIENS
 N IBVF2,IBVIENS2
 S IBVF2=IBVF,IBVIENS2=IBVIENS
 I +IBVIENS,+IBVF D
 . D EN^VALM("IBCNB INSURANCE BUFFER PAYER")
ENX ;
 S IBVF=IBVF2,IBVIENS=IBVIENS2
 S VALMBCK="R"
 Q
 ;
HDR ; -- header code
 D HDR^IBCNES
 Q
 ;
INIT0(IBVF,IBVIENS,IBSUBID,IBNOLBL) ; -- Used by IBCNBCD to fetch data
 D INIT(IBSUBID)
 Q
 ;
INIT(IBSUBID) ; -- init variables and list array
 ;IB*702/CKB,TAZ,DJW - Fixed restore of IBVF and IBVIENS
 ;IB*763/TAZ - Add check for Purged Response records.
 N IBVDA,LN,COL,COL1,COL2,PURGED,VALMAR ;,IBVF2,IBVIENS2
 ;S IBVF2=IBVF,IBVIENS2=IBVIENS
 I $G(IBSUBID)="" S IBSUBID="IBCNES PAY SUM"
 S VALMAR=$NA(^TMP(IBSUBID,$J))
 K @VALMAR ; clear out the existing data, if any
 S LN=0,COL1=2,COL2=47,PURGED=0
 I IBVF=2.322 D
 . N IEN
 . S IEN=$$GET1^DIQ(2.312,IBVIENS,8.03,"I")
 . I '$G(IEN) Q
 . I '$D(^IBCN(365,IEN)) S PURGED=1 Q
 . S IBVF=365.02,IBVIENS=IEN_","
 ;IB*702/TAZ,CKB,DJW cleaned up the code for readability, changed G's to D's and
 ; moved INITX tag
 ;IB*763/TAZ - Print Purged message if PURGED variable is set then exit.
 I PURGED D  G INITX
 . D SET1()
 . D SET4("","The Payer Response is no longer on file.")
 I IBVF=2.322 D NODATA G INITX
 D DA^DILF(IBVIENS,.IBVDA)  ; build the IBVDA array for the iens
 I '$D(IBVDA) D NODATA G INITX
 D INIT2(365)
 ;
INITX ;
 ;S IBVF=IBVF2,IBVIENS=IBVIENS2
 S VALMCNT=LN
 Q
 ;
INIT2(IBVF) ; allows changing IBVF just for this routine
 N INIEN,X1,TEMP,NOLBL
 S INIEN=IBVDA,NOLBL=$G(IBNOLBL),IBNOLBL=0
 D SET1("Payer Summary - from Payer's Response",,1,1)
 I $$GET1^DIQ(IBVF,INIEN,.07,"I")'>0 D WAITING Q  ; If Response requested but not yet received
 S IBNOLBL=NOLBL
 D SET1("Subscriber",$$GET1^DIQ(IBVF,INIEN,13.01))
 D SET1("Subscriber ID",$$GET1^DIQ(IBVF,INIEN,13.02))
 D SET1("Subscriber DOB",$$FMTE^XLFDT($$GET1^DIQ(IBVF,INIEN,1.02)))
 D SET1("Subscriber SSN",$$GET1^DIQ(IBVF,INIEN,1.03))
 D SET2("Subscriber Sex",$$GET1^DIQ(IBVF,INIEN,1.04))
 D SET1("Group Name",$$GET1^DIQ(IBVF,INIEN,14.01))
 D SET1("Group ID",$$GET1^DIQ(IBVF,INIEN,14.02))
 D SET1("Whose Insurance",$$GET1^DIQ(IBVF,INIEN,1.08))
 I +$G(IBVEBCOL) S TEMP="Pt. Rel. to Subscriber"
 E  S TEMP="Patient Relationship to Subscriber"
 D SET1(TEMP,$$GET1^DIQ(IBVF,INIEN,1.09))
 D SET1("Member ID",$$GET1^DIQ(IBVF,INIEN,1.18))
 D SET1("COB",$$GET1^DIQ(IBVF,INIEN,1.13))
 D SET1("Service Date",$$GET1^DIQ(IBVF,INIEN,1.1))
 D SET2("Date of Death",$$GET1^DIQ(IBVF,INIEN,1.16))
 D SET1("Effective Date",$$GET1^DIQ(IBVF,INIEN,1.11))
 D SET2("Certification Date",$$GET1^DIQ(IBVF,INIEN,1.17))
 D SET1("Expiration Date",$$GET1^DIQ(IBVF,INIEN,1.12))
 D SET2("Payer Updated Policy",$$GET1^DIQ(IBVF,INIEN,1.19))
 D SET1("Response Date",$$GET1^DIQ(IBVF,INIEN,.07))
 D SET2("Trace #",$$GET1^DIQ(IBVF,INIEN,.09))
 D SET1("Policy Number",$$GET1^DIQ(IBVF,INIEN,1.2))
 D SET1()
 S IBNOLBL=0
 D SET1("Contact Information",,1,1)
 S X1=0 F  S X1=$O(^IBCN(365,IBVDA,3,X1)) Q:X1'=+X1  D
 . N DATA,STRTLINE,QFILE,QIEN
 . S STRTLINE=LN
 . S QFILE=365.03,QIEN=X1_","_IBVDA
 . S DATA=$$GET1^DIQ(QFILE,QIEN,.01)
 . I DATA'="" D SET1(DATA)
 . D SET4($$GETQUAL(.02),$$GET1^DIQ(QFILE,QIEN,1))
 . D SET4($$GETQUAL(.04),$$GET1^DIQ(QFILE,QIEN,2))
 . D SET4($$GETQUAL(.06),$$GET1^DIQ(QFILE,QIEN,3))
 . D:STRTLINE'=LN SET1()
 D SET1()
 Q
 ;
WAITING ;
 D SET1()
 ;IB*763/TAZ - Removed trailing ":" for consistency
 ;D SET1("Awaiting Payer Response.")
 D SET4("","Awaiting Payer Response.")
 Q
 ; 
NODATA ; display no data found
 D SET1()
 ;IB*763/TAZ - Removed trailing ":" for consistency
 ;D SET1("No Payer Summary Data Found")
 D SET4("","No Payer Summary Data Found")
 Q
 ;
GETQUAL(QREC) ; Return Communication Qualifier text
 N IEN
 S IEN=$$GET1^DIQ(QFILE,QIEN,QREC,"I")
 Q $$GET1^DIQ(365.021,+$G(IEN),.02)
 ;
SET2(LABEL,DATA,IBVV,COLUMN) ; Update previous line at COL2
 I +$G(IBVEBCOL) D SET1($G(LABEL),$G(DATA),$G(IBVV),$G(COLUMN)) Q
 S COL=COL2
 G SETSTART
 ;
SET4(LABEL,DATA) ; print on column 4 if data is not blank
 I ($G(LABEL)'="")!($G(DATA)'="") D SET1(LABEL,DATA,,4)
 Q
 ;
SET1(LABEL,DATA,IBVV,COLUMN) ; Set next line at COL1
 ;
 ; IBVV - video attributes flag
 ;        1 = reverse video
 ;        2 = bold
 ;        3 = underline
 ;
 S LN=LN+1
 S COL=COL1
 ;
SETSTART ;
 N STR,D1
 I $G(COLUMN)>0 S COL=COLUMN
 I $G(LABEL)'="",COL>1 S LABEL=" "_LABEL,COL=COL-1
 S STR=$G(@VALMAR@(LN,0))    ; get the current string
 S D1=""
 I $G(IBNOLBL) S D1=$G(DATA)
 E  D 
 . I $G(LABEL)'="" S D1=LABEL_": "
 . I $G(DATA)'="" S D1=D1_$G(DATA)   ; build the new display
 ;
 S STR=$$SETSTR^VALM1(D1,STR,+COL,(81-COL))   ; insert new data
 ;
 D SET^VALM10(LN,STR)
 ;
 ; Add the video attributes if requested
 I $G(IBVV) D
 . I IBVV=1 D CNTRL^VALM10(LN,COL,$L(LABEL),IORVON,IORVOFF)  ; reverse video
 . I IBVV=2 D CNTRL^VALM10(LN,COL,$L(LABEL),IOINHI,IOINORM)  ; bold
 . I IBVV=3 D CNTRL^VALM10(LN,COL,$L(LABEL),IOUON,IOUOFF)    ; underline
 . Q
 ;
SETX ;
 Q
HELP ; -- help code
 S X="?" D DISP^XQORM1 W !!
 Q
 ;
EXIT ; -- exit code
 Q
 ;
EXPND ; -- expand code
 Q
 ;
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCNES4   5426     printed  Sep 23, 2025@19:51:39                                                                                                                                                                                                     Page 2
IBCNES4   ;ALB/JNM - eIV elig/Benefit screen ; 06/08/2016
 +1       ;;2.0;INTEGRATED BILLING;**549,702,763**;21-MAR-94;Build 29
 +2       ;;Per VA Directive 6402, this routine should not be modified.
 +3       ;
EN        ; entry point for IBCNB ELIG PAYER SUMMARY action protocol
 +1       ;IB*702/CKB,TAZ,DJW - Fixed restore of IBVF and IBVIENS
 +2        NEW IBVF2,IBVIENS2
 +3        SET IBVF2=IBVF
           SET IBVIENS2=IBVIENS
 +4        IF +IBVIENS
               IF +IBVF
                   Begin DoDot:1
 +5                    DO EN^VALM("IBCNB INSURANCE BUFFER PAYER")
                   End DoDot:1
ENX       ;
 +1        SET IBVF=IBVF2
           SET IBVIENS=IBVIENS2
 +2        SET VALMBCK="R"
 +3        QUIT 
 +4       ;
HDR       ; -- header code
 +1        DO HDR^IBCNES
 +2        QUIT 
 +3       ;
INIT0(IBVF,IBVIENS,IBSUBID,IBNOLBL) ; -- Used by IBCNBCD to fetch data
 +1        DO INIT(IBSUBID)
 +2        QUIT 
 +3       ;
INIT(IBSUBID) ; -- init variables and list array
 +1       ;IB*702/CKB,TAZ,DJW - Fixed restore of IBVF and IBVIENS
 +2       ;IB*763/TAZ - Add check for Purged Response records.
 +3       ;,IBVF2,IBVIENS2
           NEW IBVDA,LN,COL,COL1,COL2,PURGED,VALMAR
 +4       ;S IBVF2=IBVF,IBVIENS2=IBVIENS
 +5        IF $GET(IBSUBID)=""
               SET IBSUBID="IBCNES PAY SUM"
 +6        SET VALMAR=$NAME(^TMP(IBSUBID,$JOB))
 +7       ; clear out the existing data, if any
           KILL @VALMAR
 +8        SET LN=0
           SET COL1=2
           SET COL2=47
           SET PURGED=0
 +9        IF IBVF=2.322
               Begin DoDot:1
 +10               NEW IEN
 +11               SET IEN=$$GET1^DIQ(2.312,IBVIENS,8.03,"I")
 +12               IF '$GET(IEN)
                       QUIT 
 +13               IF '$DATA(^IBCN(365,IEN))
                       SET PURGED=1
                       QUIT 
 +14               SET IBVF=365.02
                   SET IBVIENS=IEN_","
               End DoDot:1
 +15      ;IB*702/TAZ,CKB,DJW cleaned up the code for readability, changed G's to D's and
 +16      ; moved INITX tag
 +17      ;IB*763/TAZ - Print Purged message if PURGED variable is set then exit.
 +18       IF PURGED
               Begin DoDot:1
 +19               DO SET1()
 +20               DO SET4("","The Payer Response is no longer on file.")
               End DoDot:1
               GOTO INITX
 +21       IF IBVF=2.322
               DO NODATA
               GOTO INITX
 +22      ; build the IBVDA array for the iens
           DO DA^DILF(IBVIENS,.IBVDA)
 +23       IF '$DATA(IBVDA)
               DO NODATA
               GOTO INITX
 +24       DO INIT2(365)
 +25      ;
INITX     ;
 +1       ;S IBVF=IBVF2,IBVIENS=IBVIENS2
 +2        SET VALMCNT=LN
 +3        QUIT 
 +4       ;
INIT2(IBVF) ; allows changing IBVF just for this routine
 +1        NEW INIEN,X1,TEMP,NOLBL
 +2        SET INIEN=IBVDA
           SET NOLBL=$GET(IBNOLBL)
           SET IBNOLBL=0
 +3        DO SET1("Payer Summary - from Payer's Response",,1,1)
 +4       ; If Response requested but not yet received
           IF $$GET1^DIQ(IBVF,INIEN,.07,"I")'>0
               DO WAITING
               QUIT 
 +5        SET IBNOLBL=NOLBL
 +6        DO SET1("Subscriber",$$GET1^DIQ(IBVF,INIEN,13.01))
 +7        DO SET1("Subscriber ID",$$GET1^DIQ(IBVF,INIEN,13.02))
 +8        DO SET1("Subscriber DOB",$$FMTE^XLFDT($$GET1^DIQ(IBVF,INIEN,1.02)))
 +9        DO SET1("Subscriber SSN",$$GET1^DIQ(IBVF,INIEN,1.03))
 +10       DO SET2("Subscriber Sex",$$GET1^DIQ(IBVF,INIEN,1.04))
 +11       DO SET1("Group Name",$$GET1^DIQ(IBVF,INIEN,14.01))
 +12       DO SET1("Group ID",$$GET1^DIQ(IBVF,INIEN,14.02))
 +13       DO SET1("Whose Insurance",$$GET1^DIQ(IBVF,INIEN,1.08))
 +14       IF +$GET(IBVEBCOL)
               SET TEMP="Pt. Rel. to Subscriber"
 +15      IF '$TEST
               SET TEMP="Patient Relationship to Subscriber"
 +16       DO SET1(TEMP,$$GET1^DIQ(IBVF,INIEN,1.09))
 +17       DO SET1("Member ID",$$GET1^DIQ(IBVF,INIEN,1.18))
 +18       DO SET1("COB",$$GET1^DIQ(IBVF,INIEN,1.13))
 +19       DO SET1("Service Date",$$GET1^DIQ(IBVF,INIEN,1.1))
 +20       DO SET2("Date of Death",$$GET1^DIQ(IBVF,INIEN,1.16))
 +21       DO SET1("Effective Date",$$GET1^DIQ(IBVF,INIEN,1.11))
 +22       DO SET2("Certification Date",$$GET1^DIQ(IBVF,INIEN,1.17))
 +23       DO SET1("Expiration Date",$$GET1^DIQ(IBVF,INIEN,1.12))
 +24       DO SET2("Payer Updated Policy",$$GET1^DIQ(IBVF,INIEN,1.19))
 +25       DO SET1("Response Date",$$GET1^DIQ(IBVF,INIEN,.07))
 +26       DO SET2("Trace #",$$GET1^DIQ(IBVF,INIEN,.09))
 +27       DO SET1("Policy Number",$$GET1^DIQ(IBVF,INIEN,1.2))
 +28       DO SET1()
 +29       SET IBNOLBL=0
 +30       DO SET1("Contact Information",,1,1)
 +31       SET X1=0
           FOR 
               SET X1=$ORDER(^IBCN(365,IBVDA,3,X1))
               if X1'=+X1
                   QUIT 
               Begin DoDot:1
 +32               NEW DATA,STRTLINE,QFILE,QIEN
 +33               SET STRTLINE=LN
 +34               SET QFILE=365.03
                   SET QIEN=X1_","_IBVDA
 +35               SET DATA=$$GET1^DIQ(QFILE,QIEN,.01)
 +36               IF DATA'=""
                       DO SET1(DATA)
 +37               DO SET4($$GETQUAL(.02),$$GET1^DIQ(QFILE,QIEN,1))
 +38               DO SET4($$GETQUAL(.04),$$GET1^DIQ(QFILE,QIEN,2))
 +39               DO SET4($$GETQUAL(.06),$$GET1^DIQ(QFILE,QIEN,3))
 +40               if STRTLINE'=LN
                       DO SET1()
               End DoDot:1
 +41       DO SET1()
 +42       QUIT 
 +43      ;
WAITING   ;
 +1        DO SET1()
 +2       ;IB*763/TAZ - Removed trailing ":" for consistency
 +3       ;D SET1("Awaiting Payer Response.")
 +4        DO SET4("","Awaiting Payer Response.")
 +5        QUIT 
 +6       ; 
NODATA    ; display no data found
 +1        DO SET1()
 +2       ;IB*763/TAZ - Removed trailing ":" for consistency
 +3       ;D SET1("No Payer Summary Data Found")
 +4        DO SET4("","No Payer Summary Data Found")
 +5        QUIT 
 +6       ;
GETQUAL(QREC) ; Return Communication Qualifier text
 +1        NEW IEN
 +2        SET IEN=$$GET1^DIQ(QFILE,QIEN,QREC,"I")
 +3        QUIT $$GET1^DIQ(365.021,+$GET(IEN),.02)
 +4       ;
SET2(LABEL,DATA,IBVV,COLUMN) ; Update previous line at COL2
 +1        IF +$GET(IBVEBCOL)
               DO SET1($GET(LABEL),$GET(DATA),$GET(IBVV),$GET(COLUMN))
               QUIT 
 +2        SET COL=COL2
 +3        GOTO SETSTART
 +4       ;
SET4(LABEL,DATA) ; print on column 4 if data is not blank
 +1        IF ($GET(LABEL)'="")!($GET(DATA)'="")
               DO SET1(LABEL,DATA,,4)
 +2        QUIT 
 +3       ;
SET1(LABEL,DATA,IBVV,COLUMN) ; Set next line at COL1
 +1       ;
 +2       ; IBVV - video attributes flag
 +3       ;        1 = reverse video
 +4       ;        2 = bold
 +5       ;        3 = underline
 +6       ;
 +7        SET LN=LN+1
 +8        SET COL=COL1
 +9       ;
SETSTART  ;
 +1        NEW STR,D1
 +2        IF $GET(COLUMN)>0
               SET COL=COLUMN
 +3        IF $GET(LABEL)'=""
               IF COL>1
                   SET LABEL=" "_LABEL
                   SET COL=COL-1
 +4       ; get the current string
           SET STR=$GET(@VALMAR@(LN,0))
 +5        SET D1=""
 +6        IF $GET(IBNOLBL)
               SET D1=$GET(DATA)
 +7       IF '$TEST
               Begin DoDot:1
 +8                IF $GET(LABEL)'=""
                       SET D1=LABEL_": "
 +9       ; build the new display
                   IF $GET(DATA)'=""
                       SET D1=D1_$GET(DATA)
               End DoDot:1
 +10      ;
 +11      ; insert new data
           SET STR=$$SETSTR^VALM1(D1,STR,+COL,(81-COL))
 +12      ;
 +13       DO SET^VALM10(LN,STR)
 +14      ;
 +15      ; Add the video attributes if requested
 +16       IF $GET(IBVV)
               Begin DoDot:1
 +17      ; reverse video
                   IF IBVV=1
                       DO CNTRL^VALM10(LN,COL,$LENGTH(LABEL),IORVON,IORVOFF)
 +18      ; bold
                   IF IBVV=2
                       DO CNTRL^VALM10(LN,COL,$LENGTH(LABEL),IOINHI,IOINORM)
 +19      ; underline
                   IF IBVV=3
                       DO CNTRL^VALM10(LN,COL,$LENGTH(LABEL),IOUON,IOUOFF)
 +20               QUIT 
               End DoDot:1
 +21      ;
SETX      ;
 +1        QUIT 
HELP      ; -- help code
 +1        SET X="?"
           DO DISP^XQORM1
           WRITE !!
 +2        QUIT 
 +3       ;
EXIT      ; -- exit code
 +1        QUIT 
 +2       ;
EXPND     ; -- expand code
 +1        QUIT 
 +2       ;