| [613] | 1 | IBCROE ;OAK/ELZ - CHARGE MASTER TO EXCEL OUTPUT ;28-NOV-2005 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**308**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | ; This routine will produce output from Charge Master for the local site in a format that can be imported | 
|---|
|  | 6 | ; into excel. | 
|---|
|  | 7 | ; | 
|---|
|  | 8 | ; load an Inpatient and a Non-Provider based site for same zip code first | 
|---|
|  | 9 | ; | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | EN ; main option entry point | 
|---|
|  | 12 | N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT,IBRCVER,IBZIP,POP,%ZIS,IBVERS,ZTRTN,ZTDESC,ZTSAVE,ZTSK | 
|---|
|  | 13 | ; | 
|---|
|  | 14 | ;find zip code for extraction | 
|---|
|  | 15 | S DIR(0)="F^3:3^K:X'?3N X",DIR("A")="Enter a 3 digit zip identifier" | 
|---|
|  | 16 | S DIR("?")="Enter the first 3 digits of a zip code for which you want to extract data." D ^DIR Q:$D(DIRUT) | 
|---|
|  | 17 | S IBZIP=Y | 
|---|
|  | 18 | ; | 
|---|
|  | 19 | S IBVERS=$$SELVERS Q:'IBVERS | 
|---|
|  | 20 | ; | 
|---|
|  | 21 | ; find out where to write output | 
|---|
|  | 22 | W !!,"Select where you would like the output.  This will be very large and you",!,"should select either a Host File Server (HFS) printer or Current Terminal",!,"(screen capture) to save the output to a file." | 
|---|
|  | 23 | S %ZIS="QM" D ^%ZIS Q:POP | 
|---|
|  | 24 | I $D(IO("Q")) D  Q | 
|---|
|  | 25 | . S ZTRTN="DQ^IBCROE",ZTDESC="IB Reasonable Charges Extract" | 
|---|
|  | 26 | . S (ZTSAVE("IBZIP"),ZTSAVE("IBVERS"))="" | 
|---|
|  | 27 | . D ^%ZTLOAD D HOME^%ZIS K IO("Q") W !,"QUEUED TASK #",ZTSK | 
|---|
|  | 28 | ; | 
|---|
|  | 29 | ; | 
|---|
|  | 30 | DQ ; tasked entry point | 
|---|
|  | 31 | U IO D EXCEL(IBZIP,IBVERS) | 
|---|
|  | 32 | ; | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | D ^%ZISC | 
|---|
|  | 35 | S:$D(ZTQUEUED) ZTREQ="@" | 
|---|
|  | 36 | I '$D(ZTQUEUED) D HOME^%ZIS W !,"Done!" | 
|---|
|  | 37 | ; | 
|---|
|  | 38 | ; | 
|---|
|  | 39 | Q | 
|---|
|  | 40 | ; | 
|---|
|  | 41 | SELVERS() ; get version to extract from user | 
|---|
|  | 42 | N DIR,DIRUT,DTOUT,DUOUT,X,Y,IB,IBV,IBVP,IBX,IBVL | 
|---|
|  | 43 | ; use primary site to list and remove prior to version 2.0 as choices | 
|---|
|  | 44 | S IBVL=$$VERSITE^IBCRHBRV($P($$SITE^VASITE,"^",3)),IBV="" | 
|---|
|  | 45 | F X=1:1 Q:'$P(IBVL,",",X)  S:$P(IBVL,",",X)>1.9 IBV=IBV_$S($L($P(IBVL,",",X))>2:$P(IBVL,",",X),1:$P(IBVL,",",X)_".0")_"^" | 
|---|
|  | 46 | S IBV=$E(IBV,1,$L(IBV)-1) | 
|---|
|  | 47 | S IBX=0 | 
|---|
|  | 48 | W !!,"Select the version of Reasonable Charges to extract.",! | 
|---|
|  | 49 | S DIR("?")="Enter a code from the list corresponding to the version of Reasonable Charges to upload.  Must be version 2.0 or greater.  There was no version 2.2 of Reasonable Charges." | 
|---|
|  | 50 | S DIR(0)="SO^" | 
|---|
|  | 51 | F IB=1:1:$L(IBV,U) S IBVP=$P(IBV,U,IB),DIR(0)=DIR(0)_+IBVP_":RC version "_IBVP_" eff "_$$FMTE^XLFDT($$VERSDT^IBCRHBRV(+IBVP),"2Z")_" inact "_$$FMTE^XLFDT($$VERSEDT^IBCRHBRV(+IBVP),"2Z")_";" | 
|---|
|  | 52 | D ^DIR K DIR S:$L(Y)=1 Y=Y_".0" S IBX=+$S(IBV[Y:Y,1:0) | 
|---|
|  | 53 | Q IBX | 
|---|
|  | 54 | ; | 
|---|
|  | 55 | ; | 
|---|
|  | 56 | ; call at EXEL with zip and version, will print to host file the calculated charges by type | 
|---|
|  | 57 | EXCEL(ZIP,VERS) ; | 
|---|
|  | 58 | N IB2,IB3,IBZ,COL,IBBI,IBBR,IBBR0,IBCHG,IBCI,IBCI0,IBCM,IBCNT,IBCPT,IBCS,IBCS0,IBCSNM,IBCT,IBDV,IBLNZ,IBMOD,IBMODI,IBNAME,IBPB,IBRG,IBRG0,Z | 
|---|
|  | 59 | K ^TMP("IBCROE",$J) | 
|---|
|  | 60 | S IBCNT=0 | 
|---|
|  | 61 | ; | 
|---|
|  | 62 | S IBCS=0 F  S IBCS=$O(^IBE(363.1,IBCS)) Q:'IBCS  D | 
|---|
|  | 63 | . S IBCS0=$G(^IBE(363.1,IBCS,0)) | 
|---|
|  | 64 | . ; | 
|---|
|  | 65 | . S IBCSNM=$P(IBCS0,U,1) Q:$E(IBCSNM,1,3)'="RC-" | 
|---|
|  | 66 | . S IBBR=+$P(IBCS0,U,2),IBBR0=$G(^IBE(363.3,IBBR,0)) | 
|---|
|  | 67 | . S IBRG=+$P(IBCS0,U,7),IBRG0=$G(^IBE(363.31,IBRG,0)),IBDV=$P(IBRG0," ",2) | 
|---|
|  | 68 | . ; | 
|---|
|  | 69 | . I $P(IBRG0,U,2)'=ZIP Q | 
|---|
|  | 70 | . ; | 
|---|
|  | 71 | . S IBBI=$$EXPAND^IBCRU1(363.3,.04,$P(IBBR0,U,4)) | 
|---|
|  | 72 | . S IBCT=$S(IBBR0["FACILITY":"FACILITY",IBBR0["PHYSICIAN":"PHYSICIAN",1:$P(IBBR0,U,1)) | 
|---|
|  | 73 | . ; | 
|---|
|  | 74 | . I IBBI["MISC",IBCSNM'["SNF" S COL=2,IBNAME="Partial Hospitalization" | 
|---|
|  | 75 | . I IBBI["MISC",IBCSNM["SKILLED" S COL=1,IBNAME="Skilled Nursing" | 
|---|
|  | 76 | . I IBBI="DRG",IBCSNM["ANC" S COL=1,IBNAME="Inpatient Anc" I IBCSNM["ICU" S COL=COL+1,IBNAME=IBNAME_" ICU" | 
|---|
|  | 77 | . I IBBI="DRG",IBCSNM["R&B" S COL=3,IBNAME="Inpatient R&B" I IBCSNM["ICU" S COL=COL+1,IBNAME=IBNAME_" ICU" | 
|---|
|  | 78 | . ; | 
|---|
|  | 79 | . I IBBI="CPT",IBCSNM["INPT" S COL=1,IBNAME="Inpatient Facility" I IBCT="PHYSICIAN" S COL=COL+1,IBNAME="Inpatient Physician" | 
|---|
|  | 80 | . I IBBI="CPT",IBCSNM["SNF" S COL=3,IBNAME="SNF Facility" I IBCT="PHYSICIAN" S COL=COL+1,IBNAME="SNF Physician" | 
|---|
|  | 81 | . I IBBI="CPT",IBCSNM["OPT" S COL=5,IBNAME="Outpatient Facility" I IBCT="PHYSICIAN" S COL=COL+1,IBNAME="Outpatient Physician" | 
|---|
|  | 82 | . I IBBI="CPT",IBCSNM["FS" S COL=7,IBNAME="Freestanding Physician" | 
|---|
|  | 83 | . ; | 
|---|
|  | 84 | . S IBPB=$P(IBRG0,U,3),IBPB=$S(IBPB=1:"VAMC Provider Based",IBPB=2:"Opt Provider Based",IBPB=3:"Non-Provider Based",1:"Provider Based Unknown") | 
|---|
|  | 85 | . ; | 
|---|
|  | 86 | . S IBCM=$P(IBBR0,U,5),IBCM=$S(IBCM=4:"ml",IBCM=5:"mn+",IBCM=6:"hr+",1:"") | 
|---|
|  | 87 | . ; | 
|---|
|  | 88 | . S IB2(IBCS)=IBBI_U_COL_U_IBNAME_U_IBDV_U_IBPB_U_IBCM | 
|---|
|  | 89 | . S $P(IB3(IBBI),U,COL)=IBNAME_" "_IBDV_" "_IBPB | 
|---|
|  | 90 | . ; | 
|---|
|  | 91 | . S IBCNT=IBCNT+1 I IBCNT#1000=0,'$D(ZTQUEUED) U IO(0) W "." U IO | 
|---|
|  | 92 | ; | 
|---|
|  | 93 | ITEMS ; | 
|---|
|  | 94 | S IBBI="" F  S IBBI=$O(IB3(IBBI)) Q:IBBI=""  S ^TMP("IBCROE",$J,IBBI)="Item^Modifier^"_IB3(IBBI) | 
|---|
|  | 95 | ; | 
|---|
|  | 96 | S IBCI=0 F  S IBCI=$O(^IBA(363.2,IBCI)) Q:'IBCI  D | 
|---|
|  | 97 | . S IBCI0=^IBA(363.2,IBCI,0),IBCSNM=$P($G(^IBE(363.1,+$P(IBCI0,U,2),0)),U,1) Q:IBCSNM="" | 
|---|
|  | 98 | . S IBLNZ=$G(IB2($P(IBCI0,U,2))) I IBLNZ="" S IBZ("NOT DONE ",IBCSNM)="" Q | 
|---|
|  | 99 | . S IBZ("DONE",IBCSNM)="" | 
|---|
|  | 100 | . ; | 
|---|
|  | 101 | . Q:$P(IBCI0,U,3)'=$$VERSDT^IBCRHBRV(VERS) | 
|---|
|  | 102 | . ; | 
|---|
|  | 103 | . S IBCHG=$P(IBCI0,U,5)_$P(IBLNZ,U,6)_$P(IBCI0,U,8) | 
|---|
|  | 104 | . S IBMOD=$P(IBCI0,U,7) I IBMOD'="" S IBMOD=$P($$MOD^ICPTMOD(IBMOD,"I"),U,2) | 
|---|
|  | 105 | . I IBMOD="" S IBMOD=0 | 
|---|
|  | 106 | . S IBCPT=$$EXPAND^IBCRU1(363.2,.01,$P(IBCI0,U,1)) | 
|---|
|  | 107 | . ; | 
|---|
|  | 108 | . S IBBI=$P(IBLNZ,U,1) | 
|---|
|  | 109 | . S COL=$P(IBLNZ,U,2) | 
|---|
|  | 110 | . I $P($G(^TMP("IBCROE",$J,IBBI,IBCPT,IBMOD)),U,COL)'="" Q  ;DUP | 
|---|
|  | 111 | . S $P(^TMP("IBCROE",$J,IBBI,IBCPT,IBMOD),U,COL)=IBCHG | 
|---|
|  | 112 | . ; | 
|---|
|  | 113 | . S IBCNT=IBCNT+1 I IBCNT#1000=0,'$D(ZTQUEUED) U IO(0) W "." U IO | 
|---|
|  | 114 | ; | 
|---|
|  | 115 | ; | 
|---|
|  | 116 | D WRT | 
|---|
|  | 117 | K ^TMP("IBCROE",$J) | 
|---|
|  | 118 | Q | 
|---|
|  | 119 | WRT ; | 
|---|
|  | 120 | S IBBI="" F  S IBBI=$O(^TMP("IBCROE",$J,IBBI)) Q:IBBI=""  D | 
|---|
|  | 121 | . W !,^TMP("IBCROE",$J,IBBI) | 
|---|
|  | 122 | . S IBCPT="" F  S IBCPT=$O(^TMP("IBCROE",$J,IBBI,IBCPT)) Q:IBCPT=""  D | 
|---|
|  | 123 | .. S IBMOD="" F  S IBMOD=$O(^TMP("IBCROE",$J,IBBI,IBCPT,IBMOD)) Q:IBMOD=""  D | 
|---|
|  | 124 | ... S IBMODI=IBMOD I IBMOD=0 S IBMODI="" | 
|---|
|  | 125 | ... W !,IBCPT,U,IBMODI,U,^TMP("IBCROE",$J,IBBI,IBCPT,IBMOD) | 
|---|
|  | 126 | ... S IBCNT=IBCNT+1 I IBCNT#1000=0,'$D(ZTQUEUED),$E(IOST,1,2)'="C-" U IO(0) W "." U IO | 
|---|
|  | 127 | Q | 
|---|