1 | BPSSCR02 ;BHAM ISC/SS - USER SCREEN UTILITIES ;05-APR-05
|
---|
2 | ;;1.0;E CLAIMS MGMT ENGINE;**1,3**;JUN 2004;Build 20
|
---|
3 | ;; Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;USER SCREEN
|
---|
5 | Q
|
---|
6 | REVERSE ;
|
---|
7 | N BPSDFN,BPSRX
|
---|
8 | D SELECT(.BPSDFN,.BPSRX)
|
---|
9 | S VALMBCK="R"
|
---|
10 | Q
|
---|
11 | ;
|
---|
12 | SELECT(BPSDFN1,BPSRX1,BPSRF1,BPS59) ; Select a patient. Returns patient IEN(s) in array
|
---|
13 | N BPLN
|
---|
14 | S BPLN=$$SELLINE("Select the line(s) with the paid claim(s) you wish to REVERSE","")
|
---|
15 | Q
|
---|
16 | ;
|
---|
17 | SELLINE(BPSPROM,BPSDFVL) ;
|
---|
18 | N BPRET,DIR,X,Y,DIRUT
|
---|
19 | S BPRET="^"
|
---|
20 | W ! S DIR(0)="N^::2",DIR("A")=BPSPROM,DIR("B")=BPSDFVL D ^DIR I $D(DIRUT) Q "^"
|
---|
21 | S $P(BPRET,U)=Y
|
---|
22 | Q BPRET
|
---|
23 | ;/**
|
---|
24 | ;make array element
|
---|
25 | ;BPLINE - line number in LM ARRAY (by ref)
|
---|
26 | ;BPTMP - VALMAR (TMP global for LM)
|
---|
27 | ;BP59 - ptr to 9002313.59
|
---|
28 | ;BPLMIND - passed by ref - current patient(/insurance) index ( to make 1, 2,etc)
|
---|
29 | ;BPDRIND - passed by ref - current claim level index ( to make .1, .2, .10,... .20,... )
|
---|
30 | ;TMP structure gives on the screen:
|
---|
31 | ;^TMP("BPSSCR",$J,"VALM","LMIND",1,0,DFN,0,0)=
|
---|
32 | ;^TMP("BPSSCR",$J,"VALM",1,0)=1 BUMSTEAD,CHARLE (5444)/100-234-2345 *done* FINISHED
|
---|
33 | ;BPLINE = 1
|
---|
34 | ;BPLMIND=1
|
---|
35 | ;on the screen:
|
---|
36 | ;1 BUMSTEAD,CHARLE (5444) /100-234-2345 *done* FINISHED
|
---|
37 | ;
|
---|
38 | ;^TMP(538978189,"BPSSCR","SORT","T",1,401959.00001)=
|
---|
39 | ;^TMP("BPSSCR",$J,"VALM","LMIND",1,1,DFN,401959.00001,1)=
|
---|
40 | ;^TMP("BPSSCR",$J,"VALM",2,0)= 1.1 LOVASTATIN 20MG TAB
|
---|
41 | ;BPLINE = 2
|
---|
42 | ;BP59= 401959.00001
|
---|
43 | ;on the screen:
|
---|
44 | ; 1.1 LOVASTATIN 20MG TAB
|
---|
45 | ;
|
---|
46 | ;^TMP(538978189,"BPSSCR","SORT","T",1,501750.00011)=
|
---|
47 | ;^TMP("BPSSCR",$J,"VALM","LMIND",1,2,DFN,501750.00011,2)=
|
---|
48 | ;^TMP("BPSSCR",$J,"VALM",3,0)= 1.2 CIMETIDINE 300MG TAB
|
---|
49 | ;BPLINE = 3
|
---|
50 | ;BP59= 501750.00011
|
---|
51 | ;on the screen:
|
---|
52 | ; 1.2 CIMETIDINE 300MG TAB
|
---|
53 | ;
|
---|
54 | MKARRELM(BPLINE,BPTMP,BP59,BPLMIND,BPDRIND,BPPREV) ;*/
|
---|
55 | N BPSSTR,BPLNS,BPDFN,BPSTAT,BPSINSUR,BPINSDAT
|
---|
56 | S BPDFN=+$P($G(^BPST(BP59,0)),U,6) ;patient's DFN
|
---|
57 | S BPINSDAT=$$GETINSUR^BPSSCRU2(BP59)
|
---|
58 | S BPSINSUR=+BPINSDAT ;patient's insurance IEN
|
---|
59 | ;
|
---|
60 | ;PATIENT SUMMARY level
|
---|
61 | ; if last one was different DFN/INSURANCE combination then create a new Patient Summary level
|
---|
62 | I (+$O(@BPTMP@("LMIND",BPLMIND,0,0))'=BPDFN)!(+$O(@BPTMP@("LMIND",BPLMIND,0,BPDFN,0))'=BPSINSUR) D
|
---|
63 | . ;-------- first process previous patient & insurance group
|
---|
64 | . ;determine patient summary statuses for the previous "patient" group
|
---|
65 | . I BPLMIND>0,+BPPREV=BPLMIND D
|
---|
66 | . . ;update the record for previous patient summary after we went thru all his claims
|
---|
67 | . . D UPDPREV(BPTMP,BPLMIND,BPPREV)
|
---|
68 | . ;process new "patient & insurance" group ------------------
|
---|
69 | . S BPDRIND=0
|
---|
70 | . S BPLMIND=(BPLMIND\1)+1
|
---|
71 | . ;save the all necessary data for the patient & insurance to use as previous for STAT4PAT later on
|
---|
72 | . S BPPREV=BPLMIND_U_BPLINE_U_BPDFN_U_$$PATINF(BPDFN,BPINSDAT)_U_BPSINSUR
|
---|
73 | . S BPSSTR=$$LJ(BPLMIND,4)_$P(BPPREV,U,4)
|
---|
74 | . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,0,BPLINE,BPSSTR,BPSINSUR)
|
---|
75 | . S BPLINE=BPLINE+1
|
---|
76 | ;
|
---|
77 | ;CLAIMS level
|
---|
78 | D
|
---|
79 | . I +$O(@BPTMP@("LMIND",BPLMIND,BPDRIND,BPDFN,0))'=BP59 D
|
---|
80 | . . S BPDRIND=BPDRIND+1
|
---|
81 | . . S BPSSTR=" "_$$LJ(+$P(BPLMIND,".")_"."_BPDRIND,5)_" "_$$CLAIMINF(BP59)
|
---|
82 | . . ;@debug,remove the next line after finish debugging
|
---|
83 | . . ;S BPSSTR=BPSSTR_" 59:"_BP59_" DT:"_$$TRANDT^BPSSCRU2(BP59)_" DFN:"_BPDFN_" INS:"_BPSINSUR
|
---|
84 | . . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE,BPSSTR,BPSINSUR)
|
---|
85 | . . S BPLINE=BPLINE+1
|
---|
86 | . . N BPARR,X
|
---|
87 | . . S BPLNS=$$ADDINF^BPSSCR03(BP59,.BPARR,74,"R")
|
---|
88 | . . F X=1:1:BPLNS D
|
---|
89 | . . . I $G(BPARR(X))="" Q
|
---|
90 | . . . D SAVEARR(BPTMP,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE," "_BPARR(X),BPSINSUR)
|
---|
91 | . . . S BPLINE=BPLINE+1
|
---|
92 | Q
|
---|
93 | ;S BPS=BPX
|
---|
94 | ;/**
|
---|
95 | ;BP59
|
---|
96 | CLAIMINF(BP59) ;*/
|
---|
97 | N BPX,BPX1
|
---|
98 | S BPX1=$$RXREF^BPSSCRU2(BP59)
|
---|
99 | ;S BPX=BP59_$$LJ($$DRGNAME^BPSSCRU2(BP59),22)_" "_$$LJ($$NDC^BPSSCRU2(+BPX1,+$P(BPX1,U,2)),13)_" "
|
---|
100 | S BPX=$$LJ($$DRGNAME^BPSSCRU2(BP59),17)_" "_$$LJ($$NDC^BPSSCRU2(+BPX1,+$P(BPX1,U,2)),13)_" "
|
---|
101 | S BPX=BPX_$$LJ($$FILLDATE^BPSSCRRS(+BPX1,+$P(BPX1,U,2)),5)_" "
|
---|
102 | S BPX=BPX_$$LJ($$RXNUM^BPSSCRU2(+BPX1),11)_" "_+$P(BPX1,U,2)_"/"
|
---|
103 | S BPX=BPX_$$LJ($$ECMENUM^BPSSCRU2(BP59),7)_" "_$$MWCNAME^BPSSCRU2($$GETMWC^BPSSCRU2(BP59))_" "
|
---|
104 | S BPX=BPX_$$RTBB^BPSSCRU2(BP59)_" "_$$RXST^BPSSCRU2(BP59)_"/"_$$RL^BPSSCRU2(BP59)
|
---|
105 | Q BPX
|
---|
106 | ;/**
|
---|
107 | ;determine "done" and "FINISHED" status for patient/insurance group by BPLMIND in TMP global
|
---|
108 | STAT4PAT(BPLMIND) ;*/
|
---|
109 | N BPCL,BPDFN,BP59,BPX,BPINS,BPX,BPCNT
|
---|
110 | N BPPB,BPRJ,BPACRV,BPRJRV,BPSR,BPFIN,BPPRCNTG
|
---|
111 | S (BPCL,BPPB,BPRJ,BPACRV,BPSR,BPRJRV)=0
|
---|
112 | S BPFIN=0 ; finished by default
|
---|
113 | S BPPRCNTG=0
|
---|
114 | S BPCNT=0
|
---|
115 | F S BPCL=+$O(@BPTMP@("LMIND",BPLMIND,BPCL)) Q:BPCL=0 D
|
---|
116 | . S BPDFN=0
|
---|
117 | . F S BPDFN=+$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN)) Q:BPDFN=0 D
|
---|
118 | . . S BPINS="" ;can be 0 in the TMP global if insurance plan
|
---|
119 | . . ;is corrupted in file ##9002313.59
|
---|
120 | . . F S BPINS=$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN,BPINS)) Q:BPINS="" D
|
---|
121 | . . . S BP59=0,BPINS=+BPINS
|
---|
122 | . . . F S BP59=+$O(@BPTMP@("LMIND",BPLMIND,BPCL,BPDFN,BPINS,BP59)) Q:BP59=0 D
|
---|
123 | . . . . S BPCNT=BPCNT+1
|
---|
124 | . . . . S BPX=$P($$CLAIMST^BPSSCRU3(BP59),U)
|
---|
125 | . . . . I BPX["E PAYABLE" S BPPB=BPPB+1 ;Payable
|
---|
126 | . . . . I BPX["E REJECTED" S BPRJ=BPRJ+1 ;Rejected
|
---|
127 | . . . . I BPX["E REVERSAL ACCEPTED" S BPACRV=BPACRV+1 ;Accepted Reversal
|
---|
128 | . . . . I BPX["E REVERSAL REJECTED" S BPRJRV=BPRJRV+1 ;Rejected Reversal
|
---|
129 | . . . . ;don't count Auto-Reversal
|
---|
130 | . . . . ;I BPX["^SR^" S BPSR=BPSR+1 ; stranded
|
---|
131 | . . . . S BPFIN=BPFIN+$$PRCNTG^BPSSCRU3(BP59)
|
---|
132 | . . . . ;I BPFIN=1 Q "**FINISHED**"
|
---|
133 | ;Q BPCNT_" "_BPPB_","_BPRJ_","_BPACRV_","_BPSR
|
---|
134 | I BPCNT>0 S BPPRCNTG=(BPFIN/BPCNT)\1
|
---|
135 | I BPPRCNTG=99 S BPPRCNTG="Done"
|
---|
136 | E S BPPRCNTG=BPPRCNTG_"%"
|
---|
137 | S BPX="*"_BPPRCNTG_"*"
|
---|
138 | I BPPB=BPCNT S BPX=BPX_" ALL payable"
|
---|
139 | E S BPX=BPX_" Pb:"_BPPB_" Rj:"_BPRJ_" AcRv:"_BPACRV_" RjRv:"_BPRJRV
|
---|
140 | Q BPX
|
---|
141 | ;/**
|
---|
142 | ;gets the patient summary information
|
---|
143 | ;input:
|
---|
144 | ; BPDFN - ptr to #2
|
---|
145 | ; BPINS - insurance ien^insurance name^phone
|
---|
146 | ;output:
|
---|
147 | ; patient summary information
|
---|
148 | PATINF(BPDFN,BPINS) ;*/
|
---|
149 | N X,BPINSNM
|
---|
150 | S BPINSNM=$P(BPINS,U,2)
|
---|
151 | S X=$$LJ^BPSSCR02($$PATNAME^BPSSCRU2(BPDFN),13) ;name
|
---|
152 | S X=X_" "_$$LJ($$SSN4^BPSSCRU2(BPDFN),6) ;4digits of SSN
|
---|
153 | S X=X_" "_$$LJ($S(BPINSNM="":"????",1:BPINSNM),8) ;insurance
|
---|
154 | S X=X_"/"_$$LJ($P(BPINS,U,3),14) ;phone
|
---|
155 | Q X
|
---|
156 | ;
|
---|
157 | ;/**
|
---|
158 | ;creates an entry in LM array and builds a non-standard index
|
---|
159 | ;BPLMIND - passed by ref - current LM index - patient_AND_insurance level
|
---|
160 | ;BPDRIND - passed by ref - current LM index - claim level
|
---|
161 | ;BPTMP - VALMAR (TMP global for LM)
|
---|
162 | ;BP59 - ptr to 9002313.59
|
---|
163 | ;BPLINE - line number in LM ARRAY (by ref)
|
---|
164 | ;BPSTR - string to save in ARRAY
|
---|
165 | ;BPSINSUR - INSURANCE ien
|
---|
166 | SAVEARR(BPTMP1,BPLMIND,BPDRIND,BPDFN,BP59,BPLINE,BPSSTR,BPSINSUR) ;
|
---|
167 | S @BPTMP1@("LMIND",BPLMIND,BPDRIND,BPDFN,BPSINSUR,BP59,BPLINE)=""
|
---|
168 | D SET^VALM10(BPLINE,BPSSTR,BP59)
|
---|
169 | Q
|
---|
170 | ;left justified, blank padded
|
---|
171 | ;adds spaces on right or truncates to make return string BPLEN characters long
|
---|
172 | ;BPST- original string
|
---|
173 | ;BPLEN - desired length
|
---|
174 | LJ(BPST,BPLEN) ;
|
---|
175 | N BPL
|
---|
176 | S BPL=BPLEN-$L(BPST)
|
---|
177 | Q $E(BPST_$J("",$S(BPL<0:0,1:BPL)),1,BPLEN)
|
---|
178 | ;
|
---|
179 | ;right justified, blank padded
|
---|
180 | ;adds spaces on left or truncates to make return string BPLEN characters long
|
---|
181 | ;BPST- original string
|
---|
182 | ;BPLEN - desired length
|
---|
183 | RJ(BPST,BPLEN) ;
|
---|
184 | S BPL=BPLEN-$L(BPST)
|
---|
185 | I BPL>0 Q $J("",$S(BPL<0:0,1:BPL))_BPST
|
---|
186 | Q $E(BPST,1,BPLEN)
|
---|
187 | ;
|
---|
188 | ;is the claim payable?
|
---|
189 | PAYABLE(BP59) ;
|
---|
190 | I $P($$CLAIMST^BPSSCRU3(BP59),U)["E PAYABLE" Q 1
|
---|
191 | Q 0
|
---|
192 | ;
|
---|
193 | ;is the claim rejected?
|
---|
194 | REJECTED(BP59) ;
|
---|
195 | I $P($$CLAIMST^BPSSCRU3(BP59),U)["E REJECTED" Q 1
|
---|
196 | I $P($$CLAIMST^BPSSCRU3(BP59),U)["E REVERSAL REJECTED" Q 1
|
---|
197 | Q 0
|
---|
198 | ;update patient summary information for the previous patient/insurance pair
|
---|
199 | UPDPREV(BPTMP,BPLMIND,BPPREV) ;
|
---|
200 | N BPSSTR
|
---|
201 | ;update the record for previous patient summary after we went thru all his claims
|
---|
202 | S BPSSTR=$$LJ^BPSSCR02(BPLMIND,4)_$P(BPPREV,U,4)_" "_$$STAT4PAT^BPSSCR02(BPLMIND)
|
---|
203 | D SAVEARR^BPSSCR02(BPTMP,BPLMIND,0,+$P(BPPREV,U,3),0,+$P(BPPREV,U,2),BPSSTR,+$P(BPPREV,U,5))
|
---|
204 | Q
|
---|
205 | ;
|
---|