1 | IBCNRSM ;DAOU/BEE - Shared Plan Matches Report ;14-OCT-2004
|
---|
2 | ;;2.0;INTEGRATED BILLING;**322**;21-MAR-94
|
---|
3 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
4 | ;
|
---|
5 | ; e-Pharmacy Shared Plan Matches Report
|
---|
6 | ;
|
---|
7 | ; Input parameter: N/A
|
---|
8 | ;
|
---|
9 | ; Predefined Variables: U => "^"
|
---|
10 | ; DT => Current System Date (VA format: yyymmdd)
|
---|
11 | ;
|
---|
12 | ; Other relevant variables:
|
---|
13 | ; IBCNRRTN = "IBCNRSM" (current routine name, used for ^XTMP and ^TMP
|
---|
14 | ; storage subscript)
|
---|
15 | ; Storage Global:
|
---|
16 | ; ^XTMP("IBCNRSM",0) = Piece 1^Piece 2^Piece 3^Piece 4^Piece 5^Piece 6
|
---|
17 | ; where:
|
---|
18 | ; Piece 1 => Purge Date - 1 year in future
|
---|
19 | ; Piece 2 => Create Date - Today
|
---|
20 | ; Piece 3 => Description
|
---|
21 | ; Piece 4 => Last Date Compiled
|
---|
22 | ; Piece 5 => $H of Paid Date Compile
|
---|
23 | ; Piece 6 => $H last run completion time
|
---|
24 | ;
|
---|
25 | ; ^XTMP("IBCNRSM",1,IEN) = LDT
|
---|
26 | ; where:
|
---|
27 | ; IEN => Internal GROUP INSURANCE index entry
|
---|
28 | ; LDT => Last Date Paid, VA Fileman Format
|
---|
29 | ;
|
---|
30 | ; Entry Point - TASKMAN => Run report in background using TASKMAN
|
---|
31 | ;
|
---|
32 | Q
|
---|
33 | ;
|
---|
34 | ; TASKMAN ENTRY POINT
|
---|
35 | ;
|
---|
36 | TASKMAN N IBCNRRTN,P,D0,D1,D2,DG,DIC,DICR,DISYS,DIW,Y
|
---|
37 | ;
|
---|
38 | ;Process Report
|
---|
39 | ;
|
---|
40 | ;Initialize variables
|
---|
41 | S IBCNRRTN="IBCNRSM"
|
---|
42 | S P="|"
|
---|
43 | ;
|
---|
44 | ;Check to see if report is in use
|
---|
45 | L +^XTMP(IBCNRRTN):5 I '$T G EXIT
|
---|
46 | ;
|
---|
47 | ;Reset Temporary Scratch Global
|
---|
48 | K ^TMP(IBCNRRTN,$J)
|
---|
49 | ;
|
---|
50 | ;Check for required variables
|
---|
51 | I $G(U)=""!($G(DT)="") G EXIT
|
---|
52 | ;
|
---|
53 | ;Pull Station (Institution) address
|
---|
54 | D STAT(IBCNRRTN)
|
---|
55 | ;
|
---|
56 | ;Perform Compile
|
---|
57 | ;
|
---|
58 | ;Recompile the Paid Date Index
|
---|
59 | D PDT(IBCNRRTN,DT)
|
---|
60 | ;
|
---|
61 | ;Process the entries
|
---|
62 | D PROC(IBCNRRTN)
|
---|
63 | ;
|
---|
64 | ;Send the message
|
---|
65 | D EMAIL(IBCNRRTN)
|
---|
66 | ;
|
---|
67 | ;Log Run Completion Time
|
---|
68 | S $P(^XTMP(IBCNRRTN,0),U,6)=$H
|
---|
69 | ;
|
---|
70 | ;Standard EXIT point
|
---|
71 | EXIT K ^TMP(IBCNRRTN,$J)
|
---|
72 | L -^XTMP(IBCNRRTN)
|
---|
73 | K IBCNRRTN,P,D0,D1,D2,DG,DIC,DICR,DISYS,DIW,Y
|
---|
74 | Q
|
---|
75 | ;
|
---|
76 | ; PULL STATION AND INSTITUTION ADDRESS
|
---|
77 | ;
|
---|
78 | STAT(IBCNRRTN) N INST,N,CITY,SINFO,SITE,STATE,ZIP
|
---|
79 | S (CITY,STATE,ZIP)=""
|
---|
80 | ;
|
---|
81 | ;Pull Site Info
|
---|
82 | S SINFO=$$SITE^VASITE
|
---|
83 | S SITE=$P(SINFO,U,3)
|
---|
84 | S INST=$P(SINFO,U)
|
---|
85 | ;
|
---|
86 | I INST D
|
---|
87 | .S N(0)=$G(^DIC(4,INST,0))
|
---|
88 | .S N(1)=$G(^DIC(4,INST,1))
|
---|
89 | .S CITY=$P(N(1),U,3)
|
---|
90 | .S STATE=$P(N(0),U,2)
|
---|
91 | .I STATE S STATE=$P($G(^DIC(5,STATE,0)),U,2)
|
---|
92 | .S ZIP=$P(N(1),U,4)
|
---|
93 | S ^TMP(IBCNRRTN,$J,1)="Station: "_SITE_P_CITY_P_STATE_P_ZIP
|
---|
94 | ;
|
---|
95 | K IBCNRRTN,INST,N,CITY,SINFO,SITE,STATE,ZIP
|
---|
96 | Q
|
---|
97 | ;
|
---|
98 | ; PROCESS EACH GROUP INSURANCE ENTRY
|
---|
99 | ;
|
---|
100 | PROC(IBCNRRTN) N COUNT,IGRP,IPAYER,IINS,GRPDATA,INSDATA,PLNDATA,PAYDATA,PDTDATA,PLANID
|
---|
101 | ;
|
---|
102 | ;Initialize Counter
|
---|
103 | S COUNT=1
|
---|
104 | ;
|
---|
105 | ;Loop through GROUP INSURANCE PLAN and process any item with a PLANID
|
---|
106 | S IGRP=0 F S IGRP=$O(^IBA(355.3,IGRP)) Q:'IGRP D
|
---|
107 | .;
|
---|
108 | .;Get PLANID and process each entry
|
---|
109 | .S PLANID=$P($G(^IBA(355.3,IGRP,6)),U) I 'PLANID Q
|
---|
110 | .;
|
---|
111 | .;Pull Group Information
|
---|
112 | .S GRPDATA=$$GRP(IGRP)
|
---|
113 | .;
|
---|
114 | .;Get Insurance Lookup from GROUP INSURANCE
|
---|
115 | .S IINS=+$P($G(^IBA(355.3,IGRP,0)),U)
|
---|
116 | .;
|
---|
117 | .;Pull Insurance Information from INSURANCE COMPANY
|
---|
118 | .S INSDATA=$$INS(IINS)
|
---|
119 | .;
|
---|
120 | .;Get Plan info from PLAN
|
---|
121 | .S PLNDATA=$$PLAN(PLANID) I PLNDATA="" Q
|
---|
122 | .;
|
---|
123 | .;Get Payer Lookup from PLAN
|
---|
124 | .S IPAYER=+$P($G(^IBCNR(366.03,PLANID,0)),U,3)
|
---|
125 | .;
|
---|
126 | .;If no (or invalid) Payer Lookup in PLAN, Pull from INSURANCE COMPANY
|
---|
127 | .I IPAYER=0!('$D(^IBE(365.12,IPAYER,0))) S IPAYER=+$P($G(^DIC(36,IINS,3)),U,10)
|
---|
128 | .;
|
---|
129 | .;Pull Payer Information
|
---|
130 | .S PAYDATA=P_P I IPAYER S PAYDATA=$$PAYER(IPAYER)
|
---|
131 | .;
|
---|
132 | .;Last Paid Date
|
---|
133 | .S PDTDATA=$$PAID(IBCNRRTN,IGRP)
|
---|
134 | .;
|
---|
135 | .;Update Counter and Save Entry
|
---|
136 | .S COUNT=$G(COUNT)+1
|
---|
137 | .S ^TMP(IBCNRRTN,$J,COUNT)=INSDATA_P_PAYDATA_P_GRPDATA_P_PLNDATA_P_PDTDATA
|
---|
138 | ;
|
---|
139 | K IBCNRRTN,COUNT,IGRP,IPAYER,IINS,GRPDATA,INSDATA,PLNDATA,PAYDATA,PDTDATA,PLANID
|
---|
140 | Q
|
---|
141 | ;
|
---|
142 | ; PULL GROUP INFORMATION
|
---|
143 | ;
|
---|
144 | ; Function Returns Piece 1 -> Group Name
|
---|
145 | ; 2 -> Group Number
|
---|
146 | ;
|
---|
147 | GRP(IGRP) N GRPDATA,NAME,NUMB,N
|
---|
148 | ;
|
---|
149 | S N=$G(^IBA(355.3,IGRP,0))
|
---|
150 | ;
|
---|
151 | ;Group Name
|
---|
152 | S NAME=$P(N,U,3)
|
---|
153 | ;
|
---|
154 | ;Group Number
|
---|
155 | S NUMB=$P(N,U,4)
|
---|
156 | ;
|
---|
157 | S GRPDATA=NAME_P_NUMB
|
---|
158 | K IGRP,NAME,NUMB,N
|
---|
159 | Q GRPDATA
|
---|
160 | ;
|
---|
161 | ; GET INSURANCE INFORMATION
|
---|
162 | ;
|
---|
163 | ; Return Variable: Piece 1 -> Company Name
|
---|
164 | ; 2 -> Company Address 1
|
---|
165 | ; 3 -> Company Address 2
|
---|
166 | ; 4 -> Company City
|
---|
167 | ; 5 -> Company State
|
---|
168 | ; 6 -> Company Zip Code
|
---|
169 | ;
|
---|
170 | INS(IINS) N ADDR1,ADDR2,CITY,NAME,N,STATE,ZIP
|
---|
171 | ;
|
---|
172 | ;Reset Return Variable
|
---|
173 | S INSDATA=P_P_P_P_P I IINS="" G XINS
|
---|
174 | ;
|
---|
175 | S NAME=$P($G(^DIC(36,IINS,0)),U)
|
---|
176 | S N=$G(^DIC(36,IINS,.11))
|
---|
177 | S ADDR1=$P(N,U,1) ;Address Line 1
|
---|
178 | S ADDR2=$P(N,U,2) ;Address Line 2
|
---|
179 | S CITY=$P(N,U,4) ;City
|
---|
180 | S STATE=$P(N,U,5) ;State
|
---|
181 | I STATE]"" S STATE=$P($G(^DIC(5,STATE,0)),U,2)
|
---|
182 | S ZIP=$P(N,U,6) ;Zip Code
|
---|
183 | ;
|
---|
184 | XINS I IINS]"" S INSDATA=NAME_P_ADDR1_P_ADDR2_P_CITY_P_STATE_P_ZIP
|
---|
185 | K IINS,ADDR1,ADDR2,CITY,NAME,N,STATE,ZIP
|
---|
186 | Q INSDATA
|
---|
187 | ;
|
---|
188 | ; GET PAYER INFORMATION
|
---|
189 | ;
|
---|
190 | ; Return Variable: Piece 1 -> VA National Payer ID
|
---|
191 | ; 2 -> Professional ID
|
---|
192 | ; 3 -> Institutional ID
|
---|
193 | ;
|
---|
194 | PAYER(IPAYER) N N,VAID,PROF,INST,PAYDATA
|
---|
195 | ;
|
---|
196 | S N=$G(^IBE(365.12,IPAYER,0))
|
---|
197 | S VAID=$P(N,U,2) ;VA National Payer ID
|
---|
198 | S PROF=$P(N,U,5) ;Professional ID
|
---|
199 | S INST=$P(N,U,6) ;Institutional ID
|
---|
200 | ;
|
---|
201 | S PAYDATA=INST_P_PROF_P_VAID
|
---|
202 | K IPAYER,N,VAID,PROF,INST
|
---|
203 | Q PAYDATA
|
---|
204 | ;
|
---|
205 | ; GET PLAN INFORMATION
|
---|
206 | ;
|
---|
207 | ; Return Variable: Piece 1 -> VA National Plan ID
|
---|
208 | ;
|
---|
209 | PLAN(PLANID) N PLNDATA
|
---|
210 | ;
|
---|
211 | ;Get Plan ID
|
---|
212 | S PLNDATA=$P($G(^IBCNR(366.03,PLANID,0)),U)
|
---|
213 | ;
|
---|
214 | K PLANID
|
---|
215 | Q PLNDATA
|
---|
216 | ;
|
---|
217 | ; GET LAST DATE PAID
|
---|
218 | ;
|
---|
219 | PAID(IBCNRRTN,IGRP) N PDTDATA
|
---|
220 | ;
|
---|
221 | ;Pull Last Date Paid from Storage Global
|
---|
222 | S PDTDATA=$G(^XTMP(IBCNRRTN,1,IGRP))
|
---|
223 | ;
|
---|
224 | ;Convert to External Format
|
---|
225 | I PDTDATA]"" S PDTDATA=PDTDATA+17000000
|
---|
226 | ;
|
---|
227 | K IBCNRRTN,IGRP
|
---|
228 | Q PDTDATA
|
---|
229 | ;
|
---|
230 | ; COMPILE THE PAID DATE SCRATCH GLOBAL
|
---|
231 | ;
|
---|
232 | PDT(IBCNRRTN,DATE) N CDT,RDT,LDT,LASTDT,XBPS,CID,IEN,DESC
|
---|
233 | ;
|
---|
234 | ;Pull the current information from ^XTMP
|
---|
235 | S CDT=$P($G(^XTMP(IBCNRRTN,0)),U,4) ;Last Date Compiled
|
---|
236 | ;
|
---|
237 | ;Capture the most current response entry
|
---|
238 | S LASTDT=$P($O(^BPSR("AE",""),-1),".")
|
---|
239 | ;
|
---|
240 | ;Loop through Response Received Index and get latest paid date
|
---|
241 | S RDT="" F S RDT=$O(^BPSR("AE",RDT),-1),LDT=$P(RDT,".") Q:RDT=""!(LDT<CDT) D
|
---|
242 | .S XBPS="" F S XBPS=$O(^BPSR("AE",RDT,XBPS)) Q:XBPS="" D
|
---|
243 | ..;
|
---|
244 | ..;Screen out any non-accepted claims
|
---|
245 | ..I $P($G(^BPSR(XBPS,500)),U)'="A" Q
|
---|
246 | ..;
|
---|
247 | ..;Pull Claim Internal ID
|
---|
248 | ..S CID=$P($G(^BPSR(XBPS,0)),U) I CID="" Q
|
---|
249 | ..;
|
---|
250 | ..;Pull VA Plan IEN (Lookup to Group Insurance)
|
---|
251 | ..S IEN=$P($G(^BPSC(CID,1)),U,4) I IEN="" Q
|
---|
252 | ..;
|
---|
253 | ..;If more recent Response Date update storage entry
|
---|
254 | ..I (LDT>$G(^XTMP(IBCNRRTN,1,IEN))) S ^XTMP(IBCNRRTN,1,IEN)=LDT
|
---|
255 | ;
|
---|
256 | ;Update ^XTMP(IBCNRRTN,0) top level entry
|
---|
257 | S DESC="Shared Plan Matches Report Storage - Do Not Delete"
|
---|
258 | S ^XTMP(IBCNRRTN,0)=(DATE+10000)_U_DATE_U_DESC_U_LASTDT_U_$H
|
---|
259 | ;
|
---|
260 | K IBCNRRTN,DATE,CDT,RDT,LDT,XBPS,CID,IEN,DESC,LASTDT
|
---|
261 | Q
|
---|
262 | ;
|
---|
263 | ; EMAIL THE MESSAGE
|
---|
264 | ;
|
---|
265 | EMAIL(IBCNRRTN) N XMY,XMTEXT,XMSUB,XMDUN,XMDUZ,XMZ
|
---|
266 | ;
|
---|
267 | S XMTEXT="^TMP("""_IBCNRRTN_""","_$J_","
|
---|
268 | S XMY("JANUS@MED.VA.GOV")=""
|
---|
269 | S XMSUB=$TR($P($G(^TMP(IBCNRRTN,$J,1)),P),":")_" Matches"
|
---|
270 | D ^XMD
|
---|
271 | ;
|
---|
272 | K IBCNRRTN,XMY,XMTEXT,XMSUB,XMDUN,XMDUZ,XMZ
|
---|
273 | Q
|
---|