| [613] | 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 | 
|---|