| 1 | IB20P202 ;WOIFO/AAT-GMT IB PART 3 POST-INSTALL ;24-OCT-02
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**202**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  Q
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 | POST ;Post-Install procedure
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  K ^TMP($J,"IB20P202")
 | 
|---|
| 10 |  D PRNMSG ; Print message to the user
 | 
|---|
| 11 |  D RELALL ; Force conversion for all remaining patients
 | 
|---|
| 12 |  ; Remove temporary global nodes
 | 
|---|
| 13 |  K ^XTMP("IB GMT CONVERSION")
 | 
|---|
| 14 |  K ^IB("AGMT")
 | 
|---|
| 15 |  K ^IB("AGMTP")
 | 
|---|
| 16 |  K ^TMP($J,"IB20P202")
 | 
|---|
| 17 |  Q
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; Add the patient to the log message
 | 
|---|
| 20 | ADDPAT(DFN,IBRES,IBNUM) N IBPT,IBSTA
 | 
|---|
| 21 |  S IBPT=$P($G(^DPT(DFN,0)),U) ;Patient's name
 | 
|---|
| 22 |  S IBSTA=$P($$LST^DGMTU(DFN),"^",3) ;Patient's Copayment Status
 | 
|---|
| 23 |  S IBSTA=$E(IBSTA,1,20),IBSTA=IBSTA_$J("",20-$L(IBSTA))
 | 
|---|
| 24 |  D ADDLN($J(IBNUM,3)_" "_IBPT_$J("",30-$L(IBPT))_" "_IBSTA_" "_(+IBRES)_" Charge"_$S(IBRES=1:"",1:"s"))
 | 
|---|
| 25 |  Q
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ;Add a line to the text array
 | 
|---|
| 28 | ADDLN(IBTXT) N IBC
 | 
|---|
| 29 |  D MES^XPDUTL("  "_$G(IBTXT))
 | 
|---|
| 30 |  S IBC=$O(^TMP($J,"IB20P202",""),-1)+1
 | 
|---|
| 31 |  S ^TMP($J,"IB20P202",IBC)=$G(IBTXT," ")
 | 
|---|
| 32 |  Q
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | RELALL ;Release all remaining held charges off hold;
 | 
|---|
| 35 |  N DFN,IBRES,IBNUM,XMSUB,XMY,XMDUZ,XMTEXT,XMGROUP,DIFROM
 | 
|---|
| 36 |  D ADDLN("Geographic Means Test Clean-up, patch IB*2.0*202 post-install procedure.")
 | 
|---|
| 37 |  D ADDLN("During the GMT IB Clean-up procedure all Inpatient Means Test charges, placed")
 | 
|---|
| 38 |  D ADDLN("ON HOLD (RATE) since October 1, 2002, will be released and passed to the")
 | 
|---|
| 39 |  D ADDLN("Accounts Receivable package.")
 | 
|---|
| 40 |  D ADDLN("For patients with 'GMT COPAY REQUIRED' status charges will be recalculated.")
 | 
|---|
| 41 |  D ADDLN("Process started on "_$$NOW())
 | 
|---|
| 42 |  D ADDLN()
 | 
|---|
| 43 |  D ADDLN("Searching and processing patients, who did not pass the GMT conversion...")
 | 
|---|
| 44 |  D ADDLN()
 | 
|---|
| 45 |  S IBNUM=0
 | 
|---|
| 46 |  S DFN=0 F  S DFN=$O(^IB("AGMTP",DFN)) Q:'DFN  D
 | 
|---|
| 47 |  . S IBRES=$$RELHOLD(DFN)
 | 
|---|
| 48 |  . S IBNUM=IBNUM+1
 | 
|---|
| 49 |  . D ADDPAT(DFN,IBRES,IBNUM)
 | 
|---|
| 50 |  I IBNUM=0 D ADDLN("none found.")
 | 
|---|
| 51 |  I $D(^IB("AC",20)) D FORCEREL ; Force releasing of hold charges on hold (rate)
 | 
|---|
| 52 |  D ADDLN()
 | 
|---|
| 53 |  D ADDLN("Process finished at "_$$NOW())
 | 
|---|
| 54 |  D ADDLN()
 | 
|---|
| 55 |  I $D(^IB("AC",20)) D
 | 
|---|
| 56 |  . D ADDLN("Some charges still remain on hold (rate), they may be not related to GMT.")
 | 
|---|
| 57 |  . D ADDLN("Use 'List Charges Awaiting New Copay Rate' menu option to make sure, that ")
 | 
|---|
| 58 |  . D ADDLN("there is no GMT-related charges, placed on hold, because of unknown rate.")
 | 
