IBCNERP1 ;DAOU/BHS - IBCNE USER IF eIV RESPONSE REPORT ; 03-JUN-2002
 ;;2.0;INTEGRATED BILLING;**184,271,416,528,549,668,702,737,752,763**;21-MAR-94;Build 29
 ;;Per VA Directive 6402, this routine should not be modified.
 ;
 ; eIV - Insurance Verification Interface
 ;
 ; IB*737/TAZ - Remove references to ~NO PAYER
 ; IB*763/TAZ - Remove references to routines IBCNERPF, IBCNERPG, and IBCNERPH.
 ;
 ; Input parameters: N/A
 ; Other relevant variables ZTSAVED for queueing:
 ;  IBCNERTN = "IBCNERP1" (current routine name for queueing the 
 ;   COMPILE process)
 ;  IBCNESPC("BEGDT")=start dt for rpt
 ;  IBCNESPC("ENDDT")=end dt for rpt
 ;  IBCNESPC("PYR")=payer ien (365.12) or "" for all payers
 ;  IBCNESPC("SORT")=1 (Payer name) OR 2 (Patient name)
 ;  IBCNESPC("PAT")=patient ien (2) or "" for all patients
 ;  IBCNESPC("TYPE")=A (All Responses) for date range OR M (Most Recent
 ;   Responses) for date range (by unique Payer/Pat pair)
 ;  IBCNESPC("TRCN")=Trace #^IEN, if non-null all other params are null
 ;  IBCNESPC("RFLAG")=Report Flag used to indicate which report is being
 ;   run.  Response Report (0), Inactive Report (1), or Ambiguous 
 ;   Report (2).
 ;  IBCNESPC("DTEXP")=Expiration date used in the inactive policy report
 ;  IBOUT="R" for Report format or "E" for Excel format
 ;
 ; Only call this routine at a tag
 Q
EN(IPRF) ; Main entry pt
 ; Init vars
 N IBCNERTN,IBCNESPC,IBOUT,POP,STOP
 N IBSTOP ; IB*702 to control initial quit point
 S IPRF=$G(IPRF) ; IB*702
 S IBCNESPC("RFLAG")=$G(IPRF)
 ;
 S STOP=0
 S IBCNERTN="IBCNERP1"
 W @IOF
 W !,"eIV ",$S(IPRF=1:"Inactive Policy",IPRF=2:"Ambiguous Policy",1:"Response")," Report",!
 I $G(IPRF) D
 . ; IB*702/DTG start update initial report statement
 . ;W !,"Please select a date range to view ",$S(IPRF=1:"inactive",1:"ambiguous")," policy information that the eIV"
 . ;W !,"process turned up while attempting to discover previously unknown"
 . ;W !,"insurance policies. (Date range selection is based on the date that"
 . ;W !,"eIV receives the response from the payer.)"
 . ;
 . W !,"Please select a date range in which ",$S(IPRF=1:"inactive",1:"ambiguous")," responses were received to view"
 . W !,"the associated response detail. Date range selection is based on the date"
 . W !,"that eIV receives the response from the payer."
 . ; IB*702/DTG end update initial report statement
 ;
 I '$G(IPRF) D
 . W !,"Insurance verification responses are received daily."
 . W !,"Please select a date range in which responses were received to view the"
 . W !,"associated response detail.  Otherwise, select a Trace # to view specific"
 . W !,"response detail."
 ;
 ; Rpt by Date Range or Trace #
R05 I '$G(IPRF) D RTYPE I STOP G EXIT ;IB*752/CKB - if user entered '^', exit option
 ; If rpt by Trace # - no other criteria is necessary
 I $G(IBCNESPC("TRCN")) G R60
 ; Date Range params
 ; IB*702/DTG start exit if up caret on start date for inactive/ambiguous
R10 ;D DTRANGE I STOP G:$$STOP EXIT G R05
 S IBSTOP=0 D DTRANGE
 I IBSTOP&(IPRF) G EXIT
 I STOP G:$$STOP EXIT G R05
 ; IB*702/DTG end exit if up caret on start date for inactiver/ambiguous
 ; Payer Selection param
R20 D PYRSEL I STOP G:$$STOP EXIT G R10
 ; Patient Selection param
R30 D PTSEL I STOP G:$$STOP EXIT G R20
 ; Type of data to return param
R40 D TYPE I STOP G:$$STOP EXIT G R30
 ; IB*702/DTG start remove policy exp date
 ; How far back do you want the expiration date
R45 ; I $G(IPRF)=1 D DTEXP I STOP G:$$STOP EXIT G R40
 S IBCNESPC("DTEXP")=""
 ; Sort by param - Payer or Patient
R50 ;D SORT I STOP G:$$STOP EXIT G R45
 D SORT I STOP G:$$STOP EXIT G R40
 ; IB*702/DTG end remove policy exp date
 ; Select the output type
