| 1 | IBCROIP ;ALB/ARH - RATES: REPORTS CHARGE ITEM: PROCEDURES ; 12/01/04
 | 
|---|
| 2 |  ;;2.0;INTEGRATED BILLING;**287**;21-MAR-94
 | 
|---|
| 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | EN ; OPTION ENTRY POINT:  Charge Item report for Procedures Only - get parameters then run the report
 | 
|---|
| 6 |  N RATES,DIVS,CPTS,IBBDT,IBEDT,IBCS,IBCS0,IBSUB,IBQUIT,IBSCRPT
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  W !!,"Procedure Charge Report: Print charges for selected CPT procedures.",!
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 |  D SELRATE(.RATES) Q:'RATES  ;  get billing rates to include
 | 
|---|
| 11 |  D SELDIVS(.DIVS) Q:DIVS<0  ;   get divisions
 | 
|---|
| 12 |  D SELCPTS(.CPTS) Q:'CPTS  ;    get list of CPT codes
 | 
|---|
| 13 |  ;
 | 
|---|
| 14 |  S IBBDT=$$GETDT^IBCRU1(DT,"Charges effective beginning on") Q:IBBDT'?7N
 | 
|---|
| 15 |  S IBEDT=$$GETDT^IBCRU1(DT,"Charges effective ending on") Q:IBEDT'?7N
 | 
|---|
| 16 |  ;
 | 
|---|
| 17 |  S IBQUIT=0 D DEV I IBQUIT G EXIT
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | RPT ; find, save, and print Charge Item report - entry for tasked jobs  DBIA #2815
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  K ^TMP($J,"IBCROI") S IBSCRPT="IBCROI"
 | 
|---|
| 22 |  ;
 | 
|---|
| 23 |  S IBCS=0 F  S IBCS=$O(^IBE(363.1,IBCS)) Q:'IBCS  D
 | 
|---|
| 24 |  . S IBCS0=$G(^IBE(363.1,IBCS,0))
 | 
|---|
| 25 |  . ;
 | 
|---|
| 26 |  . I '$D(RATES(+$P(IBCS0,U,2))) Q
 | 
|---|
| 27 |  . I DIVS'=1,+$P(IBCS0,U,7) I '$$CHKDV(+$P(IBCS0,U,7),.DIVS) Q
 | 
|---|
| 28 |  . ;
 | 
|---|
| 29 |  . S IBSUB=+$P(IBCS0,U,4)_U_$P(IBCS0,U,1) ; sort by CT and charge set name
 | 
|---|
| 30 |  . ;
 | 
|---|
| 31 |  . D GET
 | 
|---|
| 32 |  ;
 | 
|---|
| 33 |  D PRINT^IBCROI
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | EXIT D EXIT^IBCROI
 | 
|---|
| 36 |  Q
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | GET ; get charge items for selected procedures
 | 
|---|
| 40 |  N IBCPTS,IBC1,IBC2,IBCFIRST,IBCLAST,IBCNEXT,IBCIFN
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 |  S IBCPTS="" F  S IBCPTS=$O(CPTS(IBCPTS)) Q:IBCPTS=""  D
 | 
|---|
| 43 |  . I IBCPTS'?5UN1"-"5UN Q
 | 
|---|
| 44 |  . S IBC1=$P(IBCPTS,"-",1),IBCFIRST=$O(^ICPT("B",IBC1),-1)
 | 
|---|
| 45 |  . S IBC2=$P(IBCPTS,"-",2),IBCLAST=$O(^ICPT("B",IBC2))
 | 
|---|
| 46 |  . ;
 | 
|---|
| 47 |  . S IBCNEXT=IBCFIRST F  S IBCNEXT=$O(^ICPT("B",IBCNEXT)) Q:(IBCNEXT="")!(IBCNEXT=IBCLAST)  D
 | 
|---|
| 48 |  .. S IBCIFN=$O(^ICPT("B",IBCNEXT,0))
 | 
|---|
| 49 |  .. ;
 | 
|---|
| 50 |  .. D SRCHITM^IBCROI1(IBCS,IBSUB,3,IBBDT,IBEDT,IBCIFN)
 | 
|---|
| 51 |  . ;
 | 
|---|
| 52 |  . D TMPHDR^IBCROI1(IBSCRPT,IBSUB,0,"Procedure Charges","1^1",IBBDT,IBEDT)
 | 
|---|
| 53 |  Q
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 | CHKDV(RG,DIVS) ; check if Region contains a selected division (where DIVS is array of divisions)
 | 
|---|
| 56 |  N IBDV,IBSEL S IBSEL=0
 | 
|---|
| 57 |  I +$O(^IBE(363.31,+$G(RG),11,"B",0)) S IBDV=0 F  S IBDV=$O(DIVS(IBDV)) Q:'IBDV  D  Q:+IBSEL
 | 
|---|
| 58 |  . I +$O(^IBE(363.31,RG,11,"B",IBDV,0)) S IBSEL=1
 | 
|---|
| 59 |  Q IBSEL
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | SELRATE(RATES) ; get rates to review, RATES(ptr to 363.3)=Billing Rate Name returned, or RATES=0 if none selected
 | 
|---|
| 62 |  N IBN,IBX,IBY,IBCNT,IBDFLT,IBARR,DIR,DIRUT,DTOUT,DUOUT,X,Y K RATES S RATES=0
 | 
|---|
| 63 |  ;
 | 