|---|
| 59 |  I IBNUM>0 D ADDLN(),ADDLN("Use the 'Means Test Single Patient Billing Profile' report to review charges.")
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ; Send log message to IB MEANS TEST mail group.
 | 
|---|
| 62 |  S XMSUB="GEOGRAPHIC MEANS TEST CLEAN-UP PROCEDURE"
 | 
|---|
| 63 |  S XMDUZ="PATCH IB*2.0*202 POST-INIT"
 | 
|---|
| 64 |  S XMGROUP=$$GET1^DIQ(350.9,"1,",.11) ; Means Test billing Group
 | 
|---|
| 65 |  S XMY(DUZ)="" ; Send the message to the user (at least)
 | 
|---|
| 66 |  I XMGROUP'="" S XMY("G."_XMGROUP)=""
 | 
|---|
| 67 |  S XMTEXT="^TMP($J,""IB20P202"","
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  D ^XMD
 | 
|---|
| 70 |  Q
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 | FORCEREL ; Force releasing remaining charges on hold (rate)
 | 
|---|
| 73 |  N IBACT,IBCNT
 | 
|---|
| 74 |  S IBCNT=0
 | 
|---|
| 75 |  S IBACT=0 F  S IBACT=$O(^IB("AC",20,IBACT)) Q:'IBACT  I $$RELCRG(IBACT) S IBCNT=IBCNT+1
 | 
|---|
| 76 |  I IBCNT D ADDLN(IBCNT_" inpatient charges were released off hold additionally.")
 | 
|---|
| 77 |  Q
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  ;Perform "conversion" for the given patient 
 | 
|---|
| 80 | RELHOLD(DFN) N IBACT,IBDT,X,IBLIMIT,IBCNT
 | 
|---|
| 81 |  S DFN=+DFN
 | 
|---|
| 82 |  S IBLIMIT=$$PLUS($$GMTEFD^IBAGMT(),-30)
 | 
|---|
| 83 |  S IBCNT=0
 | 
|---|
| 84 |  ;For each Patient's IB Action starting from the last, back to the GMT Effective Date:
 | 
|---|
| 85 |  S IBDT="" F  S IBDT=$O(^IB("APTDT",DFN,IBDT),-1) Q:IBDT=""  Q:IBDT<IBLIMIT  D
 | 
|---|
| 86 |  . S IBACT="" F  S IBACT=$O(^IB("APTDT",DFN,IBDT,IBACT),-1) Q:'IBACT  S IBCNT=IBCNT+$$RELCRG(IBACT)
 | 
|---|
| 87 |  K ^IB("AGMTP",DFN) ; Remove the flag
 | 
|---|
| 88 |  Q IBCNT
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 |  ; Release/recalculate the single charge
 | 
|---|
| 92 |  ; Also adjust MT Billing Clock Data, if this is a Copay charge.
 | 
|---|
| 93 |  ; Input: IB ACTION IEN
 | 
|---|
| 94 |  ; Output: 1 - Processed, 0 - Charge does not need to be processed (or error)
 | 
|---|
| 95 | RELCRG(IBACT) N DFN,IBZ,IBSTA,IBDT,IBCRG,IBNOS,IBSEQNO,IBDUZ,IBFDA,IBGMT,Y,IBCLK,IB90D,IBCLKZ,IBAMT,IBATYP
 | 
|---|
| 96 |  S IBZ=$G(^IB(IBACT,0)) Q:IBZ="" 0 ;Corrupted cross-reference
 | 
|---|
| 97 |  S DFN=$P(IBZ,U,2)
 | 
|---|
| 98 |  S IBSTA=$P(IBZ,U,5) I IBSTA'=20,IBSTA'=1 Q 0 ;Not a 'HOLD-RATE' and not an 'INCOMPLETE'
 | 
|---|
| 99 |  S IBATYP=+$P(IBZ,U,3) ; IB Action Type
 | 
|---|
| 100 |  S IBDT=$P(IBZ,U,14) ; Date Billed From
 | 
|---|
| 101 |  I IBDT<$$GMTEFD^IBAGMT() Q 0 ;Never touch charges 'billed from' before the GMT Effective Date
 | 
|---|
| 102 |  I '$$ISGMTTYP^IBAGMT(IBATYP) Q 0 ;Not a MT Inpatient charge
 | 
|---|
| 103 |  S X="RCERR^IB20P202",@^%ZOSF("TRAP")
 | 
|---|
| 104 |  S IBCRG=$P(IBZ,U,7) ;Charge Amount
 | 
