| 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 | ;
|
---|