1 | PSOREJP0 ;BIRM/MFR - Third Party Rejects Processing Screen ;04/28/05
|
---|
2 | ;;7.0;OUTPATIENT PHARMACY;**148,260**;DEC 1997;Build 84
|
---|
3 | ;
|
---|
4 | N PSOREJST,PSORJSRT,PSORJASC,PSOSTFLT,PSODRFLT,PSOPTFLT,PSORXFLT,PSOINFLT,PSOINGRP
|
---|
5 | N INSLN,HIGHLN,LASTLN
|
---|
6 | ;
|
---|
7 | ; - Division/Site selection
|
---|
8 | D SEL^PSOREJU1("DIVISION","^PS(59,",.PSOREJST,$$GET1^DIQ(59,+$G(PSOSITE),.01)) I $G(PSOREJST)="^" G EXIT
|
---|
9 | ;
|
---|
10 | ; - Initializing global variables
|
---|
11 | S PSORJSRT="PA",PSORJASC=1,PSOSTFLT="U",(PSODRFLT,PSOPTFLT,PSORXFLT,PSOINFLT)="ALL"
|
---|
12 | S PSOINGRP=0
|
---|
13 | ;
|
---|
14 | D LST("W")
|
---|
15 | G EXIT
|
---|
16 | ;
|
---|
17 | LST(PSOMENU) ; - Invokes Listmanager
|
---|
18 | W !,"Please wait..."
|
---|
19 | I PSOMENU="W" D EN^VALM("PSO REJECTS WORKLIST")
|
---|
20 | I PSOMENU="VP" D EN^VALM("PSO REJECTS VIEW/PROCESS")
|
---|
21 | D FULL^VALM1
|
---|
22 | Q
|
---|
23 | ;
|
---|
24 | HDR ; - Header code
|
---|
25 | N LINE1,LINE2,LINE3
|
---|
26 | S LINE1=$$SITES() I $L(LINE1)>80 S $E(LINE1,78,999)="..."
|
---|
27 | ;
|
---|
28 | S LINE2="Selection : ALL "_$S(PSOSTFLT="U":"UNRESOLVED ",PSOSTFLT="R":"RESOLVED ",1:"")_"REJECTS"
|
---|
29 | I $G(PSOPTFLT)'="ALL" S LINE2=LINE2_" FOR "_$$NAME("P")
|
---|
30 | I $G(PSODRFLT)'="ALL" S LINE2=LINE2_" FOR "_$$NAME("D")
|
---|
31 | I $G(PSOINFLT)'="ALL" S LINE2=LINE2_" FOR "_$$NAME("I")
|
---|
32 | I $G(PSOINGRP) S LINE2=LINE2_" GROUPED BY INSURANCE"
|
---|
33 | S VALMHDR(1)=LINE1,VALMHDR(2)=LINE2
|
---|
34 | I PSOMENU="VP" D
|
---|
35 | . I $G(PSORXFLT) S LINE3="Rx# : "_$$NAME("R")
|
---|
36 | . E D
|
---|
37 | . . S LINE3="Date Range: "_$$FMTE^XLFDT(+PSODTRNG,2)
|
---|
38 | . . I +PSODTRNG'=$P(PSODTRNG,"^",2) S LINE3=LINE3_" THRU "_$$FMTE^XLFDT($P(PSODTRNG,"^",2),2)
|
---|
39 | . S VALMHDR(3)=LINE3
|
---|
40 | ;
|
---|
41 | D SETHDR()
|
---|
42 | Q
|
---|
43 | ;
|
---|
44 | SETHDR() ; - Displays the Header Line
|
---|
45 | N HDR,ORD
|
---|
46 | ;
|
---|
47 | S HDR=" #",$E(HDR,5)="Rx#",$E(HDR,18)="PATIENT(ID)",$E(HDR,43)="DRUG",$E(HDR,64)="REASON"
|
---|
48 | S $E(HDR,81)="" D INSTR^VALM1(IORVON_HDR_IOINORM,1,$S(PSOMENU="W":4,1:5))
|
---|
49 | S ORD=$S(PSORJASC=1:"[^]",1:"[v]")
|
---|
50 | S:PSORJSRT="RX" POS=9 S:PSORJSRT="PA" POS=30 S:PSORJSRT="DR" POS=48 S:PSORJSRT="RE" POS=71
|
---|
51 | D INSTR^VALM1(IOINHI_IORVON_ORD_IOINORM,POS,$S(PSOMENU="W":4,1:5))
|
---|
52 | Q
|
---|
53 | ;
|
---|
54 | INIT ; - Populates the Body section for ListMan
|
---|
55 | K ^TMP("PSOREJP0",$J)
|
---|
56 | D SETSORT(PSORJSRT),SETLINE
|
---|
57 | S VALMSG="Select the entry # to view or ?? for more actions"
|
---|
58 | Q
|
---|
59 | ;
|
---|
60 | SETLINE ; - Sets the line to be displayed in ListMan
|
---|
61 | N INS,SUB,SEQ,LINE,Z,I,X,X1,X2
|
---|
62 | I '$D(^TMP("PSOREJSR",$J)) D Q
|
---|
63 | . F I=1:1:7 S ^TMP("PSOREJP0",$J,I,0)=""
|
---|
64 | . S ^TMP("PSOREJP0",$J,8,0)=" No Clinical Third Party Payer Rejects found."
|
---|
65 | . S VALMCNT=1
|
---|
66 | ;
|
---|
67 | F I=1:1:$G(LASTLN) D RESTORE^VALM10(I)
|
---|
68 | K INSLN,HIGHLN
|
---|
69 | ;
|
---|
70 | S (INS,SUB)="",LINE=0 K ^TMP("PSOREJP0",$J)
|
---|
71 | F S INS=$O(^TMP("PSOREJSR",$J,INS)) Q:INS="" D
|
---|
72 | . I INS'="<NULL>" D
|
---|
73 | . . D GROUP(INS,.LINE)
|
---|
74 | . F S SUB=$O(^TMP("PSOREJSR",$J,INS,SUB),PSORJASC) Q:SUB="" D
|
---|
75 | . . S Z=$G(^TMP("PSOREJSR",$J,INS,SUB))
|
---|
76 | . . S X1="",SEQ=$G(SEQ)+1,X1=$J(SEQ,3)
|
---|
77 | . . S $E(X1,5)=$P(Z,"^",3),$E(X1,18)=$P(Z,"^",4),$E(X1,43)=$P(Z,"^",5),$E(X1,64)=$P(Z,"^",6)
|
---|
78 | . . S LINE=LINE+1,^TMP("PSOREJP0",$J,LINE,0)=X1,HIGHLN(LINE)=""
|
---|
79 | . . S X2="",$E(X2,5)="Payer Message: "_$P(Z,"^",7)
|
---|
80 | . . S LINE=LINE+1,^TMP("PSOREJP0",$J,LINE,0)=X2
|
---|
81 | . . S ^TMP("PSOREJP0",$J,SEQ,"RX")=$P(Z,"^",1,2)
|
---|
82 | ;
|
---|
83 | I LINE>$G(LASTLN) D
|
---|
84 | . F I=($G(LASTLN)+1):1:LINE D SAVE^VALM10(I)
|
---|
85 | . S LASTLN=LINE
|
---|
86 | ;
|
---|
87 | ; - Highlighting the prescription/insurance line
|
---|
88 | F LN=1:1:LINE D
|
---|
89 | . I $D(HIGHLN(LN)) D Q
|
---|
90 | . . D CNTRL^VALM10(LN,1,80,IOINHI,IOINORM)
|
---|
91 | . . D CNTRL^VALM10(LN,64,3,IOUON,IOINORM)
|
---|
92 | . . D CNTRL^VALM10(LN,67,80,IOINHI,IOINORM)
|
---|
93 | . I $D(INSLN(LN)) D
|
---|
94 | . . S LBL=INSLN(LN),POS=41-($L(LBL)/2+.5\1)
|
---|
95 | . . D CNTRL^VALM10(LN,1,POS-1,IOUON_IOINHI,IOINORM)
|
---|
96 | . . D CNTRL^VALM10(LN,POS,$L(LBL),IORVON_IOINHI,IOINORM)
|
---|
97 | . . D CNTRL^VALM10(LN,POS+$L(LBL),81-POS-$L(LBL),IOUON_IOINHI,IOINORM)
|
---|
98 | ;
|
---|
99 | S VALMCNT=+$G(LINE)
|
---|
100 | Q
|
---|
101 | ;
|
---|
102 | GROUP(LBL,LINE) ; Sets an insurance delimiter line
|
---|
103 | N X,POS
|
---|
104 | S POS=41-($L(LBL)/2+.5\1)
|
---|
105 | S X="",$P(X," ",81)="",$E(X,POS,POS-1+$L(LBL))=LBL
|
---|
106 | S LINE=LINE+1,^TMP("PSOREJP0",$J,LINE,0)=X,INSLN(LINE)=LBL
|
---|
107 | Q
|
---|
108 | ;
|
---|
109 | SETSORT(FIELD) ; - Sets the data sorted by the FIELD specified
|
---|
110 | N RX,REJ,STS,DAT
|
---|
111 | K ^TMP("PSOREJSR",$J)
|
---|
112 | ;
|
---|
113 | ; - Worklist
|
---|
114 | I PSOMENU="W" D
|
---|
115 | . S RX=0 F S RX=$O(^PSRX("REJSTS",0,RX)) Q:'RX D
|
---|
116 | . . S REJ=0 F S REJ=$O(^PSRX("REJSTS",0,RX,REJ)) Q:'REJ D
|
---|
117 | . . . D SETTMP(RX,REJ,FIELD)
|
---|
118 | ;
|
---|
119 | ; - View/Process
|
---|
120 | I PSOMENU="VP" D
|
---|
121 | . I $G(PSORXFLT)'="ALL" D Q
|
---|
122 | . . S REJ=0 F S REJ=$O(^PSRX(+PSORXFLT,"REJ",REJ)) Q:'REJ D
|
---|
123 | . . . I $$FLTSTS(+PSORXFLT,REJ) Q
|
---|
124 | . . . D SETTMP(+PSORXFLT,REJ,FIELD)
|
---|
125 | . S DAT=$P(PSODTRNG,"^")-0.0000001,(RX,REJ)=0
|
---|
126 | . F S DAT=$O(^PSRX("REJDAT",DAT)) Q:'DAT!(DAT>$$ENDT()) D
|
---|
127 | . . F S RX=$O(^PSRX("REJDAT",DAT,RX)) Q:'RX D
|
---|
128 | . . . I $$FILTER(RX) Q
|
---|
129 | . . . F S REJ=$O(^PSRX("REJDAT",DAT,RX,REJ)) Q:'REJ D
|
---|
130 | . . . . I $$FLTSTS(RX,REJ) Q
|
---|
131 | . . . . D SETTMP(RX,REJ,FIELD)
|
---|
132 | Q
|
---|
133 | ;
|
---|
134 | SETTMP(RX,REJ,FIELD) ; - Sets ^TMP global that will be displayed in the body section
|
---|
135 | N REJLST,FILL,CODE,RXNUM,PTNAME,DRNAME,MSG,REASON,MSG,X,Z,SORT,I,INS
|
---|
136 | I $G(PSORXFLT)="ALL",$$CLOSED^PSOREJP1(RX,REJ),$$REOPN^PSOREJP1(RX,REJ) Q
|
---|
137 | S FILL=+$$GET1^DIQ(52.25,REJ_","_RX,5)
|
---|
138 | I '$$DIV(RX,FILL) Q
|
---|
139 | K REJLST D GET^PSOREJU2(RX,FILL,.REJLST,,1) I '$D(REJLST) Q
|
---|
140 | I $$FILTER(,REJLST(REJ,"INSURANCE NAME")) Q
|
---|
141 | S PTNAME=$$PTNAME(RX)
|
---|
142 | S DRNAME=$$GET1^DIQ(52,RX,6)
|
---|
143 | S RXNUM=$$GET1^DIQ(52,RX,.01)
|
---|
144 | S CODE=$G(REJLST(REJ,"CODE"))
|
---|
145 | S MSG=$G(REJLST(REJ,"PAYER MESSAGE")) I $L(MSG)>60 S MSG=$E(MSG,1,58)_"..."
|
---|
146 | S REASON=$S(CODE=88:"DUR:"_$G(REJLST(REJ,"REASON")),1:"79 :REFILL TOO SOON")
|
---|
147 | S Z="",$P(Z,"^")=RX,$P(Z,"^",2)=REJ,$P(Z,"^",3)=RXNUM,$P(Z,"^",4)=PTNAME
|
---|
148 | S $P(Z,"^",5)=$E(DRNAME,1,20),$P(Z,"^",6)=$E(REASON,1,17),$P(Z,"^",7)=MSG
|
---|
149 | S SORT=$S(FIELD="PA":PTNAME,FIELD="DR":DRNAME,FIELD="RX":RXNUM_" ",1:REASON)_RX_REJ
|
---|
150 | S INS="<NULL>" I $G(PSOINGRP) S INS=REJLST(REJ,"INSURANCE NAME") S:INS="" INS="***UNKNOWN***"
|
---|
151 | S ^TMP("PSOREJSR",$J,INS,SORT)=Z
|
---|
152 | Q
|
---|
153 | ;
|
---|
154 | PAT ; - Sort by Patient
|
---|
155 | D SORT("PA")
|
---|
156 | Q
|
---|
157 | DRG ; - Sort by Drug
|
---|
158 | D SORT("DR")
|
---|
159 | Q
|
---|
160 | RX ; - Sort by Rx
|
---|
161 | D SORT("RX")
|
---|
162 | Q
|
---|
163 | REA ; - Sort by Reason
|
---|
164 | D SORT("RE")
|
---|
165 | Q
|
---|
166 | SORT(FIELD) ; - Sort entries by FIELD
|
---|
167 | I PSORJSRT=FIELD S PSORJASC=$S(PSORJASC=1:-1,1:1)
|
---|
168 | E S PSORJSRT=FIELD,PSORJASC=1
|
---|
169 | D REF
|
---|
170 | Q
|
---|
171 | ;
|
---|
172 | REF ; - Screen Refresh
|
---|
173 | W ?52,"Please wait..." D INIT S VALMBCK="R"
|
---|
174 | Q
|
---|
175 | GI ; - Group by Insurance
|
---|
176 | W ?52,"Please wait..." S PSOINGRP=$S($G(PSOINGRP):0,1:1) D INIT,HDR S VALMBCK="R"
|
---|
177 | Q
|
---|
178 | ;
|
---|
179 | SEL ; - Process selection of one entry
|
---|
180 | N PSOSEL,XQORM,Z,RX,REJ,PSOCHNG
|
---|
181 | S PSOSEL=+$P($P(Y(1),"^",4),"=",2) I 'PSOSEL S VALMSG="Invalid selection!",VALMBCK="R" Q
|
---|
182 | S Z=$G(^TMP("PSOREJP0",$J,PSOSEL,"RX"))
|
---|
183 | S RX=$P(Z,"^"),REJ=$P(Z,"^",2) I 'RX!'REJ S VALMSG="Invalid selection!",VALMBCK="R" Q
|
---|
184 | S PSOCHNG=0 D EN^PSOREJP1(RX,REJ,.PSOCHNG) I $G(PSOCHNG) D REF
|
---|
185 | Q
|
---|
186 | ;
|
---|
187 | EXIT ;
|
---|
188 | K ^TMP("PSOREJP0",$J),^TMP("PSOREJSR",$J)
|
---|
189 | Q
|
---|
190 | ;
|
---|
191 | HELP Q
|
---|
192 | ;
|
---|
193 | SITES() ; - Returns the list of sites along with their NCPDP #s
|
---|
194 | N CNT,SITE,SITES,NAME
|
---|
195 | I '$D(PSOREJST) Q ""
|
---|
196 | I $G(PSOREJST)="ALL" Q "Divisions : ALL"
|
---|
197 | S SITE=0 F S SITE=$O(PSOREJST(SITE)) Q:'SITE D
|
---|
198 | . S NAME=$$GET1^DIQ(59,SITE,.01)
|
---|
199 | . S SITES=$G(SITES)_", "_NAME
|
---|
200 | S $E(SITES,1,2)="",SITES="Division"_$S($L(SITES,",")>1:"s",1:" ")_" : "_SITES
|
---|
201 | Q SITES
|
---|
202 | ;
|
---|
203 | DIV(RX,FILL) ; - Check if the Division for the Prescription/Fill was selected by the user
|
---|
204 | ;
|
---|
205 | I $G(PSOREJST)="ALL" Q 1
|
---|
206 | I $D(PSOREJST($$RXSITE^PSOBPSUT(RX,FILL))) Q 1
|
---|
207 | Q 0
|
---|
208 | ;
|
---|
209 | PTNAME(RX) ; - Returns header displayable - Patient Name (Last 4 SSN)
|
---|
210 | N DFN,VADM,PTNAME
|
---|
211 | S DFN=$$GET1^DIQ(52,RX,2,"I") D DEM^VADPT
|
---|
212 | S PTNAME=$E($G(VADM(1)),1,18)_"("_$P($P($G(VADM(2)),"^",2),"-",3)_")"
|
---|
213 | Q PTNAME
|
---|
214 | ;
|
---|
215 | FILTER(RX,INS) ; - Filter entries based on user's selection
|
---|
216 | N FILTER,NAME
|
---|
217 | S FILTER=1
|
---|
218 | I $G(PSOPTFLT)'="ALL",$D(RX),'$D(PSOPTFLT($$GET1^DIQ(52,RX,2,"I"))) Q FILTER
|
---|
219 | I $G(PSODRFLT)'="ALL",$D(RX),'$D(PSODRFLT($$GET1^DIQ(52,RX,6,"I"))) Q FILTER
|
---|
220 | I $G(PSOINFLT)'="ALL",$D(INS) D Q FILTER
|
---|
221 | . S NAME="" F S NAME=$O(PSOINFLT(NAME)) Q:NAME="" I $$UP^XLFSTR(INS)[$$UP^XLFSTR(NAME) S FILTER=0 Q
|
---|
222 | Q 0
|
---|
223 | ;
|
---|
224 | FLTSTS(RX,REJ) ; - Filter for the Reject Status
|
---|
225 | N STS
|
---|
226 | S STS=$$GET1^DIQ(52.25,REJ_","_RX,9,"I")
|
---|
227 | I PSOSTFLT="U",STS=1 Q 1
|
---|
228 | I PSOSTFLT="R",STS=0 Q 1
|
---|
229 | Q 0
|
---|
230 | ;
|
---|
231 | NAME(TYPE) ; - Returns the name if ONE was selected or "MULTIPLE ..."
|
---|
232 | N I,CNT
|
---|
233 | ;
|
---|
234 | I TYPE="P",$O(PSOPTFLT($O(PSOPTFLT(""))))="" Q $$GET1^DIQ(2,$O(PSOPTFLT("")),.01)
|
---|
235 | I TYPE="D",$O(PSODRFLT($O(PSODRFLT(""))))="" Q $$GET1^DIQ(50,$O(PSODRFLT("")),.01)
|
---|
236 | I TYPE="I",$O(PSOINFLT($O(PSOINFLT(""))))="" Q $O(PSOINFLT(""))
|
---|
237 | I TYPE="R" Q $$GET1^DIQ(52,PSORXFLT,.01)
|
---|
238 | Q "MULTIPLE "_$S(TYPE="P":"PATIENTS",TYPE="D":"DRUGS",1:"INSURANCE COMPANIES")
|
---|
239 | ;
|
---|
240 | ENDT() ; Returns the upper limit for the date range
|
---|
241 | N ENDT
|
---|
242 | S ENDT=$P(PSODTRNG,"^",2)
|
---|
243 | I '$E(ENDT,4,7) Q (ENDT+10000)
|
---|
244 | I '$E(ENDT,6,7) Q (ENDT+100)
|
---|
245 | I $P(ENDT,"^",2) Q (ENDT+0.0000001)
|
---|
246 | Q (ENDT+.25)
|
---|