|---|
| 105 |  S IBGMT=$$ISGMTPT^IBAGMT(DFN,IBDT) ; GMT Status for the patient
 | 
|---|
| 106 |  ;Recalculate the charge
 | 
|---|
| 107 |  I IBGMT>0,'$P(^IB(IBACT,0),U,21) D  ;If the patient has GMT Copayment Status
 | 
|---|
| 108 |  . S $P(^IB(IBACT,0),U,7)=$$REDUCE^IBAGMT(IBCRG) ;Reduce the amount to 20%
 | 
|---|
| 109 |  . S $P(^IB(IBACT,0),U,21)=1 ;Mark the charge as GMT RELATED
 | 
|---|
| 110 |  . Q:'$G(^IB("AGMT",IBACT))  ; Quit if that is not COPAY charge.
 | 
|---|
| 111 |  . ; The temporary node "AGMT" exists only for Inpatient Copay Charges.
 | 
|---|
| 112 |  . ; Adjusting MT Billing Clock Amount
 | 
|---|
| 113 |  . S IBCLK=+$P(^IB("AGMT",IBACT),U),IB90D=+$P(^(IBACT),U,2) Q:IB90D<1  Q:IB90D>4
 | 
|---|
| 114 |  . S IBCLKZ=$G(^IBE(351,IBCLK,0)) Q:IBCLKZ=""
 | 
|---|
| 115 |  . S IBAMT=+$P(IBCLKZ,"^",4+IB90D) S IBAMT=IBAMT-IBCRG+$$REDUCE^IBAGMT(IBCRG) S:IBAMT<0 IBAMT=0
 | 
|---|
| 116 |  . S $P(^IBE(351,IBCLK,0),U,4+IB90D)=IBAMT
 | 
|---|
| 117 |  K ^IB("AGMT",IBACT) ; Remove temporary node
 | 
|---|
| 118 |  ; Now pass the held charge to the AR package (Incomplete charges will not be released)
 | 
|---|
| 119 |  I IBSTA'=1 S IBNOS=IBACT,IBSEQNO=$P($G(^IBE(350.1,IBATYP,0)),U,5) S:IBSEQNO="" IBSEQNO=1 S IBDUZ=DUZ D ^IBR I Y<0 D ERRMSG(IBACT,$P(Y,U,2,99))
 | 
|---|
| 120 |  I IBGMT'>0,IBSTA=1 Q 0  ; Incomplete charges for non-GMT patients
 | 
|---|
| 121 |  Q 1
 | 
|---|
| 122 |  ;
 | 
|---|
| 123 | RCERR N IBERR  ;Error trapping for RELCRG
 | 
|---|
| 124 |  S IBERR=$$EC^%ZOSV
 | 
|---|
| 125 |  D ^%ZTER
 | 
|---|
| 126 |  D ERRMSG(IBACT,"Program Error "_IBERR)
 | 
|---|
| 127 |  Q 0
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | PLUS(IBDT,IBDAYS) N X,X1,X2,%H
 | 
|---|
| 130 |  S X1=IBDT,X2=IBDAYS
 | 
|---|
| 131 |  D C^%DTC
 | 
|---|
| 132 |  Q X
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  ; Send error message to IB MEANS TEST group.
 | 
|---|
| 135 |  ; "Please review the IB ACTION"
 | 
|---|
| 136 | ERRMSG(IBACT,IBERR) N IBTXT,XMSUB,XMY,XMDUZ,XMTEXT,XMGROUP,DIFROM,IBGRP,IBI,DFN,IBPT,IBZ,IBC,IBDT,IBATYP
 | 
|---|
| 137 |  S XMSUB="IB GMT CLEAN-UP ERROR"
 | 
|---|
| 138 |  S XMDUZ="PATCH IB*2.0*202 POST-INIT"
 | 
|---|
| 139 |  S XMGROUP=$$GET1^DIQ(350.9,"1,",.11) ; Means Test billing Group
 | 
|---|
| 140 |  I XMGROUP="" S XMGROUP=DUZ ; No billing groups defined - send to the user
 | 
|---|
| 141 |  E  S XMGROUP="G."_XMGROUP
 | 
|---|
| 142 |  S XMTEXT="IBTXT(",XMY(XMGROUP)=""
 | 
|---|
| 143 |  ;
 | 
|---|
| 144 |  S IBZ=$G(^IB(IBACT,0))
 | 
|---|
| 145 |  S DFN=$P(IBZ,U,2),IBPT=$P($G(^DPT(DFN,0)),U)
 | 
|---|
| 146 |  S IBDT=$P(IBZ,U,14),IBATYP=+$P(IBZ,U,3)
 | 
