| 1 | IBCNBLL ;ALB/ARH - Ins Buffer: LM main screen, list buffer entries ;1 Jun 97
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**82,149,153,183,184,271,345**;21-MAR-94;Build 28
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | EN ; - main entry point for screen
 | 
|---|
| 6 |  D EN^VALM("IBCNB INSURANCE BUFFER LIST")
 | 
|---|
| 7 |  Q
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 | HDR ;  header code for list manager display
 | 
|---|
| 10 |  S VALMHDR(1)="Buffer File entries not yet processed."
 | 
|---|
| 11 |  S VALMHDR(1)=VALMHDR(1)_"   (sorted by "_$P(IBCNSORT,U,2)
 | 
|---|
| 12 |  I $P(IBCNSORT,U,3)="" S VALMHDR(1)=VALMHDR(1)_")"
 | 
|---|
| 13 |  E  S VALMHDR(1)=VALMHDR(1)_", """_$P(IBCNSORT,U,3)_""" first)"
 | 
|---|
| 14 |  Q
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 | INIT ;  initialization for list manager list
 | 
|---|
| 17 |  K ^TMP("IBCNBLL",$J),^TMP("IBCNBLLX",$J),^TMP("IBCNBLLY",$J),^TMP($J,"IBCNBLLS")
 | 
|---|
| 18 |  I '$G(IBCNSORT) S IBCNSORT="1^Patient Name"
 | 
|---|
| 19 |  D BLD
 | 
|---|
| 20 |  Q
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 | HELP ;  list manager help
 | 
|---|
| 23 |  D FULL^VALM1
 | 
|---|
| 24 |  W @IOF
 | 
|---|
| 25 |  W !,"This screen lists all Insurance plans and policies in the Insurance Buffer",!,"that have not yet been processed (accepted or rejected).",!
 | 
|---|
| 26 |  W !,"Flags displayed on screen if they apply to the Buffer entry:",!,"   i - Patient has other currently effective Insurance",!,"   I - Patient is currently admitted as an Inpatient"
 | 
|---|
| 27 |  W !,"   E - Patient has Expired",!,"   Y - Means Test Copay Patient",!,"   H - Patient has Bills On Hold",!,"   * - Buffer entry Verified by User"
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 |  ; ESG - 6/7/02 - SDD 5.1.9
 | 
|---|
| 30 |  ; Help screen description of new symbols
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  D PAUSE^VALM1
 | 
|---|
| 33 |  W !!,"IIV Electronic Insurance Verification Status"
 | 
|---|
| 34 |  W !,"  The following IIV Status indicators may appear to the left of the"
 | 
|---|
| 35 |  W !,"  patient name:"
 | 
|---|
| 36 |  W !,"   + - The IIV payer indicated that this is an active policy via"
 | 
|---|
| 37 |  W !,"           electronic inquiry/response."
 | 
|---|
| 38 |  W !,"   ? - IIV inquiry was sent; awaiting reply from Payer."
 | 
|---|
| 39 |  W !,"   # - IIV received an electronic response from the Payer, but was not able to"
 | 
|---|
| 40 |  W !,"           determine whether or not the Payer is indicating active coverage.  "
 | 
|---|
| 41 |  W !,"           Carefully review the associated IIV Response Report, specifically "
 | 
|---|
| 42 |  W !,"           focusing on the Eligibility/Benefits section, if present."
 | 
|---|
| 43 |  W !,"           Manual confirmation is required."
 | 
|---|
| 44 |  W !,"   ! - IIV was unable to send an electronic inquiry for this insurance "
 | 
|---|
| 45 |  W !,"           information. User correction may be required to allow IIV to send "
 | 
|---|
| 46 |  W !,"           this inquiry."
 | 
|---|
| 47 |  W !,"           Please use the Expand Entry option to see more information."
 | 
|---|
| 48 |  W !,"   - - The IIV payer indicated that this is NOT an active policy via "
 | 
|---|
| 49 |  W !,"           electronic inquiry/response."
 | 
|---|
| 50 |  D PAUSE^VALM1
 | 
|---|
| 51 |  W !!,"When an entry is Processed it is either:"
 | 
|---|
| 52 |  W !,?3,"Accepted - the Buffer entry's data is stored in the main Insurance files.",!,?12,"- the modified Insurance entry is flagged as Verified.",!,?3,"Rejected - the Buffer entry's data is not stored in the main Insurance files."
 | 
|---|
| 53 |  W !!,"Once an entry is processed (either accepted or rejected) most of the data in ",!,"the Buffer File entry is deleted leaving only a stub entry for tracking ",!,"and reporting purposes."
 | 
|---|
| 54 |  W !!,"The IB INSURANCE SUPERVISOR key is required to either Accept or Reject an entry."
 | 
|---|
| 55 |  D PAUSE^VALM1 S VALMBCK="R"
 | 
|---|
| 56 |  Q
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 | EXIT ;  exit list manager option and clean up
 | 
|---|
| 59 |  K ^TMP("IBCNBLL",$J),^TMP("IBCNBLLX",$J),^TMP("IBCNBLLY",$J),^TMP($J,"IBCNBLLS"),IBCNSORT,IBCNSCRN,DFN,IBINSDA,IBFASTXT,IBBUFDA
 | 
|---|
| 60 |  D CLEAR^VALM1
 | 
|---|
| 61 |  Q
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 | BLD ;  build screen display
 | 
|---|
| 64 |  N IBCNT,IBCNS1,IBCNS2,IBBUFDA,IBLINE
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 |  D SORT S IBCNT=0,VALMCNT=0,IBBUFDA=0
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 |  S IBCNS1="" F  S IBCNS1=$O(^TMP($J,"IBCNBLLS",IBCNS1)) Q:IBCNS1=""  D
 | 
|---|
| 69 |  . S IBCNS2="" F  S IBCNS2=$O(^TMP($J,"IBCNBLLS",IBCNS1,IBCNS2)) Q:IBCNS2=""  D
 | 
|---|
| 70 |  ..  S IBBUFDA=0 F  S IBBUFDA=$O(^TMP($J,"IBCNBLLS",IBCNS1,IBCNS2,IBBUFDA)) Q:'IBBUFDA  D
 | 
|---|
| 71 |  ...  ;
 | 
|---|
| 72 |  ...  S IBCNT=IBCNT+1 I '$D(ZTQUEUED),'(IBCNT#15) W "."
 | 
|---|
| 73 |  ...  S IBLINE=$$BLDLN(IBBUFDA,IBCNT)
 | 
|---|
| 74 |  ...  D SET(IBLINE,IBCNT)
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  I VALMCNT=0 D SET("",0),SET("There are no Buffer entries that have not been processed.",0)
 | 
|---|
| 77 |  Q
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 | BLDLN(IBBUFDA,IBCNT) ; build line to display on List screen for one Buffer entry
 | 
|---|
| 80 |  N DFN,IB0,IB20,IB60,IBLINE,IBY,VAIN,VADM,VA,VAERR,X,Y,IBMTS S IBLINE="",IBBUFDA=+$G(IBBUFDA)
 | 
|---|
| 81 |  S IB0=$G(^IBA(355.33,IBBUFDA,0)),IB20=$G(^IBA(355.33,IBBUFDA,20)),IB60=$G(^IBA(355.33,IBBUFDA,60))
 | 
|---|
| 82 |  S DFN=+IB60 I +DFN D DEM^VADPT,INP^VADPT
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 |  S IBY=$G(IBCNT),IBLINE=$$SETSTR^VALM1(IBY,"",1,4)
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ; ESG - 6/6/02 - SDD 5.1.8
 | 
|---|
| 87 |  ; pull the symbol from the symbol function
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  S IBY=$$SYMBOL(IBBUFDA)
 | 
|---|
| 90 |  S IBY=IBY_$P($G(^DPT(+DFN,0)),U,1),IBLINE=$$SETSTR^VALM1(IBY,IBLINE,5,16)
 | 
|---|
| 91 |  S IBY=$G(VA("BID")),IBLINE=$$SETSTR^VALM1(IBY,IBLINE,23,4)
 | 
|---|
| 92 |  S IBY=$P(IB20,U,1),IBLINE=$$SETSTR^VALM1(IBY,IBLINE,29,17)
 | 
|---|
| 93 |  S IBY=$P(IB60,U,4),IBLINE=$$SETSTR^VALM1(IBY,IBLINE,48,10)
 | 
|---|
| 94 |  S IBY=$$GET1^DIQ(355.12,$P(IB0,U,3),.03),IBLINE=$$SETSTR^VALM1(IBY,IBLINE,60,5)
 | 
|---|
| 95 |  S IBY=$$DATE(+IB0),IBLINE=$$SETSTR^VALM1(IBY,IBLINE,66,8)
 | 
|---|
| 96 |  S IBY="" D  S IBLINE=$$SETSTR^VALM1(IBY,IBLINE,76,5)
 | 
|---|
| 97 |  . S IBY=IBY_$S(+$$INSURED^IBCNS1(DFN,DT):"i",1:" ")
 | 
|---|
| 98 |  . S IBY=IBY_$S(+$G(VAIN(1)):"I",1:" ")
 | 
|---|
| 99 |  . S IBY=IBY_$S(+$G(VADM(6)):"E",1:" ")
 | 
|---|
| 100 |  . S IBMTS=$P($$LST^DGMTU(DFN),U,4)
 | 
|---|
| 101 |  . S IBY=IBY_$S(IBMTS="C":"Y",IBMTS="G":"Y",1:" ")
 | 
|---|
| 102 |  . S IBY=IBY_$S(+$$HOLD(DFN):"H",1:" ")
 | 
|---|
| 103 |  Q IBLINE
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 | SET(LINE,CNT) ;  set up list manager screen display array
 | 
|---|
| 106 |  S VALMCNT=VALMCNT+1
 | 
|---|
| 107 |  S ^TMP("IBCNBLL",$J,VALMCNT,0)=LINE Q:'CNT
 | 
|---|
| 108 |  S ^TMP("IBCNBLL",$J,"IDX",VALMCNT,+CNT)=""
 | 
|---|
| 109 |  S ^TMP("IBCNBLLX",$J,CNT)=VALMCNT_U_IBBUFDA
 | 
|---|
| 110 |  S ^TMP("IBCNBLLY",$J,IBBUFDA)=VALMCNT_U_+CNT
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 | SORT ;  set up sort for list screen
 | 
|---|
| 114 |  ;  1^PATIENT NAME, 2^INS NAME, 3^SOURCE OF INFO, 4^DATE ENTERED, 5^INPATIENT (Y/N), 6^MEANS TEST (Y/N), 7^ON HOLD, 8^VERIFIED, 9^IIV STATUS
 | 
|---|
| 115 |  N IBCNDT,IBBUFDA,IBCNDFN,IBCNPAT,IBCSORT1,IBCSORT2,DFN,VAIN,VA,VAERR,IBX,IBCNT,X,Y S IBCNT=0
 | 
|---|
| 116 |  ;
 | 
|---|
| 117 |  K ^TMP($J,"IBCNBLLS") I '$G(IBCNSORT) S IBCNSORT="1^Patient Name"
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  S IBCNDT=0 F  S IBCNDT=$O(^IBA(355.33,"AEST","E",IBCNDT)) Q:'IBCNDT  D
 | 
|---|
| 120 |  .  S IBBUFDA=0 F  S IBBUFDA=$O(^IBA(355.33,"AEST","E",IBCNDT,IBBUFDA)) Q:'IBBUFDA  D
 | 
|---|
| 121 |  ..   S IBCNT=IBCNT+1 I '$D(ZTQUEUED),'(IBCNT#15) W "."
 | 
|---|
| 122 |  ..   ;
 | 
|---|
| 123 |  ..   S IBCNDFN=+$G(^IBA(355.33,IBBUFDA,60)),IBCNPAT="" I +IBCNDFN S IBCNPAT=$P($G(^DPT(IBCNDFN,0)),U,1)
 | 
|---|
| 124 |  ..   ;
 | 
|---|
| 125 |  ..   I +IBCNSORT=1 S IBCSORT1=IBCNPAT
 | 
|---|
| 126 |  ..   I +IBCNSORT=2 S IBCSORT1=$P($G(^IBA(355.33,IBBUFDA,20)),U,1)
 | 
|---|
| 127 |  ..   I +IBCNSORT=3 S IBCSORT1=$P($G(^IBA(355.33,IBBUFDA,0)),U,3)
 | 
|---|
| 128 |  ..   I +IBCNSORT=4 S IBCSORT1=$P(+$G(^IBA(355.33,IBBUFDA,0)),".",1)
 | 
|---|
| 129 |  ..   I +IBCNSORT=5 I +IBCNDFN S DFN=+IBCNDFN D INP^VADPT S IBCSORT1=$S($G(VAIN(1)):1,1:2)
 | 
|---|
| 130 |  ..   I +IBCNSORT=6 I +IBCNDFN S IBX=$P($$LST^DGMTU(IBCNDFN),U,4) S IBCSORT1=$S(IBX="C":1,IBX="G":1,1:2)
 | 
|---|
| 131 |  ..   I +IBCNSORT=7 I +IBCNDFN S IBX=$$HOLD(IBCNDFN) S IBCSORT1=$S(+IBX:1,1:2)
 | 
|---|
| 132 |  ..   I +IBCNSORT=8 S IBCSORT1=$S(+$P($G(^IBA(355.33,IBBUFDA,0)),U,10):1,1:2)
 | 
|---|
| 133 |  ..   ; Sort by symbol and then within the symbol, sort by date entered
 | 
|---|
| 134 |  ..   ; Build a numerical subscript with format ##.FM date
 | 
|---|
| 135 |  ..   I +IBCNSORT=9 S IBCSORT1=$G(IBCNSORT(1,$$SYMBOL(IBBUFDA)))_"."_$P(+$G(^IBA(355.33,IBBUFDA,0)),".",1),IBCSORT1=+IBCSORT1
 | 
|---|
| 136 |  ..   ;
 | 
|---|
| 137 |  ..   S IBCSORT1=$S($G(IBCSORT1)="":"~UNKNOWN",1:IBCSORT1),IBCSORT2=$S(IBCNPAT="":"~UNKNOWN",1:IBCNPAT)
 | 
|---|
| 138 |  ..   ;
 | 
|---|
| 139 |  ..   S ^TMP($J,"IBCNBLLS",IBCSORT1,IBCSORT2,IBBUFDA)="" K VAIN,IBCSORT1
 | 
|---|
| 140 |  I IBCNT,'$D(ZTQUEUED) W "|"
 | 
|---|
| 141 |  Q
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | DATE(X) ;
 | 
|---|
| 144 |  Q $E(X,4,5)_"/"_$E(X,6,7)_"/"_$E(X,2,3)
 | 
|---|
| 145 | HOLD(DFN) ; returns true if patient has bills On Hold
 | 
|---|
| 146 |  Q $D(^IB("AH",+$G(DFN)))
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 | SYMBOL(IBBUFDA) ; Returns the symbol for this buffer entry
 | 
|---|
| 149 |  NEW IB0,SYM
 | 
|---|
| 150 |  S IB0=$G(^IBA(355.33,IBBUFDA,0)),SYM=""
 | 
|---|
| 151 |  I +$P(IB0,U,12) S SYM=$C($P($G(^IBE(365.15,+$P(IB0,U,12),0)),U,2))
 | 
|---|
| 152 |  ; If the entry has been manually verified, override the symbol displayed
 | 
|---|
| 153 |  I $P(IB0,U,10)'="",'+$P(IB0,U,12) S SYM="*"
 | 
|---|
| 154 |  I SYM="" S SYM=" "
 | 
|---|
| 155 |  Q SYM
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 | UPDLN(IBBUFDA,ACTION) ; *** called by any action that modifies a buffer entry, so list screen can be updated if screen not recompiled
 | 
|---|
| 159 |  ; modifies a single line in the display array for a buffer entry that has been modified in some way
 | 
|---|
| 160 |  ; ACTION = REJECTED, ACCEPTED, EDITED
 | 
|---|
| 161 |  N IBARRN,IBOLD,IBNEW,IBO,IBN S IBO="0123456789",IBN="----------"
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  S IBARRN=$G(^TMP("IBCNBLLY",$J,+$G(IBBUFDA))) Q:'IBARRN
 | 
|---|
| 164 |  S IBOLD=$G(^TMP("IBCNBLL",$J,+IBARRN,0)) Q:IBOLD=""
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  ; if action is REJECTED or ACCEPTED then the patient name is replaced by the Action in the display array
 | 
|---|
| 167 |  ; and the buffer entry is removed from the list of entries that can be selected
 | 
|---|
| 168 |  I (ACTION="REJECTED")!(ACTION="ACCEPTED") D
 | 
|---|
| 169 |  . S IBNEW=$TR($E(IBOLD,1,5),IBO,IBN)_ACTION_$J("",7)_$E(IBOLD,21,999)
 | 
|---|
| 170 |  . S ^TMP("IBCNBLL",$J,+IBARRN,0)=IBNEW
 | 
|---|
| 171 |  ;
 | 
|---|
| 172 |  ; if the action is EDITED then the line for the buffer entry is recomplied and the updated line is set into 
 | 
|---|
| 173 |  ; the display array
 | 
|---|
| 174 |  I ACTION="EDITED" D
 | 
|---|
| 175 |  . S IBNEW=$$BLDLN(IBBUFDA,+$P(IBARRN,U,2))
 | 
|---|
| 176 |  . S ^TMP("IBCNBLL",$J,+IBARRN,0)=IBNEW
 | 
|---|
| 177 |  Q
 | 
|---|