| 1 | IBCEMCL ;ALB/ESG - Multiple CSA Message Management ;20-SEP-2005
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**320**;21-MAR-1994
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  Q
 | 
|---|
| 6 | EN ; -- main entry point
 | 
|---|
| 7 |  L +^IBM("MCS"):0 I '$T D  Q    ; option level lock
 | 
|---|
| 8 |  . W !!?2,"Sorry, another user is currently using the MCS option."
 | 
|---|
| 9 |  . W !?2,"Please try again later."
 | 
|---|
| 10 |  . D PAUSE^VALM1
 | 
|---|
| 11 |  . Q
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  K ^TMP($J,"IBCEMCA"),^TMP($J,"IBCEMCL")
 | 
|---|
| 14 |  D EN^VALM("IBCEMC MCS MESSAGE LIST")
 | 
|---|
| 15 |  L -^IBM("MCS")                            ; option level unlock
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 | HDR ; -- header code
 | 
|---|
| 19 |  NEW Z,NUMSEL,TOT
 | 
|---|
| 20 |  S NUMSEL=+$G(^TMP($J,"IBCEMCL",4))      ; number selected
 | 
|---|
| 21 |  S TOT=+$O(^TMP($J,"IBCEMCL",3,""),-1)   ; total number in list
 | 
|---|
| 22 |  S Z="Number of Claims Selected: "
 | 
|---|
| 23 |  S Z=Z_$$FO^IBCNEUT1(NUMSEL,8)
 | 
|---|
| 24 |  S Z=Z_$$FO^IBCNEUT1(" ",10)
 | 
|---|
| 25 |  S Z=Z_"Total Number in this List: "
 | 
|---|
| 26 |  S Z=Z_$$FO^IBCNEUT1(TOT,8)
 | 
|---|
| 27 |  S VALMHDR(1)=Z
 | 
|---|
| 28 |  Q
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | INIT ; -- init variables and list array
 | 
|---|
| 31 |  NEW A,CLAIM,DATA,EDI,IB,IB0,IB361,IB364,IBCNT,IBCURBAL,IBDA,IBDATE
 | 
|---|
| 32 |  NEW IBDIV,IBIFN,IBPAT,IBREV,IBSSN,IBSTSMSG,IBSVC,IBU1,INCLUDE,INS
 | 
|---|
| 33 |  NEW INSTID,PAYER,PROFID,SELTXT,TXT,X
 | 
|---|
| 34 |  W !!,"Compiling MCS Data ... "
 | 
|---|
| 35 |  KILL ^TMP($J,"IBCEMCL")     ; List related scratch global
 | 
|---|
| 36 |  S IBREV=""
 | 
|---|
| 37 |  F  S IBREV=$O(^IBM(361,"ACSA","R",IBREV)) Q:IBREV=""  I IBREV<2 S IBDA=0 F  S IBDA=$O(^IBM(361,"ACSA","R",IBREV,IBDA)) Q:'IBDA  D
 | 
|---|
| 38 |  . S IB361=$G(^IBM(361,IBDA,0)),IBIFN=+IB361
 | 
|---|
| 39 |  . S IB0=$G(^DGCR(399,IBIFN,0))
 | 
|---|
| 40 |  . ;
 | 
|---|
| 41 |  . ; no cancelled claims
 | 
|---|
| 42 |  . I $P(IB0,U,13)=7 D UPDEDI^IBCEM(+$P(IB361,U,11),"C") Q
 | 
|---|
| 43 |  . ;
 | 
|---|
| 44 |  . ; automatically review this message if the claim was last printed on
 | 
|---|
| 45 |  . ; or after the MCS - 'Resubmit by Print' date
 | 
|---|
| 46 |  . I $P(IB361,U,16),($P($G(^DGCR(399,IBIFN,"S")),U,14)\1)'<$P(IB361,U,16) D UPDEDI^IBCEM(+$P(IB361,U,11),"P") Q
 | 
|---|
| 47 |  . ;
 | 
|---|
| 48 |  . ; payer
 | 
|---|
| 49 |  . S INS=+$P($G(^DGCR(399,IBIFN,"MP")),U,1)
 | 
|---|
| 50 |  . I 'INS S INS=+$$CURR^IBCEF2(IBIFN)
 | 
|---|
| 51 |  . I INS S PAYER=$P($G(^DIC(36,INS,0)),U,1)
 | 
|---|
| 52 |  . I 'INS S PAYER="~unknown payer"
 | 
