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