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