| 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 |  ;;
 | 
|---|