R60 S IBOUT=$$OUT I STOP G:$$STOP EXIT G R50
 I IBOUT="E" W !!,"To avoid undesired wrapping, please enter '0;256;999' at the 'DEVICE:' prompt.",!
 ; Select output device
 ; IB*702/DTG start go back 1 if up caret and no to quit
R100 ;D DEVICE(IBCNERTN,.IBCNESPC,IBOUT) I STOP Q:+$G(IBFRB)&($G(IBOUT)="E")  G:$$STOP EXIT G:$G(IBCNESPC("TRCN"))'="" R05 G R50
 D DEVICE(IBCNERTN,.IBCNESPC,IBOUT)
 ;IB*752/DTG remove step back if upcaret and go to exit
 ;I STOP Q:+$G(IBFRB)&($G(IBOUT)="E")  G:$$STOP EXIT G:$G(IBCNESPC("TRCN"))'="" R05 G R60  ; IB*702/DTG start go back 1 if up caret and no to quit
 I STOP G EXIT
 ;
EXIT ; Exit pt
 Q
 ;
COMPILE(IBCNERTN,IBCNESPC,IBOUT) ; 
 ; Entry point called from EN^XUTMDEVQ in either direct or queued mode.
 ; Input params:
 ;  IBCNERTN = Routine name for ^TMP($J,...
 ;  IBCNESPC = Array passed by ref of the report params
 ;
 ; Init scratch globals
 K ^TMP($J,IBCNERTN),^TMP($J,IBCNERTN_"X")
 ; Compile
 I IBCNERTN="IBCNERP1" D EN^IBCNERP2(IBCNERTN,.IBCNESPC,IBOUT)
 I IBCNERTN="IBCNERP4" D EN^IBCNERP5(IBCNERTN,.IBCNESPC)
 I IBCNERTN="IBCNERP7" D EN^IBCNERP8(IBCNERTN,.IBCNESPC)
 ; Print
 I '$G(ZTSTOP) D
 . I IBCNERTN="IBCNERP1" D EN3^IBCNERPA(IBCNERTN,.IBCNESPC,IBOUT)
 . I IBCNERTN="IBCNERP4" D EN6^IBCNERPA(IBCNERTN,.IBCNESPC,IBOUT)
 . I IBCNERTN="IBCNERP7" D EN^IBCNERP9(IBCNERTN,.IBCNESPC,IBOUT)
 ; Close device
 D ^%ZISC
 ; Kill scratch globals
 K ^TMP($J,IBCNERTN),^TMP($J,IBCNERTN_"X")
 ; Purge task record
 I $D(ZTQUEUED) S ZTREQ="@"
 ;
COMPILX ; COMPILE exit pt
 Q
 ;
STOP() ; Determine if user wants to exit out of the whole option
 ; Init vars
 N DIR,X,Y,DIRUT
 ;
 W !
 S DIR(0)="Y"
 S DIR("A")="Do you want to exit out of this option entirely"
 S DIR("B")="YES"
 S DIR("?",1)="  Enter YES to immediately exit out of this option."
 S DIR("?")="  Enter NO to return to the previous question."
 D ^DIR K DIR
 I $D(DIRUT) S (STOP,Y)=1 G STOPX
 I 'Y S STOP=0
 ;
STOPX ; STOP exit pt
 Q Y
 ;
DTRANGE ; Determine start and end dates for date range param
 ; Init vars
 N X,Y,DIRUT
 ;
 W !
 ;
 S DIR(0)="D^:-NOW:EX"
 S DIR("A")="Start DATE"
 S DIR("?",1)="   Please enter a valid date for which an eIV Response"
 S DIR("?")="   would have been received. Future dates are not allowed."
 D ^DIR K DIR
 ; IB*702/DTG start exit if up caret on start date for inactive/ambiguous
 ;I $D(DIRUT) S STOP=1 G DTRANGX
 I $D(DIRUT) D  G DTRANGX
 . I $G(IPRF)=1!($G(IPRF)=2) S IBSTOP=1 Q
 . S STOP=1
 ; IB*702/DTG end exit if up caret on start date for inactive/ambiguous
 S IBCNESPC("BEGDT")=Y
 ; End date
DTRANG1 S DIR(0)="DA^"_Y_":-NOW:EX"
 S DIR("A")="  End DATE:  "
 S DIR("?",1)="   Please enter a valid date for which an eIV Response"
 S DIR("?",2)="   would have been received.  This date must not precede"
 S DIR("?")="   the Start Date.  Future dates are not allowed."
 D ^DIR K DIR
 I $D(DIRUT) S STOP=1 G DTRANGX
 S IBCNESPC("ENDDT")=Y
 ;
DTRANGX ; DTRANGE exit pt
 Q
 ;
PYRSEL ; Select one payer or ALL - File #365.12
 ; Init vars
 NEW DIC,DTOUT,DUOUT,X,Y
 ;
 W !
 S DIC(0)="ABEQ"
 S DIC("A")=$$FO^IBCNEUT1("Payer or <Return> for All Payers: ",40,"R")
 ; Do not allow selection of non-eIV payers
 ;IB*668/TAZ - Changed Payer Application from IIV to EIV
 S DIC("S")="I $$PYRAPP^IBCNEUT5(""EIV"",$G(Y))'="""""
 S DIC="^IBE(365.12,"
 D ^DIC
 I $D(DUOUT)!$D(DTOUT) S STOP=1 G PYRSELX
 ; If nothing was selected (Y=-1), select ALL payers
 S IBCNESPC("PYR")=$S(Y=-1:"",1:$P(Y,U,1))
 ;
PYRSELX ; PYRSEL exit pt
 Q
 ;
PTSEL ; Select one patient or ALL - File #2
 ; Init vars
 NEW DIC,DTOUT,DUOUT,X,Y
 ; Patient lookup
 W !
 S DIC(0)="AEQM"
 S DIC("A")=$$FO^IBCNEUT1("Patient or <Return> for All Patients: ",40,"R")
 S DIC="^DPT("
 D ^DIC
 I $D(DUOUT)!$D(DTOUT) S STOP=1 G PTSELX
 ; If nothing was selected (Y=-1), select ALL patients
 S IBCNESPC("PAT")=$S(Y=-1:"",1:$P(Y,U,1))
 ;
PTSELX ; PTSEL exit pt
 Q
 ;
TYPE ; Prompt to select to display All or Most Recent Responses for
 ; Patient/Payer combos
 ; Init vars
 N DIR,X,Y,DIRUT
 ;
 S DIR(0)="S^A:All Responses;M:Most Recent Responses"
 S DIR("A")="Select the type of responses to display"
 S DIR("B")="A"
 S DIR("?",1)="  A - All responses from the payer during the date range will be"
 S DIR("?",2)="      displayed for each unique payer/patient combination."
 S DIR("?",3)="      (Default)"
 S DIR("?",4)="  M - Only the most recently received response from the payer"
 S DIR("?",5)="      during the date range will be displayed for each unique"
 S DIR("?")="      payer/patient combination."
 D ^DIR K DIR
 I $D(DIRUT) S STOP=1 G TYPEX
 S IBCNESPC("TYPE")=Y
 ;
TYPEX ; TYPE exit pt
 Q
 ;
DTEXP ; Prompt for oldest expiration date to pull for.
 ; Init Vars
 N Y,DIRUT,TODAY
 ;
 W !
 ;
 S DIR(0)="D^:-NOW:EX"
 S DIR("A")="Earliest Policy Expiration Date to Select From"
 S DIR("B")="T-365"
 S DIR("?",1)=" Please enter a valid date in the past. Any policy with a reported"
 S DIR("?")=" expiration date prior to this date will not be selected."
 D ^DIR K DIR
 I $D(DIRUT) S STOP=1 G DTEXPX
 S IBCNESPC("DTEXP")=Y
 ;
DTEXPX ; DTEXP Exit
 Q
 ;
SORT ; Prompt to allow users to sort the report by Payer(default) or 
 ;  Patient
 ; Init vars
 N DIR,X,Y,DIRUT
 ;
 S DIR(0)="S^1:Payer Name;2:Patient Name"
 S DIR("A")="Select the primary sort field"
 S DIR("B")=1
 S DIR("?",1)="  1 - Payer Name is the primary sort, Patient Name is secondary."
 S DIR("?",2)="      (Default)"
 S DIR("?")="  2 - Patient Name is the primary sort, Payer Name is secondary."
 D ^DIR K DIR
 I $D(DIRUT) S STOP=1 G SORTX
 S IBCNESPC("SORT")=Y
 ;
SORTX ; SORT exit pt
 Q
 ;
RTYPE ; Prompt to allow users to report by date range or Trace #
 ; Init vars
 N D,DIC,DIR,X,Y,DIRUT,DTOUT,DUOUT
 ;
 S DIR(0)="S^1:Report by Date Range;2:Report by Trace #"
 S DIR("A")="Select the type of report to generate"
 S DIR("B")=1
 S DIR("?",1)="  1 - Generate report by date range, payer range, patient range"
 S DIR("?",2)="      and All or Most Recent responses for payer/patient."
 S DIR("?",3)="      (Default)"
 S DIR("?",4)="  2 - Generate report for a specific Trace # which corresponds"
 S DIR("?")="      to an unique response."
 D ^DIR K DIR
 I $D(DIRUT) S STOP=1 G RTYPEX
 I Y=1 S IBCNESPC("TRCN")="" G RTYPEX
 ;
 ; Allow user to select Trace # from x-ref "C"
 W !
 S DIC(0)="AEVZSQ"
 S DIC="^IBCN(365,",D="C",DIC("A")="Enter Trace # for report: "
 ; IB*702/TAZ,CKB - added screen for transactions with a "WH" prefix on the Trace #
 S DIC("S")="I $E($P($G(^(0)),U,9),1,2)'=""WH"""
 S DIC("W")="N IBX S IBX=$P($G(^(0)),U,2,3) W:$P(IBX,U,1) $P($G(^DPT($P(IBX,U,1),0)),U,1) W:$P(IBX,U,2) ""  ""_$P($G(^IBE(365.12,$P(IBX,U,2),0)),U,1)"
 D IX^DIC K DIC
 I $D(DTOUT)!$D(DUOUT) S STOP=1 G RTYPEX
 I 'Y!(Y<0) S STOP=1 G RTYPEX
 S IBCNESPC("TRCN")=$P(Y(0),U,9)_"^"_$P(Y,U,1)
 ;
RTYPEX ; RTYPE exit pt
 Q
 ;
DEVICE(IBCNERTN,IBCNESPC,IBOUT) ; Device Handler and possible TaskManager calls
 ;
 ; Input params:
 ;  IBCNERTN = Routine name for ^TMP($J,...
 ;  IBCNESPC = Array passed by ref of the report params
 ;  IBOUT    = "R" for Report format or "E" for Excel format 
 ;
 ; Output params:
 ;  STOP = Flag to stop routine
 ;
 ; Init vars
 N POP,ZTDESC,ZTRTN,ZTSAVE
 ;
 I IBCNERTN="IBCNERP4"!(IBCNERTN="IBCNERPF"&($G(IBCNESPC("TYPE"))="D")) W:$G(IBOUT)="R" !!!,"*** This report is 132 characters wide ***",!
 S ZTRTN="COMPILE^IBCNERP1("""_IBCNERTN_""",.IBCNESPC,"""_IBOUT_""")"
 ; IB*2.0*549 Change name of report from "Patient Insurance Update" to "Auto Update"
 S ZTDESC="IBCNE eIV "_$S(IBCNERTN="IBCNERP1":"Response",IBCNERTN="IBCNERPF":"Auto Update",1:"Payer")_" Report"
 S ZTSAVE("IBCNESPC(")=""
 S ZTSAVE("IBCNERTN")=""
 S ZTSAVE("IBOUT")=""
 D EN^XUTMDEVQ(ZTRTN,ZTDESC,.ZTSAVE,"QM",1)
 I POP S STOP=1
 ;
DEVICEX ; DEVICE exit pt
 Q
 ;
OUT() ; Prompt to allow users to select output format
 N DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 W !
 S DIR(0)="SA^E:Excel;R:Report"
 S DIR("A")="(E)xcel Format or (R)eport Format: "
 S DIR("B")="Report"
 D ^DIR I $D(DIRUT) S STOP=1 Q ""
 Q Y
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIBCNERP1   11919     printed  Sep 23, 2025@19:51:12                                                                                                                                                                                                   Page 2
IBCNERP1  ;DAOU/BHS - IBCNE USER IF eIV RESPONSE REPORT ; 03-JUN-2002
 +1       ;;2.0;INTEGRATED BILLING;**184,271,416,528,549,668,702,737,752,763**;21-MAR-94;Build 29
 +2       ;;Per VA Directive 6402, this routine should not be modified.
 +3       ;
 +4       ; eIV - Insurance Verification Interface
 +5       ;
 +6       ; IB*737/TAZ - Remove references to ~NO PAYER
 +7       ; IB*763/TAZ - Remove references to routines IBCNERPF, IBCNERPG, and IBCNERPH.
 +8       ;
 +9       ; Input parameters: N/A
 +10      ; Other relevant variables ZTSAVED for queueing:
 +11      ;  IBCNERTN = "IBCNERP1" (current routine name for queueing the 
 +12      ;   COMPILE process)
 +13      ;  IBCNESPC("BEGDT")=start dt for rpt
 +14      ;  IBCNESPC("ENDDT")=end dt for rpt
 +15      ;  IBCNESPC("PYR")=payer ien (365.12) or "" for all payers
 +16      ;  IBCNESPC("SORT")=1 (Payer name) OR 2 (Patient name)
 +17      ;  IBCNESPC("PAT")=patient ien (2) or "" for all patients
 +18      ;  IBCNESPC("TYPE")=A (All Responses) for date range OR M (Most Recent
 +19      ;   Responses) for date range (by unique Payer/Pat pair)
 +20      ;  IBCNESPC("TRCN")=Trace #^IEN, if non-null all other params are null
 +21      ;  IBCNESPC("RFLAG")=Report Flag used to indicate which report is being
 +22      ;   run.  Response Report (0), Inactive Report (1), or Ambiguous 
 +23      ;   Report (2).
 +24      ;  IBCNESPC("DTEXP")=Expiration date used in the inactive policy report
 +25      ;  IBOUT="R" for Report format or "E" for Excel format
 +26      ;
 +27      ; Only call this routine at a tag
 +28       QUIT 
EN(IPRF)  ; Main entry pt
 +1       ; Init vars
 +2        NEW IBCNERTN,IBCNESPC,IBOUT,POP,STOP
 +3       ; IB*702 to control initial quit point
           NEW IBSTOP
 +4       ; IB*702
           SET IPRF=$GET(IPRF)
 +5        SET IBCNESPC("RFLAG")=$GET(IPRF)
 +6       ;
 +7        SET STOP=0
 +8        SET IBCNERTN="IBCNERP1"
 +9        WRITE @IOF
 +10       WRITE !,"eIV ",$SELECT(IPRF=1:"Inactive Policy",IPRF=2:"Ambiguous Policy",1:"Response")," Report",!
 +11       IF $GET(IPRF)
               Begin DoDot:1
 +12      ; IB*702/DTG start update initial report statement
 +13      ;W !,"Please select a date range to view ",$S(IPRF=1:"inactive",1:"ambiguous")," policy information that the eIV"
 +14      ;W !,"process turned up while attempting to discover previously unknown"
 +15      ;W !,"insurance policies. (Date range selection is based on the date that"
 +16      ;W !,"eIV receives the response from the payer.)"
 +17      ;
 +18               WRITE !,"Please select a date range in which ",$SELECT(IPRF=1:"inactive",1:"ambiguous")," responses were received to view"
 +19               WRITE !,"the associated response detail. Date range selection is based on the date"
 +20               WRITE !,"that eIV receives the response from the payer."
 +21      ; IB*702/DTG end update initial report statement
               End DoDot:1
 +22      ;
 +23       IF '$GET(IPRF)
               Begin DoDot:1
 +24               WRITE !,"Insurance verification responses are received daily."
 +25               WRITE !,"Please select a date range in which responses were received to view the"
 +26               WRITE !,"associated response detail.  Otherwise, select a Trace # to view specific"
 +27               WRITE !,"response detail."
               End DoDot:1
 +28      ;
 +29      ; Rpt by Date Range or Trace #
R05       ;IB*752/CKB - if user entered '^', exit option
           IF '$GET(IPRF)
               DO RTYPE
               IF STOP
                   GOTO EXIT
 +1       ; If rpt by Trace # - no other criteria is necessary
 +2        IF $GET(IBCNESPC("TRCN"))
               GOTO R60
 +3       ; Date Range params
 +4       ; IB*702/DTG start exit if up caret on start date for inactive/ambiguous
R10       ;D DTRANGE I STOP G:$$STOP EXIT G R05
 +1        SET IBSTOP=0
           DO DTRANGE
 +2        IF IBSTOP&(IPRF)
               GOTO EXIT
 +3        IF STOP
               if $$STOP
                   GOTO EXIT
               GOTO R05
 +4       ; IB*702/DTG end exit if up caret on start date for inactiver/ambiguous
 +5       ; Payer Selection param
R20        DO PYRSEL
           IF STOP
               if $$STOP
                   GOTO EXIT
               GOTO R10
 +1       ; Patient Selection param
R30        DO PTSEL
           IF STOP
               if $$STOP
                   GOTO EXIT
               GOTO R20
 +1       ; Type of data to return param
R40        DO TYPE
           IF STOP
               if $$STOP
                   GOTO EXIT
               GOTO R30
 +1       ; IB*702/DTG start remove policy exp date
 +2       ; How far back do you want the expiration date
R45       ; I $G(IPRF)=1 D DTEXP I STOP G:$$STOP EXIT G R40
 +1        SET IBCNESPC("DTEXP")=""
 +2       ; Sort by param - Payer or Patient
R50       ;D SORT I STOP G:$$STOP EXIT G R45
 +1        DO SORT
           IF STOP
               if $$STOP
                   GOTO EXIT
               GOTO R40
 +2       ; IB*702/DTG end remove policy exp date
 +3       ; Select the output type
R60        SET IBOUT=$$OUT
           IF STOP
               if $$STOP
                   GOTO EXIT
               GOTO R50
 +1        IF IBOUT="E"
               WRITE !!,"To avoid undesired wrapping, please enter '0;256;999' at the 'DEVICE:' prompt.",!
 +2       ; Select output device
 +3       ; IB*702/DTG start go back 1 if up caret and no to quit
R100      ;D DEVICE(IBCNERTN,.IBCNESPC,IBOUT) I STOP Q:+$G(IBFRB)&($G(IBOUT)="E")  G:$$STOP EXIT G:$G(IBCNESPC("TRCN"))'="" R05 G R50
 +1        DO DEVICE(IBCNERTN,.IBCNESPC,IBOUT)
 +2       ;IB*752/DTG remove step back if upcaret and go to exit
 +3       ;I STOP Q:+$G(IBFRB)&($G(IBOUT)="E")  G:$$STOP EXIT G:$G(IBCNESPC("TRCN"))'="" R05 G R60  ; IB*702/DTG start go back 1 if up caret and no to quit
 +4        IF STOP
               GOTO EXIT
 +5       ;
EXIT      ; Exit pt
 +1        QUIT 
 +2       ;
COMPILE(IBCNERTN,IBCNESPC,IBOUT) ; 
 +1       ; Entry point called from EN^XUTMDEVQ in either direct or queued mode.
 +2       ; Input params:
 +3       ;  IBCNERTN = Routine name for ^TMP($J,...
 +4       ;  IBCNESPC = Array passed by ref of the report params
 +5       ;
 +6       ; Init scratch globals
 +7        KILL ^TMP($JOB,IBCNERTN),^TMP($JOB,IBCNERTN_"X")
 +8       ; Compile
 +9        IF IBCNERTN="IBCNERP1"
               DO EN^IBCNERP2(IBCNERTN,.IBCNESPC,IBOUT)
 +10       IF IBCNERTN="IBCNERP4"
               DO EN^IBCNERP5(IBCNERTN,.IBCNESPC)
 +11       IF IBCNERTN="IBCNERP7"
               DO EN^IBCNERP8(IBCNERTN,.IBCNESPC)
 +12      ; Print
 +13       IF '$GET(ZTSTOP)
               Begin DoDot:1
 +14               IF IBCNERTN="IBCNERP1"
                       DO EN3^IBCNERPA(IBCNERTN,.IBCNESPC,IBOUT)
 +15               IF IBCNERTN="IBCNERP4"
                       DO EN6^IBCNERPA(IBCNERTN,.IBCNESPC,IBOUT)
 +16               IF IBCNERTN="IBCNERP7"
                       DO EN^IBCNERP9(IBCNERTN,.IBCNESPC,IBOUT)
               End DoDot:1
 +17      ; Close device
 +18       DO ^%ZISC
 +19      ; Kill scratch globals
 +20       KILL ^TMP($JOB,IBCNERTN),^TMP($JOB,IBCNERTN_"X")
 +21      ; Purge task record
 +22       IF $DATA(ZTQUEUED)
               SET ZTREQ="@"
 +23      ;
COMPILX   ; COMPILE exit pt
 +1        QUIT 
 +2       ;
STOP()    ; Determine if user wants to exit out of the whole option
 +1       ; Init vars
 +2        NEW DIR,X,Y,DIRUT
 +3       ;
 +4        WRITE !
 +5        SET DIR(0)="Y"
 +6        SET DIR("A")="Do you want to exit out of this option entirely"
 +7        SET DIR("B")="YES"
 +8        SET DIR("?",1)="  Enter YES to immediately exit out of this option."
 +9        SET DIR("?")="  Enter NO to return to the previous question."
 +10       DO ^DIR
           KILL DIR
 +11       IF $DATA(DIRUT)
               SET (STOP,Y)=1
               GOTO STOPX
 +12       IF 'Y
               SET STOP=0
 +13      ;
STOPX     ; STOP exit pt
 +1        QUIT Y
 +2       ;
DTRANGE   ; Determine start and end dates for date range param
 +1       ; Init vars
 +2        NEW X,Y,DIRUT
 +3       ;
 +4        WRITE !
 +5       ;
 +6        SET DIR(0)="D^:-NOW:EX"
 +7        SET DIR("A")="Start DATE"
 +8        SET DIR("?",1)="   Please enter a valid date for which an eIV Response"
 +9        SET DIR("?")="   would have been received. Future dates are not allowed."
 +10       DO ^DIR
           KILL DIR
 +11      ; IB*702/DTG start exit if up caret on start date for inactive/ambiguous
 +12      ;I $D(DIRUT) S STOP=1 G DTRANGX
 +13       IF $DATA(DIRUT)
               Begin DoDot:1
 +14               IF $GET(IPRF)=1!($GET(IPRF)=2)
                       SET IBSTOP=1
                       QUIT 
 +15               SET STOP=1
               End DoDot:1
               GOTO DTRANGX
 +16      ; IB*702/DTG end exit if up caret on start date for inactive/ambiguous
 +17       SET IBCNESPC("BEGDT")=Y
 +18      ; End date
DTRANG1    SET DIR(0)="DA^"_Y_":-NOW:EX"
 +1        SET DIR("A")="  End DATE:  "
 +2        SET DIR("?",1)="   Please enter a valid date for which an eIV Response"
 +3        SET DIR("?",2)="   would have been received.  This date must not precede"
 +4        SET DIR("?")="   the Start Date.  Future dates are not allowed."
 +5        DO ^DIR
           KILL DIR
 +6        IF $DATA(DIRUT)
               SET STOP=1
               GOTO DTRANGX
 +7        SET IBCNESPC("ENDDT")=Y
 +8       ;
DTRANGX   ; DTRANGE exit pt
 +1        QUIT 
 +2       ;
PYRSEL    ; Select one payer or ALL - File #365.12
 +1       ; Init vars
 +2        NEW DIC,DTOUT,DUOUT,X,Y
 +3       ;
 +4        WRITE !
 +5        SET DIC(0)="ABEQ"
 +6        SET DIC("A")=$$FO^IBCNEUT1("Payer or <Return> for All Payers: ",40,"R")
 +7       ; Do not allow selection of non-eIV payers
 +8       ;IB*668/TAZ - Changed Payer Application from IIV to EIV
 +9        SET DIC("S")="I $$PYRAPP^IBCNEUT5(""EIV"",$G(Y))'="""""
 +10       SET DIC="^IBE(365.12,"
 +11       DO ^DIC
 +12       IF $DATA(DUOUT)!$DATA(DTOUT)
               SET STOP=1
               GOTO PYRSELX
 +13      ; If nothing was selected (Y=-1), select ALL payers
 +14       SET IBCNESPC("PYR")=$SELECT(Y=-1:"",1:$PIECE(Y,U,1))
 +15      ;
PYRSELX   ; PYRSEL exit pt
 +1        QUIT 
 +2       ;
PTSEL     ; Select one patient or ALL - File #2
 +1       ; Init vars
 +2        NEW DIC,DTOUT,DUOUT,X,Y
 +3       ; Patient lookup
 +4        WRITE !
 +5        SET DIC(0)="AEQM"
 +6        SET DIC("A")=$$FO^IBCNEUT1("Patient or <Return> for All Patients: ",40,"R")
 +7        SET DIC="^DPT("
 +8        DO ^DIC
 +9        IF $DATA(DUOUT)!$DATA(DTOUT)
               SET STOP=1
               GOTO PTSELX
 +10      ; If nothing was selected (Y=-1), select ALL patients
 +11       SET IBCNESPC("PAT")=$SELECT(Y=-1:"",1:$PIECE(Y,U,1))
 +12      ;
PTSELX    ; PTSEL exit pt
 +1        QUIT 
 +2       ;
TYPE      ; Prompt to select to display All or Most Recent Responses for
 +1       ; Patient/Payer combos
 +2       ; Init vars
 +3        NEW DIR,X,Y,DIRUT
 +4       ;
 +5        SET DIR(0)="S^A:All Responses;M:Most Recent Responses"
 +6        SET DIR("A")="Select the type of responses to display"
 +7        SET DIR("B")="A"
 +8        SET DIR("?",1)="  A - All responses from the payer during the date range will be"
 +9        SET DIR("?",2)="      displayed for each unique payer/patient combination."
 +10       SET DIR("?",3)="      (Default)"
 +11       SET DIR("?",4)="  M - Only the most recently received response from the payer"
 +12       SET DIR("?",5)="      during the date range will be displayed for each unique"
 +13       SET DIR("?")="      payer/patient combination."
 +14       DO ^DIR
           KILL DIR
 +15       IF $DATA(DIRUT)
               SET STOP=1
               GOTO TYPEX
 +16       SET IBCNESPC("TYPE")=Y
 +17      ;
TYPEX     ; TYPE exit pt
 +1        QUIT 
 +2       ;
DTEXP     ; Prompt for oldest expiration date to pull for.
 +1       ; Init Vars
 +2        NEW Y,DIRUT,TODAY
 +3       ;
 +4        WRITE !
 +5       ;
 +6        SET DIR(0)="D^:-NOW:EX"
 +7        SET DIR("A")="Earliest Policy Expiration Date to Select From"
 +8        SET DIR("B")="T-365"
 +9        SET DIR("?",1)=" Please enter a valid date in the past. Any policy with a reported"
 +10       SET DIR("?")=" expiration date prior to this date will not be selected."
 +11       DO ^DIR
           KILL DIR
 +12       IF $DATA(DIRUT)
               SET STOP=1
               GOTO DTEXPX
 +13       SET IBCNESPC("DTEXP")=Y
 +14      ;
DTEXPX    ; DTEXP Exit
 +1        QUIT 
 +2       ;
SORT      ; Prompt to allow users to sort the report by Payer(default) or 
 +1       ;  Patient
 +2       ; Init vars
 +3        NEW DIR,X,Y,DIRUT
 +4       ;
 +5        SET DIR(0)="S^1:Payer Name;2:Patient Name"
 +6        SET DIR("A")="Select the primary sort field"
 +7        SET DIR("B")=1
 +8        SET DIR("?",1)="  1 - Payer Name is the primary sort, Patient Name is secondary."
 +9        SET DIR("?",2)="      (Default)"
 +10       SET DIR("?")="  2 - Patient Name is the primary sort, Payer Name is secondary."
 +11       DO ^DIR
           KILL DIR
 +12       IF $DATA(DIRUT)
               SET STOP=1
               GOTO SORTX
 +13       SET IBCNESPC("SORT")=Y
 +14      ;
SORTX     ; SORT exit pt
 +1        QUIT 
 +2       ;
RTYPE     ; Prompt to allow users to report by date range or Trace #
 +1       ; Init vars
 +2        NEW D,DIC,DIR,X,Y,DIRUT,DTOUT,DUOUT
 +3       ;
 +4        SET DIR(0)="S^1:Report by Date Range;2:Report by Trace #"
 +5        SET DIR("A")="Select the type of report to generate"
 +6        SET DIR("B")=1
 +7        SET DIR("?",1)="  1 - Generate report by date range, payer range, patient range"
 +8        SET DIR("?",2)="      and All or Most Recent responses for payer/patient."
 +9        SET DIR("?",3)="      (Default)"
 +10       SET DIR("?",4)="  2 - Generate report for a specific Trace # which corresponds"
 +11       SET DIR("?")="      to an unique response."
 +12       DO ^DIR
           KILL DIR
 +13       IF $DATA(DIRUT)
               SET STOP=1
               GOTO RTYPEX
 +14       IF Y=1
               SET IBCNESPC("TRCN")=""
               GOTO RTYPEX
 +15      ;
 +16      ; Allow user to select Trace # from x-ref "C"
 +17       WRITE !
 +18       SET DIC(0)="AEVZSQ"
 +19       SET DIC="^IBCN(365,"
           SET D="C"
           SET DIC("A")="Enter Trace # for report: "
 +20      ; IB*702/TAZ,CKB - added screen for transactions with a "WH" prefix on the Trace #
 +21       SET DIC("S")="I $E($P($G(^(0)),U,9),1,2)'=""WH"""
 +22       SET DIC("W")="N IBX S IBX=$P($G(^(0)),U,2,3) W:$P(IBX,U,1) $P($G(^DPT($P(IBX,U,1),0)),U,1) W:$P(IBX,U,2) ""  ""_$P($G(^IBE(365.12,$P(IBX,U,2),0)),U,1)"
 +23       DO IX^DIC
           KILL DIC
 +24       IF $DATA(DTOUT)!$DATA(DUOUT)
               SET STOP=1
               GOTO RTYPEX
 +25       IF 'Y!(Y<0)
               SET STOP=1
               GOTO RTYPEX
 +26       SET IBCNESPC("TRCN")=$PIECE(Y(0),U,9)_"^"_$PIECE(Y,U,1)
 +27      ;
RTYPEX    ; RTYPE exit pt
 +1        QUIT 
 +2       ;
DEVICE(IBCNERTN,IBCNESPC,IBOUT) ; Device Handler and possible TaskManager calls
 +1       ;
 +2       ; Input params:
 +3       ;  IBCNERTN = Routine name for ^TMP($J,...
 +4       ;  IBCNESPC = Array passed by ref of the report params
 +5       ;  IBOUT    = "R" for Report format or "E" for Excel format 
 +6       ;
 +7       ; Output params:
 +8       ;  STOP = Flag to stop routine
 +9       ;
 +10      ; Init vars
 +11       NEW POP,ZTDESC,ZTRTN,ZTSAVE
 +12      ;
 +13       IF IBCNERTN="IBCNERP4"!(IBCNERTN="IBCNERPF"&($GET(IBCNESPC("TYPE"))="D"))
               if $GET(IBOUT)="R"
                   WRITE !!!,"*** This report is 132 characters wide ***",!
 +14       SET ZTRTN="COMPILE^IBCNERP1("""_IBCNERTN_""",.IBCNESPC,"""_IBOUT_""")"
 +15      ; IB*2.0*549 Change name of report from "Patient Insurance Update" to "Auto Update"
 +16       SET ZTDESC="IBCNE eIV "_$SELECT(IBCNERTN="IBCNERP1":"Response",IBCNERTN="IBCNERPF":"Auto Update",1:"Payer")_" Report"
 +17       SET ZTSAVE("IBCNESPC(")=""
 +18       SET ZTSAVE("IBCNERTN")=""
 +19       SET ZTSAVE("IBOUT")=""
 +20       DO EN^XUTMDEVQ(ZTRTN,ZTDESC,.ZTSAVE,"QM",1)
 +21       IF POP
               SET STOP=1
 +22      ;
DEVICEX   ; DEVICE exit pt
 +1        QUIT 
 +2       ;
OUT()     ; Prompt to allow users to select output format
 +1        NEW DIR,DIROUT,DIRUT,DTOUT,DUOUT,X,Y
 +2        WRITE !
 +3        SET DIR(0)="SA^E:Excel;R:Report"
 +4        SET DIR("A")="(E)xcel Format or (R)eport Format: "
 +5        SET DIR("B")="Report"
 +6        DO ^DIR
           IF $DATA(DIRUT)
               SET STOP=1
               QUIT ""
 +7        QUIT Y