|---|
| 53 |  . ;
 | 
|---|
| 54 |  . ; screen for user selected payers
 | 
|---|
| 55 |  . I $D(^TMP($J,"IBCEMCA","INS")) D  Q:'INCLUDE
 | 
|---|
| 56 |  .. S INCLUDE=0
 | 
|---|
| 57 |  .. I 'INS Q     ; don't include if the payer can't be found
 | 
|---|
| 58 |  .. I $D(^TMP($J,"IBCEMCA","INS",1,INS)) S INCLUDE=1 Q
 | 
|---|
| 59 |  .. I '$D(^TMP($J,"IBCEMCA","INS",2)) Q
 | 
|---|
| 60 |  .. S EDI=$$UP^XLFSTR($G(^DIC(36,INS,3)))
 | 
|---|
| 61 |  .. S PROFID=$P(EDI,U,2),INSTID=$P(EDI,U,4)
 | 
|---|
| 62 |  .. I PROFID'="",$D(^TMP($J,"IBCEMCA","INS",2,PROFID)) S INCLUDE=1 Q
 | 
|---|
| 63 |  .. I INSTID'="",$D(^TMP($J,"IBCEMCA","INS",2,INSTID)) S INCLUDE=1 Q
 | 
|---|
| 64 |  .. Q
 | 
|---|
| 65 |  . ;
 | 
|---|
| 66 |  . ; screen for user selected divisions
 | 
|---|
| 67 |  . I $D(^TMP($J,"IBCEMCA","DIV")) D  Q:'INCLUDE
 | 
|---|
| 68 |  .. S INCLUDE=0
 | 
|---|
| 69 |  .. S IBDIV=+$P(IB0,U,22) I 'IBDIV Q
 | 
|---|
| 70 |  .. I $D(^TMP($J,"IBCEMCA","DIV",IBDIV)) S INCLUDE=1 Q
 | 
|---|
| 71 |  .. Q
 | 
|---|
| 72 |  . ;
 | 
|---|
| 73 |  . S IBSTSMSG=$$TXT^IBCECSA1(IBDA,300)           ; status message text
 | 
|---|
| 74 |  . I IBSTSMSG="" S IBSTSMSG="~no error text"
 | 
|---|
| 75 |  . ;
 | 
|---|
| 76 |  . ; screen for user selected error message text
 | 
|---|
| 77 |  . I $D(^TMP($J,"IBCEMCA","TEXT")) D  Q:'INCLUDE
 | 
|---|
| 78 |  .. S INCLUDE=0
 | 
