| [613] | 1 | IBTUTL1 ;ALB/AAS - CLAIMS TRACKING UTILITY ROUTINE ;21-JUN-93 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**13,223,249,292**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | OPT(DFN,IBETYP,IBTDT,ENCTR,IBRMARK,IBVSIT) ; -- add outpatient care entries | 
|---|
|  | 6 | ; -- input   dfn  := patient pointer to 2 | 
|---|
|  | 7 | ;          ibetyp := pointer to type entry in 356.6 | 
|---|
|  | 8 | ;          ibtdt  := episode date | 
|---|
|  | 9 | ;          enctr  := pointer to opt. encounter file (optional) | 
|---|
|  | 10 | ;        ibrmark  := text of reason not billable (optional) | 
|---|
|  | 11 | ;         ibvsit  := pointer to visit file (optional) | 
|---|
|  | 12 | ; | 
|---|
|  | 13 | N X,Y,DA,DR,DIE,DIC,IBSCRN | 
|---|
|  | 14 | S IBSCRN=0 | 
|---|
|  | 15 | ;Allow user inter-actions if not queued and IBTALK=1 or not exist. | 
|---|
|  | 16 | I '$D(ZTQUEUED) D  I IBSCRN G OPTSCRN | 
|---|
|  | 17 | . I $D(IBTALK),'$G(IBTALK) Q | 
|---|
|  | 18 | . I IBTDT<3060101 Q  ;Don't use new code for claims prior to 1/1/2006 | 
|---|
|  | 19 | . S IBSCRN=1 | 
|---|
|  | 20 | I $G(IBETYP) S IBETYP=$O(^IBE(356.6,"AC",2,0)) | 
|---|
|  | 21 | I IBTDT<3060101 S X=$O(^IBT(356,"APTY",DFN,IBETYP,IBTDT,0)) I X S IBTRN=X G OPTQ ;Prevent duplicate date/time claims prior to 1/1/2006 | 
|---|
|  | 22 | ;Check for encounter already in claims tracking. | 
|---|
|  | 23 | I $D(ENCTR),$D(^IBT(356,"AENC",+DFN,+ENCTR)) S IBTRN=$O(^IBT(356,"AENC",+DFN,+ENCTR,0)) G OPTQ | 
|---|
|  | 24 | D ADDT^IBTUTL | 
|---|
|  | 25 | S DA=IBTRN,DIE="^IBT(356," | 
|---|
|  | 26 | I IBTRN<1 G OPTQ | 
|---|
|  | 27 | L +^IBT(356,+IBTRN):10 I '$T G OPTQ | 
|---|
|  | 28 | S DR=".02////"_$G(DFN)_";.03////"_$G(IBVSIT)_";.04////"_$G(ENCTR)_";.06////"_+IBTDT_";.18////"_IBETYP_";.2////1;.24////"_$$INSURED^IBCNS1(DFN)_";1.01///NOW;1.02////"_DUZ_";.17////"_$$EABD^IBTUTL(IBETYP) | 
|---|
|  | 29 | I $G(IBRMARK)'="" S DR=DR_";.19///"_IBRMARK | 
|---|
|  | 30 | D ^DIE K DA,DR,DIE | 
|---|
|  | 31 | L -^IBT(356,+IBTRN) | 
|---|
|  | 32 | OPTQ Q | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | REFILL(DFN,IBETYP,IBTDT,IBRXN,IBRXN1,IBRMARK,IBEABD) ; -- add refill | 
|---|
|  | 35 | ; -- input   dfn   := patient pointer to 2 | 
|---|
|  | 36 | ;          ibetyp  := pointer to type entry in 356.6 | 
|---|
|  | 37 | ;          ibtdt   := episode date (refill date) | 
|---|
|  | 38 | ;          ibrxn   := pointer to 52 | 
|---|
|  | 39 | ;          ibrxn1  := refill multiple entry | 
|---|
|  | 40 | ;          ibrmark := non billable reason if unsure | 
|---|
|  | 41 | ;          ibeabd  := optional, can specify an earliest auto bill date | 
|---|
|  | 42 | ; | 
|---|
|  | 43 | N X,Y,DA,DR,DIE,DIC | 
|---|
|  | 44 | ;S X=$O(^IBT(356,"APTY",DFN,IBETYP,IBTDT,0)) I X S IBTRN=X G REFILLQ | 
|---|
|  | 45 | S X=$O(^IBT(356,"ARXFL",IBRXN,IBRXN1,0)) I X S IBTRN=X G REFILLQ | 
|---|
|  | 46 | D ADDT^IBTUTL | 
|---|
|  | 47 | I IBTRN<1 G REFILLQ | 
|---|
|  | 48 | S DA=IBTRN,DIE="^IBT(356," | 
|---|
|  | 49 | L +^IBT(356,+IBTRN):10 I '$T G REFILLQ | 
|---|
|  | 50 | S DR=".02////"_$G(DFN)_";.06////"_+IBTDT_";.08////"_IBRXN_";.1////"_IBRXN1_";.18////"_IBETYP_";.2////1;.24////"_$$INSURED^IBCNS1(DFN)_";1.01///NOW;1.02////"_$S($G(IBDUZ):IBDUZ,1:DUZ)_";.17////"_$S($G(IBEABD):IBEABD,1:$$EABD^IBTUTL(IBETYP)) | 
|---|
|  | 51 | I $G(IBRMARK)'="" S DR=DR_";.19///"_IBRMARK | 
|---|
|  | 52 | D ^DIE K DA,DR,DIE | 
|---|
|  | 53 | L -^IBT(356,+IBTRN) | 
|---|
|  | 54 | REFILLQ Q | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | PRO(DFN,IBTDT,IBPRO,IBRMARK) ; -- add prosthetic entries | 
|---|
|  | 57 | ; -- input   dfn  := patient pointer to 2 | 
|---|
|  | 58 | ;          ibetyp := pointer to type entry in 356.6 | 
|---|
|  | 59 | ;          ibtdt  := episode date | 
|---|
|  | 60 | ; | 
|---|
|  | 61 | N X,Y,DA,DR,DIE,DIC,IBETYP | 
|---|
|  | 62 | ;S IBETYP=$O(^IBE(356.6,"ACODE",4,0)) | 
|---|
|  | 63 | S IBETYP=$O(^IBE(356.6,"AC",3,0)) ;prosthetics type | 
|---|
|  | 64 | S X=$O(^IBT(356,"APRO",IBPRO,0)) I X S IBTRN=X G PROQ | 
|---|
|  | 65 | D ADDT^IBTUTL | 
|---|
|  | 66 | I IBTRN<1 G PROQ | 
|---|
|  | 67 | S DA=IBTRN,DIE="^IBT(356," | 
|---|
|  | 68 | L +^IBT(356,+IBTRN):10 I '$T G PROQ | 
|---|
|  | 69 | S DR=".02////"_$G(DFN)_";.06////"_+IBTDT_";.09////"_IBPRO_";.18////"_IBETYP_";.2////1;.24////"_$$INSURED^IBCNS1(DFN)_";1.01///NOW;1.02////"_DUZ_";.17////"_$$EABD^IBTUTL(IBETYP) | 
|---|
|  | 70 | I $G(IBRMARK)'="" S DR=DR_";.19///"_IBRMARK | 
|---|
|  | 71 | D ^DIE K DA,DR,DIE | 
|---|
|  | 72 | L -^IBT(356,+IBTRN) | 
|---|
|  | 73 | PROQ Q | 
|---|
|  | 74 | ; | 
|---|
|  | 75 | PT(DFN) ; -- format patient name - last 4 for output | 
|---|
|  | 76 | S Y="" I '$G(DFN) G PTQ | 
|---|
|  | 77 | I '$D(VA("PID")) D PID^VADPT | 
|---|
|  | 78 | S Y=$E($P($G(^DPT(DFN,0)),"^"),1,20)_" "_$E($G(^(0)),1)_VA("BID") | 
|---|
|  | 79 | PTQ Q Y | 
|---|
|  | 80 | ; | 
|---|
|  | 81 | PRODATA(IBDA) ; -- return data from prosthetics file | 
|---|
|  | 82 | N IBDA0,DA,DIC,DIE,DR | 
|---|
|  | 83 | K IBRMPR ; only one array at a time | 
|---|
|  | 84 | I '$G(IBDA) G PRODAQ | 
|---|
|  | 85 | S IBDA0=$G(^RMPR(660,+IBDA,0)) | 
|---|
|  | 86 | G:IBDA0="" PRODAQ | 
|---|
|  | 87 | DIQ S DIC="^RMPR(660,",DR=".01;1:5;7;10;12:17;24" | 
|---|
|  | 88 | S DIQ="IBRMPR",DIQ(0)="E",DA=IBDA | 
|---|
|  | 89 | D EN^DIQ1 | 
|---|
|  | 90 | PRODAQ Q | 
|---|
|  | 91 | ; | 
|---|
|  | 92 | OPTSCRN ; -- add outpatient care entries with user feedback | 
|---|
|  | 93 | ; called from OPT^IBTUTL1 which has following inputs | 
|---|
|  | 94 | ; -- input   dfn  := patient pointer to 2 | 
|---|
|  | 95 | ;          ibetyp := pointer to type entry in 356.6 | 
|---|
|  | 96 | ;          ibtdt  := episode date | 
|---|
|  | 97 | ;          enctr  := pointer to opt. encounter file (optional) | 
|---|
|  | 98 | ;        ibrmark  := text of reason not billable (optional) | 
|---|
|  | 99 | ;         ibvsit  := pointer to visit file (optional) | 
|---|
|  | 100 | ; | 
|---|
|  | 101 | N CNT,DIR,DIROUT,DIRUT,DTOUT,DUOUT,IB3560,IBACT,IBDATE,IBENC,IBETYPNM | 
|---|
|  | 102 | N IBID,IBPATNM,IBQUIT,LINE,TEMP,TMP | 
|---|
|  | 103 | ;If encounter passed in already exists in claims Tracking, remove it. | 
|---|
|  | 104 | I $D(ENCTR),$D(^IBT(356,"AENC",+DFN,+ENCTR)) S ENCTR="" | 
|---|
|  | 105 | I $G(IBETYP) S IBETYP=$O(^IBE(356.6,"AC",2,0)) | 
|---|
|  | 106 | S IBQUIT=0 | 
|---|
|  | 107 | I $O(^IBT(356,"APTY",DFN,IBETYP,IBTDT,0)) D  I X S IBTRN=X G OPTSCRNQ | 
|---|
|  | 108 | . S (CNT,LINE)=1,(TEMP,TMP,X)="" | 
|---|
|  | 109 | . S Y=IBTDT D DD^%DT S IBDATE=$E(Y_"                  ",1,18) S Y="" | 
|---|
|  | 110 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 111 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 112 | . S TMP("DIMSG",LINE)="There are match(es) for the episode date you have entered:",LINE=LINE+1 | 
|---|
|  | 113 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 114 | . S TMP("DIMSG",LINE)="   EPISODE DATE       PATIENT NAME    CT ID      TYPE     ENCOUNTER  ACTIVE",LINE=LINE+1 | 
|---|
|  | 115 | . S TMP("DIMSG",LINE)="   ------------       ------------    -----      ----     ---------  ------",LINE=LINE+1 | 
|---|
|  | 116 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 117 | . F  S X=$O(^IBT(356,"APTY",DFN,IBETYP,IBTDT,X)) Q:X=""  D | 
|---|
|  | 118 | .. S IB3560=$G(^IBT(356,X,0)) I IB3560="" Q | 
|---|
|  | 119 | .. S IBID=$P($G(IB3560),U,1) S IBID=$S(IBID="":"ID_UNKNOWN",1:$E(IBID_"          ",1,10)) | 
|---|
|  | 120 | .. S IBPATNM=$P($G(^DPT(DFN,0)),U,1) S IBPATNM=$S(IBPATNM="":"PATIENT_UNKNOWN",1:$E(IBPATNM_"               ",1,15)) | 
|---|
|  | 121 | .. S IBENC=$P($G(IB3560),U,4) S IBENC=$S(IBENC="":"NONE      ",1:$E(IBENC_"          ",1,10)) | 
|---|
|  | 122 | .. S IBACT=$S($P($G(IB3560),U,20)=1:"YES",1:"NO ") | 
|---|
|  | 123 | .. S IBETYPNM=$P($G(^IBE(356.6,IBETYP,0)),U,2) S IBETYPNM=$S(IBETYPNM="":"NONE    ",1:$E(IBETYPNM_"        ",1,8)) | 
|---|
|  | 124 | .. S TMP("DIMSG",LINE)=$E(CNT_"  ",1,3)_IBDATE_" "_IBPATNM_" "_IBID_" "_IBETYPNM_" "_IBENC_" "_IBACT | 
|---|
|  | 125 | .. S TEMP(CNT)=X_"^"_$TR(IBENC," ",""),CNT=CNT+1 | 
|---|
|  | 126 | .. S LINE=LINE+1 | 
|---|
|  | 127 | . I CNT>0 D | 
|---|
|  | 128 | .. S TMP("DIMSG",LINE+1)=$E(CNT_"  ",1,3)_"*** CREATE A NEW CLAIMS TRACKING ENTRY ***" | 
|---|
|  | 129 | .. D MSG^DIALOG("WM",,,,"TMP") | 
|---|
|  | 130 | .. S DIR(0)="NA^1:"_CNT_":0" | 
|---|
|  | 131 | .. S DIR("A")="Select a Claims Tracking entry: " | 
|---|
|  | 132 | .. S DIR("?",1)="Choose a Claims Tracking entry from the previous list to continue processing." | 
|---|
|  | 133 | .. S DIR("?")="Valid responses are 1 thru "_CNT_" or ^ to exit." | 
|---|
|  | 134 | .. D ^DIR | 
|---|
|  | 135 | .. I ($G(DTOUT))!($G(DUOUT))!($G(DIRUT))!($G(DIROUT)) S IBQUIT=1 | 
|---|
|  | 136 | .. I Y>0 S X=+$G(TEMP(Y)) I +$P($G(TEMP(Y)),U,2)>0 S ENCTR=$P($G(TEMP(Y)),U,2) | 
|---|
|  | 137 | I IBQUIT Q | 
|---|
|  | 138 | I '$G(ENCTR) D | 
|---|
|  | 139 | . N CNT,DIR,IBDATA,IBDATA1,IBDATA2,IBERR,IBMSG,IBSCRN,IBTMP,LINE,TMP,X | 
|---|
|  | 140 | . N DIOUT,DIROUT,DTOUT,DUOUT | 
|---|
|  | 141 | . S X(1)=IBTDT | 
|---|
|  | 142 | . S IBSCRN="I $P($G(^(0)),U,2)="_DFN | 
|---|
|  | 143 | . S IBMSG="IBTMP(""ENC"")" | 
|---|
|  | 144 | . S IBERR="IBTMP(""ERR"")" | 
|---|
|  | 145 | . D FIND^DIC(409.68,,,"PQX",.X,,"B",IBSCRN,,IBMSG,IBERR) | 
|---|
|  | 146 | . I +IBTMP("ENC","DILIST",0)=0 S ENCTR="" Q | 
|---|
|  | 147 | . S CNT=+IBTMP("ENC","DILIST",0)+1 | 
|---|
|  | 148 | . S (LINE,X)=0 | 
|---|
|  | 149 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 150 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 151 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 152 | . S TMP("DIMSG",LINE)="There are encounters for the episode date you have selected:",LINE=LINE+1 | 
|---|
|  | 153 | . S TMP("DIMSG",LINE)=" ",LINE=LINE+1 | 
|---|
|  | 154 | . F  S X=$O(IBTMP("ENC","DILIST",X)) Q:X=""  D | 
|---|
|  | 155 | .. S LINE=LINE+1 | 
|---|
|  | 156 | .. S IBDATA1=$P($G(IBTMP("ENC","DILIST",X,0)),"^"_IBTDT,1) | 
|---|
|  | 157 | .. S IBDATA2=$P($G(IBTMP("ENC","DILIST",X,0)),"^"_IBTDT,2) | 
|---|
|  | 158 | .. S IBDATA=$TR(IBDATA1_IBDATA2,"^"," ") | 
|---|
|  | 159 | .. S TMP("DIMSG",LINE)=$E(X_"    ",1,4)_IBDATA | 
|---|
|  | 160 | . S TMP("DIMSG",LINE+1)=$E(+IBTMP("ENC","DILIST",0)+1_"    ",1,4)_"*** CREATE A NEW CLAIMS TRACKING ENTRY WITHOUT AN ENCOUNTER ***" | 
|---|
|  | 161 | . D MSG^DIALOG("WM",,,,"TMP") | 
|---|
|  | 162 | . S DIR(0)="NA^1:"_CNT_":0" | 
|---|
|  | 163 | . S DIR("A")="Select an Encounter for the Claims Tracking entry: " | 
|---|
|  | 164 | . S DIR("?",1)="Choose an Encounter from the previous list to continue processing." | 
|---|
|  | 165 | . S DIR("?")="Valid responses are 1 thru "_CNT_" or ^ to exit." | 
|---|
|  | 166 | . D ^DIR | 
|---|
|  | 167 | . I ($G(DTOUT))!($G(DUOUT))!($G(DIRUT))!($G(DIROUT)) S IBQUIT=1 | 
|---|
|  | 168 | . I +$G(Y)<1 Q | 
|---|
|  | 169 | . S ENCTR=+$G(IBTMP("ENC","DILIST",+Y,0)) I 'ENCTR Q | 
|---|
|  | 170 | . I $D(^IBT(356,"AENC",+DFN,ENCTR)) S IBTRN=$O(^IBT(356,"AENC",+DFN,ENCTR,0)) Q | 
|---|
|  | 171 | I IBQUIT Q | 
|---|
|  | 172 | G:$G(IBTRN)'="" OPTSCRNQ | 
|---|
|  | 173 | D ADDT^IBTUTL | 
|---|
|  | 174 | S DA=IBTRN,DIE="^IBT(356," | 
|---|
|  | 175 | I IBTRN<1 G OPTSCRNQ | 
|---|
|  | 176 | L +^IBT(356,+IBTRN):10 I '$T G OPTSCRNQ | 
|---|
|  | 177 | S DR=".02////"_$G(DFN)_";.03////"_$G(IBVSIT)_";.04////"_$G(ENCTR)_";.06////"_+IBTDT_";.18////"_IBETYP_";.2////1;.24////"_$$INSURED^IBCNS1(DFN)_";1.01///NOW;1.02////"_DUZ_";.17////"_$$EABD^IBTUTL(IBETYP) | 
|---|
|  | 178 | I $G(IBRMARK)'="" S DR=DR_";.19///"_IBRMARK | 
|---|
|  | 179 | D ^DIE K DA,DR,DIE | 
|---|
|  | 180 | L -^IBT(356,+IBTRN) | 
|---|
|  | 181 | OPTSCRNQ Q | 
|---|