| [613] | 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 | 
|---|