|---|
| 79 |  .. S SELTXT="" F  S SELTXT=$O(^TMP($J,"IBCEMCA","TEXT",SELTXT)) Q:SELTXT=""  I IBSTSMSG[SELTXT S INCLUDE=1 Q
 | 
|---|
| 80 |  .. Q
 | 
|---|
| 81 |  . ;
 | 
|---|
| 82 |  . ; screen for user selected date range
 | 
|---|
| 83 |  . I $D(^TMP($J,"IBCEMCA","DATE")) D  Q:'INCLUDE
 | 
|---|
| 84 |  .. S INCLUDE=0,A=^TMP($J,"IBCEMCA","DATE")
 | 
|---|
| 85 |  .. S IBDATE=$P(IB361,U,2)    ; date message received
 | 
|---|
| 86 |  .. I ($P(A,U,1)'>IBDATE),(IBDATE'>$P(A,U,2)) S INCLUDE=1 Q
 | 
|---|
| 87 |  .. Q
 | 
|---|
| 88 |  . ;
 | 
|---|
| 89 |  . ; patient and ssn
 | 
|---|
| 90 |  . S IBPAT=$G(^DPT(+$P(IB0,U,2),0))
 | 
|---|
| 91 |  . S IBSSN=$E($P(IBPAT,U,9),6,9)
 | 
|---|
| 92 |  . S IBPAT=$P(IBPAT,U,1)
 | 
|---|
| 93 |  . ;
 | 
|---|
| 94 |  . S IBSVC=$P($G(^DGCR(399,IBIFN,"U")),U,1)  ; statement covers from
 | 
|---|
| 95 |  . S IB364=$P(IB361,U,11)                    ; transmission file entry
 | 
|---|
| 96 |  . S IBU1=$G(^DGCR(399,IBIFN,"U1"))
 | 
|---|
| 97 |  . S IBCURBAL=$P(IBU1,U,1)-$P(IBU1,U,2)      ; current balance
 | 
|---|
| 98 |  . S CLAIM=$P(IB0,U,1)                       ; external bill#
 | 
|---|
| 99 |  . ;
 | 
|---|
| 100 |  . S DATA=IBIFN_U_IB364_U_CLAIM_U_PAYER_U_IBPAT_U_IBSSN_U_IBSVC_U_IBCURBAL
 | 
|---|
| 101 |  . S ^TMP($J,"IBCEMCL",1,$E(IBSTSMSG,1,80),IBDA)=DATA
 | 
|---|
| 102 |  . Q
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  I '$D(^TMP($J,"IBCEMCL",1)) D  G INITX
 | 
|---|
| 105 |  . S VALMCNT=2
 | 
|---|
| 106 |  . S ^TMP($J,"IBCEMCL",2,1,0)=""
 | 
|---|
| 107 |  . S ^TMP($J,"IBCEMCL",2,2,0)="  No Status Message Data to Display"
 | 
|---|
| 108 |  . Q
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 | BLD ; Build the display area of the list
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  W !,"Building the MCS list display ... "
 | 
|---|
| 113 |  S TXT="",IBCNT=0,VALMCNT=0
 | 
|---|
| 114 |  F  S TXT=$O(^TMP($J,"IBCEMCL",1,TXT)) Q:TXT=""  D
 | 
|---|
| 115 |  . D SET("")
 | 
|---|
| 116 |  . D SET(TXT)
 | 
|---|
| 117 |  . S IBDA=0
 | 
|---|
| 118 |  . F  S IBDA=$O(^TMP($J,"IBCEMCL",1,TXT,IBDA)) Q:'IBDA  D
 | 
|---|
| 119 |  .. S IB=$G(^TMP($J,"IBCEMCL",1,TXT,IBDA)),IBIFN=+IB,IB364=$P(IB,U,2)
 | 
|---|
| 120 |  .. S IBCNT=IBCNT+1,DATA=IBIFN_U_IBDA_U_IB364
 | 
|---|
| 121 |  .. S X=$$SETFLD^VALM1($J(IBCNT,3),"","NUMBER")
 | 
|---|
| 122 |  .. S X=$$SETFLD^VALM1($P(IB,U,3),X,"BILL")
 | 
|---|
| 123 |  .. S X=$$SETFLD^VALM1($P(IB,U,4),X,"PAYER")
 | 
|---|
| 124 |  .. S X=$$SETFLD^VALM1($P(IB,U,5),X,"PATIENT")
 | 
|---|
| 125 |  .. S X=$$SETFLD^VALM1($P(IB,U,6),X,"SSN")
 | 
|---|
| 126 |  .. S X=$$SETFLD^VALM1($$FMTE^XLFDT($P(IB,U,7),"2Z"),X,"SERVICE")
 | 
|---|
| 127 |  .. S X=$$SETFLD^VALM1($J("$"_$FN($P(IB,U,8),"",2),10),X,"CURBAL")
 | 
|---|
| 128 |  .. D SET(X,IBCNT,DATA)
 | 
|---|
| 129 |  .. Q
 | 
|---|
| 130 |  . Q
 | 
|---|
| 131 |  ;
 | 
|---|
| 132 | INITX ;
 | 
|---|
| 133 |  Q
 | 
|---|
| 134 |  ;
 | 
|---|
| 135 | SET(X,CNT,DATA) ; Set an entry into the display array and scratch global
 | 
|---|
| 136 |  ; X - visual line to display
 | 
|---|
| 137 |  ; CNT - current record counter
 | 
|---|
| 138 |  ; DATA - 3 piece string IBIFN^IBDA^IB364 (optional)
 | 
|---|
| 139 |  I X="",'VALMCNT G SETX    ; don't start list with a blank line
 | 
|---|
| 140 |  S VALMCNT=VALMCNT+1
 | 
|---|
| 141 |  I '$G(CNT) S CNT=$G(IBCNT)+1
 | 
|---|
| 142 |  S ^TMP($J,"IBCEMCL",2,VALMCNT,0)=X
 | 
|---|
| 143 |  S ^TMP($J,"IBCEMCL",2,"IDX",VALMCNT,CNT)=""
 | 
|---|
| 144 |  I $G(DATA)="" G SETX
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 |  S ^TMP($J,"IBCEMCL",3,CNT)=DATA_U_VALMCNT
 | 
|---|
| 147 |  ;
 | 
|---|
| 148 |  ; When building the list and the ^TMP($J,"IBCEMCA") area is defined,
 | 
|---|
| 149 |  ; then automatically pre-select all entries in the list.
 | 
|---|
| 150 |  I $D(^TMP($J,"IBCEMCA")) D MARK(+$P(DATA,U,2),+DATA,VALMCNT,CNT)
 | 
|---|
| 151 | SETX ;
 | 
|---|
| 152 |  Q
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 | HELP ; -- help code
 | 
|---|
| 155 |  S X="?" D DISP^XQORM1 W !!
 | 
|---|
| 156 |  Q
 | 
|---|
| 157 |  ;
 | 
|---|
| 158 | EXIT ; -- exit code
 | 
|---|
| 159 |  D UNLOCK
 | 
|---|
| 160 |  KILL ^TMP($J,"IBCEMCL"),^TMP($J,"IBCEMCA")
 | 
|---|
| 161 |  Q
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 | UNLOCK ; unlock any entries that may still be selected
 | 
|---|
| 164 |  N IBDA S IBDA=0
 | 
|---|
| 165 |  F  S IBDA=$O(^TMP($J,"IBCEMCL",4,1,IBDA)) Q:'IBDA  L -^IBM(361,IBDA)
 | 
|---|
| 166 | UNLOCKX ;
 | 
|---|
| 167 |  Q
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 | MARK(IBDA,IBIFN,VALMCNT,INDEX,RESULT) ; Select/De-select Entry in List.
 | 
|---|
| 170 |  ; This procedure toggles the selection of a status message either
 | 
|---|
| 171 |  ; ON or OFF.  It also adds or removes the "*" to the list display.
 | 
|---|
| 172 |  ; If a selection can't be locked, then it will not be selected.
 | 
|---|
| 173 |  ; VALMHDR is killed so ListManager will invoke the header code.
 | 
|---|
| 174 |  ;
 | 
|---|
| 175 |  ; RESULT is returned if passed by reference
 | 
|---|
| 176 |  ;   "D" message was de-selected and unlocked
 | 
|---|
| 177 |  ;   "S" message was selected and locked
 | 
|---|
| 178 |  ;   "L" message could not be locked nor selected
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 |  I $D(^TMP($J,"IBCEMCL",4,1,IBDA)) D  G MARKX   ; already selected
 | 
|---|
| 181 |  . ;
 | 
|---|
| 182 |  . ; de-select action
 | 
|---|
| 183 |  . KILL ^TMP($J,"IBCEMCL",4,1,IBDA)
 | 
|---|
| 184 |  . KILL ^TMP($J,"IBCEMCL",4,2,IBIFN,IBDA)
 | 
|---|
| 185 |  . S ^TMP($J,"IBCEMCL",4)=$G(^TMP($J,"IBCEMCL",4))-1
 | 
|---|
| 186 |  . S $E(^TMP($J,"IBCEMCL",2,VALMCNT,0),6)=" "
 | 
|---|
| 187 |  . KILL VALMHDR
 | 
|---|
| 188 |  . L -^IBM(361,IBDA)    ; unlock
 | 
|---|
| 189 |  . S RESULT="D"
 | 
|---|
| 190 |  . Q
 | 
|---|
| 191 |  ;
 | 
|---|
| 192 |  ; lock attempt prior to selection
 | 
|---|
| 193 |  L +^IBM(361,IBDA):0 I '$T D  G MARKX
 | 
|---|
| 194 |  . S RESULT="L"
 | 
|---|
| 195 |  . Q
 | 
|---|
| 196 |  ;
 | 
|---|
| 197 |  ; select action
 | 
|---|
| 198 |  S ^TMP($J,"IBCEMCL",4,1,IBDA)=IBIFN_U_VALMCNT_U_INDEX
 | 
|---|
| 199 |  S ^TMP($J,"IBCEMCL",4,2,IBIFN,IBDA)=""
 | 
|---|
| 200 |  S ^TMP($J,"IBCEMCL",4)=$G(^TMP($J,"IBCEMCL",4))+1
 | 
|---|
| 201 |  S $E(^TMP($J,"IBCEMCL",2,VALMCNT,0),6)="*"
 | 
|---|
| 202 |  KILL VALMHDR
 | 
|---|
| 203 |  S RESULT="S"
 | 
|---|
| 204 | MARKX ;
 | 
|---|
| 205 |  Q
 | 
|---|
| 206 |  ;
 | 
|---|