|---|
| 147 |  S IBC=0
 | 
|---|
| 148 |  S IBC=IBC+1,IBTXT(IBC)="The Geographic Means Test software failed to process the Inpatient Means Test"
 | 
|---|
| 149 |  S IBC=IBC+1,IBTXT(IBC)="charge IEN "_IBACT_", placed on HOLD - RATE (or Incomplete) after the GMT Effective Date."
 | 
|---|
| 150 |  S IBC=IBC+1,IBTXT(IBC)=" "
 | 
|---|
| 151 |  S IBC=IBC+1,IBTXT(IBC)="The error occurred when trying to pass the charge to Accounts Receivable."
 | 
|---|
| 152 |  S IBC=IBC+1,IBTXT(IBC)="Please review the IB ACTION IEN "_IBACT_"."
 | 
|---|
| 153 |  S IBC=IBC+1,IBTXT(IBC)=" "
 | 
|---|
| 154 |  I $G(IBERR)'="" D
 | 
|---|
| 155 |  . S IBC=IBC+1,IBTXT(IBC)="Error code: "_IBERR
 | 
|---|
| 156 |  . S IBC=IBC+1,IBTXT(IBC)=" "
 | 
|---|
| 157 |  S IBC=IBC+1,IBTXT(IBC)="DIAGNOSTIC INFORMATION:"
 | 
|---|
| 158 |  S IBC=IBC+1,IBTXT(IBC)="Patient: "_IBPT
 | 
|---|
| 159 |  S IBC=IBC+1,IBTXT(IBC)="IB Action IEN: "_IBACT_", Date billed from: "_$$DAT($P(IBZ,"^",14))_", Date billed to: "_$$DAT($P(IBZ,"^",15))
 | 
|---|
| 160 |  S IBC=IBC+1,IBTXT(IBC)="IB Action Type: "_$E($$ACTNM^IBOUTL(IBATYP),1,30)
 | 
|---|
| 161 |  S IBC=IBC+1,IBTXT(IBC)="Total Charge Amount: "_$J($P(IBZ,U,7),"",2)_", The charge is "_$S($P(IBZ,U,21):"",1:"not ")_"marked as GMT Related."
 | 
|---|
| 162 |  I '$P(IBZ,U,21),IBDT'<$$GMTEFD^IBAGMT(),$$ISGMTTYP^IBAGMT(IBATYP),$$ISGMTPT^IBAGMT(DFN,IBDT)>0 D
 | 
|---|
| 163 |  . S IBC=IBC+1,IBTXT(IBC)="The amount must be decreased to 20% of initial value (GMT rate)."
 | 
|---|
| 164 |  . I '$P(IBZ,U,21) S IBC=IBC+1,IBTXT(IBC)="The charge is supposed to be GMT Related."
 | 
|---|
| 165 |  ;
 | 
|---|
| 166 |  D ^XMD
 | 
|---|
| 167 |  Q
 | 
|---|
| 168 |  ;
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 | DAT(IBDT) ; Convert FM date to (mm/dd/yy) format.
 | 
|---|
| 171 |  I 'IBDT Q ""
 | 
|---|
| 172 |  Q $$FMTE^XLFDT(IBDT,"2MZ")
 | 
|---|
| 173 |  ;
 | 
|---|
| 174 | NOW() N %,%H,%I,X,Y
 | 
|---|
| 175 |  D NOW^%DTC S Y=%
 | 
|---|
| 176 |  D DD^%DT
 | 
|---|
| 177 |  S Y=$P(Y,"@")_" at "_$P(Y,"@",2)
 | 
|---|
| 178 |  Q Y
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 | PRNMSG ;
 | 
|---|
| 181 |  N IBTXT
 | 
|---|
| 182 |  S IBTXT(1)=""
 | 
|---|
| 183 |  S IBTXT(2)="  Geographic Means Test, IB Part 3, Post-Install Starting"
 | 
|---|
| 184 |  S IBTXT(3)=""
 | 
|---|
| 185 |  S IBTXT(4)="  The procedure will find, adjust and bill all remaining"
 | 
|---|
| 186 |  S IBTXT(5)="  GMT-related IB charges, placed on hold since 10/1/2002,"
 | 
|---|
| 187 |  S IBTXT(6)="  because of unknown rate."
 | 
|---|
| 188 |  S IBTXT(7)=""
 | 
|---|
| 189 |  S IBTXT(8)="  The process will take some time ..."
 | 
|---|
| 190 |  S IBTXT(9)=""
 | 
|---|
| 191 |  D MES^XPDUTL(.IBTXT)
 | 
|---|
| 192 |  Q
 | 
|---|