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