| 1 | IBCU7A1 ;ALB/ARH - BILL PROCEDURE MANIPULATIONS (BUNDLED) ; 10-OCT-03 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**245,270**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ; | 
|---|
| 6 | BNDL(IBIFN) ; manipulate a bill's CPT codes, replace bundled codes | 
|---|
| 7 | ; on facility and profesional bills global codes should be billed using their components | 
|---|
| 8 | ; on freestanding bills component codes should be billed as global | 
|---|
| 9 | ; - on facility bill, if a global code is found in the clinical data and on the bill then | 
|---|
| 10 | ;   replace it on the bill with the institutional components | 
|---|
| 11 | ; - on professional bill, if the global code is found in the clinical data and the institutional components | 
|---|
| 12 | ;   are found on the bill then replace the institutional components with the professional components | 
|---|
| 13 | ; - on a freestanding bill if all institutional and professional components are found then | 
|---|
| 14 | ;   replace them with the global code | 
|---|
| 15 | ; maximum of 10 is insurance against infinite loops | 
|---|
| 16 | N IB0,IBCT,IBDVTY,IBTYPE,IBI,IBJ,IBLN,IBGLB,IBNLN,IBNEW,IBDEL,IBRPL,IBX,IBMSG,IBCHANGE S IBCHANGE=0 | 
|---|
| 17 | S IB0=$G(^DGCR(399,+$G(IBIFN),0)) Q:IB0="" | 
|---|
| 18 | S IBCT=$P(IB0,U,27) Q:'IBCT  S IBDVTY=$P($$RCDV^IBCRU8($P(IB0,U,22)),U,3) | 
|---|
| 19 | S IBTYPE=$S(IBDVTY=3:3,1:+IBCT) | 
|---|
| 20 | ; | 
|---|
| 21 | I +$O(^DGCR(399,+$G(IBIFN),"CP","B","94017;ICPT("),-1)<93000 Q  ; none of the bundled codes on bill | 
|---|
| 22 | ; | 
|---|
| 23 | I IBDVTY'=3 D GETSD^IBCU7U(IBIFN) ; for provider based sites global charge should be in clincal data | 
|---|
| 24 | ; | 
|---|
| 25 | ; loop through list of bundled procedures and find any on bill | 
|---|
| 26 | F IBI=1:1 S IBLN=$P($T(IPBI+IBI),";;",2) Q:IBLN=""  D | 
|---|
| 27 | . S IBGLB=$P(IBLN,":",1),IBCHANGE=0 | 
|---|
| 28 | . ; | 
|---|
| 29 | . S IBNLN=$$IPB(IBLN,IBTYPE) Q:'IBNLN  S IBNEW=$P(IBNLN,":",2),IBDEL=$P(IBNLN,":",1) | 
|---|
| 30 | . ; | 
|---|
| 31 | . I IBDVTY'=3,'$D(^UTILITY($J,"CPT-CLN",+IBGLB)) Q | 
|---|
| 32 | . ; | 
|---|
| 33 | . ; search the bill for the list of procedures to be replaced | 
|---|
| 34 | . F IBJ=1:1 S IBRPL=$$FND(IBIFN,IBDEL) Q:'IBRPL  D  Q:IBJ>10 | 
|---|
| 35 | .. ; | 
|---|
| 36 | .. I IBDVTY'=3,'$D(^UTILITY($J,"CPT-CLN",+IBGLB,+IBRPL)) Q | 
|---|
| 37 | .. S IBRPL=$P(IBRPL,U,2,999) I $L(IBRPL,U)'=$L(IBDEL,U) Q | 
|---|
| 38 | .. ; | 
|---|
| 39 | .. I +$$RPL(IBIFN,IBNEW,IBRPL) S IBCHANGE=1 ; replace procedures | 
|---|
| 40 | . ; | 
|---|
| 41 | . I +IBCHANGE S IBMSG(IBI)=$TR(IBDEL,"^",",")_" replaced by "_$TR(IBNEW,"^",",") | 
|---|
| 42 | ; | 
|---|
| 43 | I '$D(ZTQUEUED),'$G(IBAUTO),+$O(IBMSG(0)) S IBI=0 F  S IBI=$O(IBMSG(IBI)) Q:'IBI  W !,IBMSG(IBI) | 
|---|
| 44 | Q | 
|---|
| 45 | ; | 
|---|
| 46 | RPL(IBIFN,NEWCPTS,OLDLIST) ; replace procedures on the bill | 
|---|
| 47 | ; Input:  NEWCPTS - list of CPT codes to add to the bill | 
|---|
| 48 | ;         OLDLIST - list of procedure ifn's on the bill to be replaced | 
|---|
| 49 | ; Output: returns true if changes made | 
|---|
| 50 | ; the list of new and replaced may not be the same length | 
|---|
| 51 | ; - if more CPT's to be added than exist then the first existing procedure is copied for the new CPT | 
|---|
| 52 | ; - if fewer CPT's to be added than exist then the extra entries on the bill are deleted | 
|---|
| 53 | N IBJ,IBFFN,IBRFN,IBNCPT,IBFND S IBFND=0 | 
|---|
| 54 | ; | 
|---|
| 55 | S NEWCPTS=$G(NEWCPTS),OLDLIST=$G(OLDLIST),IBFFN=+OLDLIST | 
|---|
| 56 | ; | 
|---|
| 57 | F IBJ=1:1 S IBRFN=$P(OLDLIST,U,IBJ),IBNCPT=$P(NEWCPTS,U,IBJ) Q:('IBRFN)&('IBNCPT)  D  Q:'IBFND | 
|---|
| 58 | . I +IBRFN,'IBNCPT S IBFND=$$DELCPT^IBCU7U(IBIFN,IBRFN) Q | 
|---|
| 59 | . I 'IBRFN,+IBNCPT S IBFND=$$COPYCPT^IBCU7U(IBIFN,IBFFN,IBNCPT) Q | 
|---|
| 60 | . I +IBRFN,+IBNCPT S IBFND=$$EDITCPT^IBCU7U(IBIFN,IBRFN,IBNCPT) | 
|---|
| 61 | ; | 
|---|
| 62 | Q IBFND | 
|---|
| 63 | ; | 
|---|
| 64 | FND(IBIFN,LIST) ; find first set of the procedures on the bill to be replaced | 
|---|
| 65 | ; if all found then returns procedure date followed by 'CP' ifn list | 
|---|
| 66 | ; Input:  list of CPT's to be replaced separated by '^', internal format | 
|---|
| 67 | ; Output: procedure date ^ ifn of procedures in bill CP multiple | 
|---|
| 68 | N IBJ,IBC1,IBC1N,IBC1D,IBC2,IBC2N,IBC2D,IBFND,IBNLIST S (IBFND,IBNLIST)=0 I '$G(LIST) G FNDQ | 
|---|
| 69 | ; | 
|---|
| 70 | ; start with the first procedure to be replaced if it is on the bill then search for the rest on same date | 
|---|
| 71 | S IBC1=$P(LIST,U,1) | 
|---|
| 72 | S IBC1N=0 F  S IBC1N=$O(^DGCR(399,+$G(IBIFN),"CP","B",IBC1_";ICPT(",IBC1N)) Q:'IBC1N  D  Q:IBFND | 
|---|
| 73 | . S IBC1D=$P($G(^DGCR(399,IBIFN,"CP",IBC1N,0)),U,2) | 
|---|
| 74 | . S IBFND=1,IBNLIST=IBC1D_U_IBC1N | 
|---|
| 75 | . ; | 
|---|
| 76 | . ; find other procedures to be replaced for same date | 
|---|
| 77 | . F IBJ=2:1 S IBC2=$P(LIST,U,IBJ) Q:'IBC2  S IBFND=0 D  Q:'IBFND | 
|---|
| 78 | .. S IBC2N=0 F  S IBC2N=$O(^DGCR(399,IBIFN,"CP","B",IBC2_";ICPT(",IBC2N)) Q:'IBC2N  D  Q:IBFND | 
|---|
| 79 | ... S IBC2D=$P($G(^DGCR(399,IBIFN,"CP",IBC2N,0)),U,2) I IBC1D'=IBC2D S IBFND=0 Q | 
|---|
| 80 | ... S IBFND=1,IBNLIST=IBNLIST_U_IBC2N | 
|---|
| 81 | . ; | 
|---|
| 82 | . I 'IBFND S IBNLIST=0 | 
|---|
| 83 | ; | 
|---|
| 84 | FNDQ Q IBNLIST | 
|---|
| 85 | ; | 
|---|
| 86 | CHKIPB(CPT,TYPE) ; return procedures that may replace procedure passed in | 
|---|
| 87 | ; Input:  TYPE - 1 for institutional, 2 for professional, 3 for Non-Provider Based | 
|---|
| 88 | ; Output: Procedures to be replaced ':' Procedures they are replaced with | 
|---|
| 89 | N IBX,IBI,IBLN,IBRPL S IBX="",CPT=$G(CPT),TYPE=+$G(TYPE) | 
|---|
| 90 | I +TYPE,CPT>92999,CPT<94017 F IBI=1:1 S IBLN=$P($T(IPBI+IBI),";;",2) Q:IBLN=""  D  Q:+IBX | 
|---|
| 91 | . S IBRPL=$$IPB(IBLN,TYPE) I $P(IBRPL,":",1)[CPT S IBX=IBRPL | 
|---|
| 92 | Q IBX | 
|---|
| 93 | ; | 
|---|
| 94 | ; | 
|---|
| 95 | IPB(LINE,TYPE) ; return procedures to be replaced and those they are replaced by for the type of bill | 
|---|
| 96 | ; Input:  LINE - line of bundled procedures from IPBI | 
|---|
| 97 | ;         TYPE - 1 for institutional, 2 for professional, 3 for Non-Provider Based | 
|---|
| 98 | ; Output: Procedures to be replaced ':' Procedures they are replaced with | 
|---|
| 99 | ; - institutional type the global is replaced by the technical componentes | 
|---|
| 100 | ; - professional type: the institutional components are replaced by the professional components | 
|---|
| 101 | ; - non-provider based: the institutional and professional components are preplaced by the global | 
|---|
| 102 | ; | 
|---|
| 103 | N IBNEW,IBDEL,IBX S (IBX,IBDEL,IBNEW)="",TYPE=$G(TYPE),LINE=$G(LINE) | 
|---|
| 104 | I TYPE=1 S IBNEW=$P(LINE,":",2),IBDEL=$P(LINE,":",1) | 
|---|
| 105 | I TYPE=2 S IBNEW=$P(LINE,":",3),IBDEL=$P(LINE,":",2) | 
|---|
| 106 | I TYPE=3 S IBNEW=$P(LINE,":",1),IBDEL=$P(LINE,":",2)_U_$P(LINE,":",3) | 
|---|
| 107 | S IBX=IBDEL_":"_IBNEW | 
|---|
| 108 | Q IBX | 
|---|
| 109 | ; | 
|---|
| 110 | IPBI ; Facility Provider Based Replace Global by Technical Component: global:technical:professional | 
|---|
| 111 | ;;93000:93005:93010 | 
|---|
| 112 | ;;93015:93017:93016^93018 | 
|---|
| 113 | ;;93040:93041:93042 | 
|---|
| 114 | ;;93224:93225^93226:93227 | 
|---|
| 115 | ;;93230:93231^93232:93233 | 
|---|
| 116 | ;;93235:93236:93237 | 
|---|
| 117 | ;;93268:93270^93271:93272 | 
|---|
| 118 | ;;93720:93721:93722 | 
|---|
| 119 | ;;93784:93786^93788:93790 | 
|---|
| 120 | ;;94014:94015:94016 | 
|---|
| 121 | ;; | 
|---|