|---|
| 64 |  S IBN="" F  S IBN=$O(^IBE(363.3,"B",IBN)) Q:IBN=""  D
 | 
|---|
| 65 |  . S IBX=0 F  S IBX=$O(^IBE(363.3,"B",IBN,IBX)) Q:'IBX  D
 | 
|---|
| 66 |  .. S IBY=$G(^IBE(363.3,IBX,0)) I $P(IBY,U,4)'=2 Q
 | 
|---|
| 67 |  .. S IBCNT=$G(IBCNT)+1
 | 
|---|
| 68 |  .. ;
 | 
|---|
| 69 |  .. I $E(IBY,1,3)="RC " S IBDFLT=$G(IBDFLT)_IBCNT_","
 | 
|---|
| 70 |  .. S IBARR(IBCNT)=IBX_U_IBN,IBARR=IBCNT
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  W !,"Select Charge Billing Rates:"
 | 
|---|
| 73 |  S IBCNT=0  F  S IBCNT=$O(IBARR(IBCNT)) Q:'IBCNT  W !,?10,IBCNT," - ",$P(IBARR(IBCNT),U,2)
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  S DIR(0)="LO^1:"_IBARR_":0",DIR("A")="Charge Rates",DIR("B")=IBDFLT D ^DIR Q:$$QUIT
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 |  F IBX=1:1:20 S IBCNT=$P(Y,",",IBX) Q:'IBCNT  S IBY=IBARR(IBCNT),RATES=$G(RATES)+1,RATES(+IBY)=$P(IBY,U,2)
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | SELDIVS(VAUTD) ; Issue prompt for Division (ALL: VAUTD=1,  SELECT: VAUTD=0, VAUTD(DV ptr)=DV Name, ELSE: VAUTD=-1)
 | 
|---|
| 82 |  N Y D PSDR^IBODIV I Y<0 K VAUTD S VAUTD=-1
 | 
|---|
| 83 |  Q
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 | SELCPTS(CPTS) ; Select CPT Codes, returned in array ranges separated by dash, external form, or CPTS=0 if none selected
 | 
|---|
| 86 |  ; will only allow ranges with matching first character because of length
 | 
|---|
| 87 |  N IBI,IBCOD,IBCOD1,IBCOD2,DIC,DIR,DIRUT,DTOUT,DUOUT,X,Y K CPTS S CPTS=0
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 |  S DIR("?")="Enter a CPT/HCPCS code or range of codes separated by a dash"
 | 
|---|
| 90 |  S DIR("A")="Select CPT/HPCS Codes",DIR(0)="FO^^"
 | 
|---|
| 91 |  ;
 | 
|---|
| 92 |  F IBI=1:1 D ^DIR Q:$$QUIT  D
 | 
|---|
| 93 |  . S IBCOD=$$UP^XLFSTR(Y),IBCOD1=$P(IBCOD,"-",1),IBCOD2=$P(IBCOD,"-",2)
 | 
|---|
| 94 |  . ;
 | 
|---|
| 95 |  . I IBCOD["-" S IBCOD1=$$LJ^XLFSTR(IBCOD1,5,0),IBCOD2=$$LJ^XLFSTR(IBCOD2,5,0)
 | 
|---|
| 96 |  . I IBCOD'["-" S IBCOD1=$P($$CPTDIC(IBCOD),U,2),IBCOD2=IBCOD1 I IBCOD1="" W ?36,"??" Q
 | 
|---|
| 97 |  . ;
 | 
|---|
| 98 |  . I (IBCOD1'?5UN)!(IBCOD2'?5UN) W ?36,"??" Q
 | 
|---|
| 99 |  . I IBCOD1'=IBCOD2,IBCOD2']IBCOD1 W ?36,IBCOD1,"-",IBCOD2," Invalid Range" Q
 | 
|---|
| 100 |  . I $E(IBCOD1,1)'=$E(IBCOD2,1) W ?36,"Range too large, first character must match" Q
 | 
|---|
| 101 |  . ;
 | 
|---|
| 102 |  . S IBCOD=IBCOD1_"-"_IBCOD2 S CPTS=$G(CPTS)+1,CPTS(IBCOD)=""
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | CPTDIC(CODE) ; inquiry on CPT code, returns null or 'internal^external'
 | 
|---|
| 107 |  N IBX,DIC,DUOUT,DTOUT,I,X,Y S IBX="" I $G(CODE)'="" S X=CODE,DIC="^ICPT(",DIC(0)="EM" D ^DIC I Y>1 S IBX=Y
 | 
|---|
| 108 |  Q IBX
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  ;
 | 
|---|
| 111 | QUIT() N IBX S IBX=0 I ($G(Y)="")!($D(DIRUT))!($D(DUOUT))!($D(DTOUT)) S IBX=1
 | 
|---|
| 112 |  Q IBX
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | DEV ; get device
 | 
|---|
| 115 |  S IBQUIT=0 S %ZIS="QM",%ZIS("A")="OUTPUT DEVICE: " D ^%ZIS I POP S IBQUIT=1 Q
 | 
|---|
| 116 |  I $D(IO("Q")) S ZTRTN="RPT^IBCROIP",ZTDESC="Charge Procedure Report",ZTSAVE("IB*")="",ZTSAVE("RATES(")="",ZTSAVE("CPTS(")="",ZTSAVE("DIVS(")="",ZTSAVE("DIVS")="" D ^%ZTLOAD K IO("Q") S IBQUIT=1
 | 
|---|
| 117 |  Q
 | 
|---|