| 1 | IBACV ;WOIFO/SS-COMBAT VET UTILITIES ;7-AUG-03
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**234,247,275,339,347** ;21-MAR-94;Build 24
 | 
|---|
| 3 |  ;;Per VHA Directive 2004-038, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;To replace CL^SDCO21 with CL^IBACV that wraps out both CL^SDCO21 and $$CVEDT^DGCV
 | 
|---|
| 6 | CL(IBDFN,IBSDDT,IBSDOE,IBSDCLY) ;Build Classification Array
 | 
|---|
| 7 |  ; Input -- DFN Patient file IEN 
 | 
|---|
| 8 |  ; SDDT Date/Time [Optional]
 | 
|---|
| 9 |  ; SDOE Outpatient Encounter file IEN [Optional]
 | 
|---|
| 10 |  ; Output -- SDCLY Classification Array
 | 
|---|
| 11 |  ; Subscripted by Class. Type file (#409.41) IEN
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 |  D CL^SDCO21(IBDFN,$G(IBSDDT),$G(IBSDOE),.IBSDCLY)
 | 
|---|
| 14 |  Q
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;returns CV status as:
 | 
|---|
| 17 |  ; current_CV_status^end_date^if_ever_had_CV_status
 | 
|---|
| 18 | CVEDT(IBDFN,IBDT) ;
 | 
|---|
| 19 |  N IBRET S IBRET=$$CVEDT^DGCV($G(IBDFN),$G(IBDT))
 | 
|---|
| 20 |  Q (+$P(IBRET,"^",3))_"^"_(+$P(IBRET,"^",2))_"^"_(+$P(IBRET,"^",1)) ;swop
 | 
|---|
| 21 |  ;
 | 
|---|
| 22 |  ;/**
 | 
|---|
| 23 |  ;Return the classification description of code sets for #.03 in #351.2.
 | 
|---|
| 24 |  ; Input:
 | 
|---|
| 25 |  ; X -- Patient class [1-ao|2-ir|3-swa|4-sc|5-mst|6-hnc|7-cv|8-SHAD]
 | 
|---|
| 26 |  ; IBCASE -- "M" - mixed case (the first letter is uppercase and others-lowercase)
 | 
|---|
| 27 | PATTYPE(X,IBCASE) ; */
 | 
|---|
| 28 |  N IBZ
 | 
|---|
| 29 |  S IBZ=$S(X=1:"AGENT ORANGE",X=2:"IONIZING RADIATION",X=3:"SOUTHWEST ASIA",X=4:"SERVICE CONNECTED",X=5:"MILITARY SEXUAL TRAUMA",X=6:"HEAD/NECK CANCER",X=7:"COMBAT VETERAN",X=8:"PROJECT 112/SHAD",1:"SPECIAL")
 | 
|---|
| 30 |  Q:$G(IBCASE)="M" $$LOWER^VALM1(IBZ)
 | 
|---|
| 31 |  Q IBZ
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 | PATTYAB(X) ; Return External Abbreviation of Special Inpatient Billing Case Patient Type (#351.2,.03)
 | 
|---|
| 34 |  ; Input: 351.2, .03 internal value
 | 
|---|
| 35 |  N IBZ S X=$G(X)
 | 
|---|
| 36 |  S IBZ=$S(X=1:"AO",X=2:"IR",X=3:"SWA",X=4:"SC",X=5:"MST",X=6:"HNC",X=7:"CV",X=8:"SHAD",1:"UNK")
 | 
|---|
| 37 |  Q IBZ
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;if Combat Vet sends e-mail to mailgroup "IB COMBAT VET RX COPAY"
 | 
|---|
| 40 |  ;IBDFN-patient IEN, IBDT - date, IBRXPTR - pointer to #52 file to get prescription #
 | 
|---|
| 41 | RXALRT(IBDFN,IBDT,IBRXPTR) ;
 | 
|---|
| 42 |  N IB1
 | 
|---|
| 43 |  S IB1=$$CVEDT(IBDFN,$G(IBDT))
 | 
|---|
| 44 |  I +IB1 D EMAIL(IBDFN,$G(IBDT),$P(IB1,"^",2),$G(IBRXPTR))
 | 
|---|
| 45 |  Q
 | 
|---|
| 46 |  ;sends e-mail to mail group IB COMBAT VET RX COPAY
 | 
|---|
| 47 | EMAIL(DFN,IBEFDT,IBEXPDT,IBRX) ;
 | 
|---|
| 48 |  N IBTODAY,IBPAT,IBT,IBSSN
 | 
|---|
| 49 |  N XMSUB,XMY,XMTEXT,XMDUZ
 | 
|---|
| 50 |  N Y D NOW^%DTC S Y=%\1 X ^DD("DD") S IBTODAY=Y
 | 
|---|
| 51 |  I +$G(DFN)>0 D
 | 
|---|
| 52 |  . N VADM,VA,VAERR
 | 
|---|
| 53 |  . D DEM^VADPT
 | 
|---|
| 54 |  . S IBPAT=$G(VADM(1))
 | 
|---|
| 55 |  . S IBSSN=$P($G(VADM(2)),"^",2)
 | 
|---|
| 56 |  I $G(IBRX) S IBRX=$$FILE^IBRXUTL(IBRX,.01) ;get RX number
 | 
|---|
| 57 |  S:IBPAT="" IBPAT="Unknown"
 | 
|---|
| 58 |  S XMSUB="COMBAT VET RX COPAY REVIEW NEEDED"
 | 
|---|
| 59 |  S XMY("G.IB COMBAT VET RX COPAY")=""
 | 
|---|
| 60 |  S XMTEXT="IBT(",XMDUZ="INTEGRATED BILLING PACKAGE"
 | 
|---|
| 61 |  S IBT(1,0)="PATIENT: "_IBPAT
 | 
|---|
| 62 |  I $G(IBEXPDT)>0 S Y=IBEXPDT X ^DD("DD") S IBT(1,0)=IBT(1,0)_" COMBAT VET until: "_Y
 | 
|---|
| 63 |  S IBT(2,0)="SSN: "_IBSSN
 | 
|---|
| 64 |  S IBT(3,0)=""
 | 
|---|
| 65 |  S IBT(4,0)=$S($G(IBRX)'="":"RX#: "_$G(IBRX),1:"")
 | 
|---|
| 66 |  S IBT(5,0)="RX RELEASE DATE: "_IBTODAY
 | 
|---|
| 67 |  S IBT(6,0)=""
 | 
|---|
| 68 |  S IBT(7,0)="The above patient has a Combat Veteran status. Please review this"
 | 
|---|
| 69 |  S IBT(8,0)="prescription to determine if the RX Copay charge should be cancelled."
 | 
|---|
| 70 |  S IBT(9,0)=""
 | 
|---|
| 71 |  D ^XMD
 | 
|---|
| 72 |  Q
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  ;--------------------------------------------------------------------
 | 
|---|
| 75 |  ;is called from PROC^IBAMTC for each active inpatient
 | 
|---|
| 76 | IFCVEXP(IBDFN,IBNJDT,IB405) ;
 | 
|---|
| 77 |  ;Input:IBDFN1 - patient's ien in PATIENT file
 | 
|---|
| 78 |  ; IBNJDT - Nightly Job date 
 | 
|---|
| 79 |  ; IB405 - ptr to #405
 | 
|---|
| 80 |  N IBTSTDT,IBPAT,IBZ,IBEXPIR,IBADM
 | 
|---|
| 81 |  S IBPAT=$$PT^IBEFUNC(IBDFN)
 | 
|---|
| 82 |  S (IBZ,IBEXPIR)=0
 | 
|---|
| 83 |  S IBZ=$$CVEDT^IBACV(IBDFN,IBNJDT)
 | 
|---|
| 84 |  I $P(IBZ,"^",3)=0 Q  ;patient has never been CV
 | 
|---|
| 85 |  S IBEXPIR=+$P(IBZ,"^",2)\1
 | 
|---|
| 86 |  I IBEXPIR>IBNJDT Q  ;expires in the future
 | 
|---|
| 87 |  ;get last date when Nightly job checked CV status for inpatients
 | 
|---|
| 88 |  S IBTSTDT=$$XTMPLST()
 | 
|---|
| 89 |  ;if ^XTMP is not there then make the last CV check date as TODAY-7
 | 
|---|
| 90 |  I IBTSTDT=0 S IBTSTDT=$$CHNGDATE^IBAHVE3(IBNJDT,-7) D SETXTMP0(IBTSTDT)
 | 
|---|
| 91 |   S IBADM=+$G(^DGPM(IB405,0))\1 ;admission/movement date
 | 
|---|
| 92 |  I IBTSTDT'<IBNJDT Q
 | 
|---|
| 93 |  ;check for all the days since the last check date thru today
 | 
|---|
| 94 |  F  D  Q:(IBTSTDT'<IBNJDT)!(IBTSTDT=IBEXPIR)
 | 
|---|
| 95 |  . S IBTSTDT=$$CHNGDATE^IBAHVE3(IBTSTDT,+1) ;next date
 | 
|---|
| 96 |  . ;quit if the date is before the admission
 | 
|---|
| 97 |  . I IBTSTDT<IBADM Q
 | 
|---|
| 98 |  . ;send alert if CV expires this day
 | 
|---|
| 99 |  . I IBEXPIR=IBTSTDT D SETXTPM(IBDFN,IBTSTDT,IBEXPIR,IBADM,IBPAT)
 | 
|---|
| 100 |  Q
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 | XTMPLST() ;get the last CV check date in ^XTMP
 | 
|---|
| 103 |  Q +$P($G(^XTMP("IBCVEXPDT",0)),"^",2)
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 | SETXTPM(IBDFN,IBCHKDT,IBEXP,IBADMIS,IBPT) ;save info in ^XTMP
 | 
|---|
| 106 |  ;Input:IBDFN - patient's ien in PATIENT file
 | 
|---|
| 107 |  ; IBEXP - CV expiration date
 | 
|---|
| 108 |  ; IBADMIS - admission/movement date
 | 
|---|
| 109 |  ; IBPT - patient's info
 | 
|---|
| 110 |  S ^XTMP("IBCVEXPDT",IBDFN)=IBDFN_"^"_IBCHKDT_"^"_IBEXP_"^"_IBADMIS_"^"_$P(IBPT,"^",1,2)
 | 
|---|
| 111 |  Q
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  ;is called from IBAMTC after PROC^IBAMTC and sends e-mail alert 
 | 
|---|
| 114 |  ;with the list of inpatient's with CV expired
 | 
|---|
| 115 | CVEXMAIL(IBDT) ;send all e-mails
 | 
|---|
| 116 |  N Y,IBT,IBZ1,IBZ2,IBC,IBT,IBTOTAL
 | 
|---|
| 117 |  S IBC=0,IBTOTAL=0
 | 
|---|
| 118 |  ;loop thru ^XTMP
 | 
|---|
| 119 |  S IBZ1=0 F  S IBZ1=$O(^XTMP("IBCVEXPDT",IBZ1)) Q:+IBZ1=0  D
 | 
|---|
| 120 |  . D HEADER
 | 
|---|
| 121 |  . S IBZ2=$G(^XTMP("IBCVEXPDT",IBZ1))
 | 
|---|
| 122 |  . I IBZ2'="" S IBTOTAL=IBTOTAL+1 D MKEMAIL($P(IBZ2,U,3),$P(IBZ2,U,4),$P(IBZ2,U,5),$P(IBZ2,U,6))
 | 
|---|
| 123 |  I IBC>0 D
 | 
|---|
| 124 |  . D FOOTER(IBTOTAL)
 | 
|---|
| 125 |  . D SEND^IBACVA2
 | 
|---|
| 126 |  D SETXTMP0(IBDT)
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | HEADER ;prints a header for the e-mail
 | 
|---|
| 130 |  I IBC>0 Q
 | 
|---|
| 131 |  S XMSUB="INPATIENTS' COMBAT VET STATUS EXPIRED"
 | 
|---|
| 132 |  N IBX S IBX="",$P(IBX,"=",70)=""
 | 
|---|
| 133 |  S IBC=IBC+1,IBT(IBC)="The following patients whose records indicate that they had CV status, were"
 | 
|---|
| 134 |  S IBC=IBC+1,IBT(IBC)="admitted for inpatient care with CV status, and their CV status has expired"
 | 
|---|
| 135 |  S IBC=IBC+1,IBT(IBC)="during their stays. Please check their CV exp date again before adjusting"
 | 
|---|
| 136 |  S IBC=IBC+1,IBT(IBC)="their billings accordingly."
 | 
|---|
| 137 |  S IBC=IBC+1,IBT(IBC)=""
 | 
|---|
| 138 |  S IBC=IBC+1,IBT(IBC)=$$LRJ("Patient NAME",23)_$$LRJ("SSN",14)_$$LRJ("CV exp. date",20)_$$LRJ("Date of admission",20)
 | 
|---|
| 139 |  S IBC=IBC+1,IBT(IBC)=IBX
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 | FOOTER(IBTOTAL) ;
 | 
|---|
| 142 |  S IBC=IBC+1,IBT(IBC)=""
 | 
|---|
| 143 |  S IBC=IBC+1,IBT(IBC)="Total: "_IBTOTAL_" patient(s)"
 | 
|---|
| 144 |  Q
 | 
|---|
| 145 |  ;
 | 
|---|
| 146 | MKEMAIL(IBEXP,IBADM,IBNAME,IBSSN) ;
 | 
|---|
| 147 |  ;send e-mail alert if CV does expire today
 | 
|---|
| 148 |  N Y
 | 
|---|
| 149 |  S Y=IBEXP D DD^%DT S IBEXP=Y
 | 
|---|
| 150 |  S Y=IBADM D DD^%DT S IBADM=Y
 | 
|---|
| 151 |  S IBC=IBC+1,IBT(IBC)=$$LRJ($E(IBNAME,1,21),23)_$$LRJ(IBSSN,14)_$$LRJ(IBEXP,20)_$$LRJ(IBADM,20)
 | 
|---|
| 152 |  Q
 | 
|---|
| 153 |  ;
 | 
|---|
| 154 | SETXTMP0(IBDT) ;set the new "last CV check date" in ^XTMP
 | 
|---|
| 155 |  N IBPURGDT S IBPURGDT=+$$CHNGDATE^IBAHVE3(IBDT,+7)
 | 
|---|
| 156 |  K ^XTMP("IBCVEXPDT")
 | 
|---|
| 157 |  S ^XTMP("IBCVEXPDT",0)=IBPURGDT_"^"_IBDT_"^LAST DATE NIGHTLY JOB CHECKED COMBAT VET EXPIRATION FOR INPATIENTS"
 | 
|---|
| 158 |  Q
 | 
|---|
| 159 |  ;
 | 
|---|
| 160 |  ;---
 | 
|---|
| 161 |  ;adds spaces on right/left or truncates to make return string IBLEN characters long
 | 
|---|
| 162 |  ;IBST- original string
 | 
|---|
| 163 |  ;IBLEN - desired length
 | 
|---|
| 164 |  ;IBCHR -character (default = SPACE)
 | 
|---|
| 165 |  ;IBSIDE - on which side to add characters (default = RIGHT)
 | 
|---|
| 166 | LRJ(IBST,IBLEN,IBCHR,IBSIDE) ;
 | 
|---|
| 167 |  N Y S $P(Y,$S($L($G(IBCHR)):IBCHR,1:" "),$S(IBLEN-$L(IBST)<0:1,1:IBLEN-$L(IBST)+1))=""
 | 
|---|
| 168 |  Q $E($S($G(IBSIDE)="L":Y_IBST,1:IBST_Y),1,IBLEN)
 | 
|---|
| 169 |  ;---
 | 
|---|
| 170 |  ;
 | 
|---|