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