| 1 | IBCREQ ;ALB/ARH-RATES: CM FAST ENTER/EDIT OPTION ;22-MAY-1996 | 
|---|
| 2 | ;;2.0;INTEGRATED BILLING;**52,153,167,187**;21-MAR-94 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | ENTER ; OPTION:  fast enter Tort or Interagency rates - this option requires charge sets defined as released, | 
|---|
| 6 | ; name not changed and a standard set of charges | 
|---|
| 7 | N DIR,DIRUT,DTOUT,DUOUT,X,Y,IBARR,IBRATE,IBEFDT,IBRVCD | 
|---|
| 8 | W @IOF W !!,?10,"Fast Enter of Tortiously Liable and Interagency Rates",!! | 
|---|
| 9 | ; | 
|---|
| 10 | S DIR(0)="SO^T:Tortiously Liable;I:Interagency",DIR("A")="Enter which rates" D ^DIR K DIR | 
|---|
| 11 | S IBRATE=$S(Y="T":"1^TORTIOUSLY LIABLE",Y="I":"2^INTERAGENCY",1:"") Q:'IBRATE | 
|---|
| 12 | ; | 
|---|
| 13 | S IBEFDT=$$GETDT^IBCRU1() I IBEFDT'?7N Q | 
|---|
| 14 | I +IBRATE=1 S IBRVCD=$$NPFRC Q:'IBRVCD  I '$$TORT(IBRATE,IBEFDT,.IBARR,IBRVCD) Q | 
|---|
| 15 | I +IBRATE=2 I '$$IA(IBRATE,IBEFDT,.IBARR) Q | 
|---|
| 16 | ; | 
|---|
| 17 | D DISP(IBRATE,.IBARR) Q:$D(DIRUT) | 
|---|
| 18 | I +IBRATE=2 D SET(IBRATE,.IBARR) | 
|---|
| 19 | E  D SET(IBRATE,.IBARR):'$$MT | 
|---|
| 20 | ; | 
|---|
| 21 | I IBRATE=1 D ENR^IBEMTO K IBRUN ; bill MT OPT charges awaiting the new copay rate | 
|---|
| 22 | ; | 
|---|
| 23 | Q | 
|---|
| 24 | ; | 
|---|
| 25 | TORT(IBRATE,EFDT,ARR,IBRVCD) ; find the standard charge sets for Tort rates | 
|---|
| 26 | N IBCSN,IBX K ARR S ARR=$G(EFDT),IBRVCD=$G(IBRVCD),IBX=0 | 
|---|
| 27 | S ARR(1)="INPATIENT^INPT",ARR(2)="OUTPATIENT VISIT^OPT VISIT",ARR(3)="PRESCRIPTION REFILL^RX REFILL" | 
|---|
| 28 | S ARR(4)="OUTPATIENT DENTAL^OPT DENTAL" ;ARR(5)="MT OUTPATIENT COPAYMENT^MT OPT COPAY" | 
|---|
| 29 | S IBCSN="TL-INPT (INCLUSIVE)" I '$$CS(IBRATE,IBCSN,1,1,"","(All Inclusive)",.ARR) G TORTQ | 
|---|
| 30 | S IBCSN="TL-INPT (NPF)" I '$$CS(IBRATE,IBCSN,1,2,$P(IBRVCD,U,1),"(Room,board)",.ARR) G TORTQ | 
|---|
| 31 | S IBCSN="TL-INPT (NPF)" I '$$CS(IBRATE,IBCSN,1,3,$P(IBRVCD,U,2),"(Ancillary)",.ARR) G TORTQ | 
|---|
| 32 | S IBCSN="TL-INPT (PF)" I '$$CS(IBRATE,IBCSN,1,4,"","(Physician)",.ARR) G TORTQ | 
|---|
| 33 | S IBCSN="TL-OPT VST" I '$$CS(IBRATE,IBCSN,2,1,"","",.ARR) G TORTQ | 
|---|
| 34 | S IBCSN="TL-RX FILL" I '$$CS(IBRATE,IBCSN,3,1,"","",.ARR) G TORTQ | 
|---|
| 35 | S IBCSN="TL-OPT DENTAL" I '$$CS(IBRATE,IBCSN,4,1,"","",.ARR) G TORTQ | 
|---|
| 36 | ;S IBCSN="TL-MT OPT COPAY" I '$$CS(IBRATE,IBCSN,5,1,"","",.ARR) G TORTQ | 
|---|
| 37 | S IBX=1 | 
|---|
| 38 | TORTQ I 'IBX W !!,"The Fast Enter of rates expects to find the standard rates and sets released",!,"nationally, if these are not found this option can not be used." | 
|---|
| 39 | Q IBX | 
|---|
| 40 | ; | 
|---|
| 41 | IA(IBRATE,EFDT,ARR) ; find the standard charge sets for Interagency rates | 
|---|
| 42 | N IBCSN,IBX K ARR S ARR=$G(EFDT),IBX=0 | 
|---|
| 43 | S ARR(1)="INPATIENT",ARR(2)="OUTPATIENT VISIT",ARR(3)="PRESCRIPTION REFILL",ARR(4)="OUTPATIENT DENTAL" | 
|---|
| 44 | S ARR(1)="INPATIENT^INPT",ARR(2)="OUTPATIENT VISIT^OPT VISIT",ARR(3)="PRESCRIPTION REFILL^RX REFILL",ARR(4)="OUTPATIENT DENTAL^OPT DENTAL" | 
|---|
| 45 | S IBCSN="IA-INPT" I '$$CS(IBRATE,IBCSN,1,1,"","(All Inclusive)",.ARR) G IAQ | 
|---|
| 46 | S IBCSN="IA-OPT VST" I '$$CS(IBRATE,IBCSN,2,1,"","",.ARR) G IAQ | 
|---|
| 47 | S IBCSN="IA-RX FILL" I '$$CS(IBRATE,IBCSN,3,1,"","",.ARR) G IAQ | 
|---|
| 48 | S IBCSN="IA-OPT DENTAL" I '$$CS(IBRATE,IBCSN,4,1,"","",.ARR) G IAQ | 
|---|
| 49 | S IBX=1 | 
|---|
| 50 | IAQ I 'IBX W !!,"The Fast Enter of rates expects to find the standard rates and sets released",!,"nationally, if these are not found this option can not be used." | 
|---|
| 51 | Q IBX | 
|---|
| 52 | ; | 
|---|
| 53 | CS(IBRATE,IBCSN,TYPE,ITEM,RVCD,DESC,ARR) ; accumulate standard charge sets for a rate | 
|---|
| 54 | ; check the billing rate is correct and return all relevant info | 
|---|
| 55 | ; Output:  ARR(event type) = event type name | 
|---|
| 56 | ;          ARR(event type, X) = CS name ^ CS IFN ^ default rev code ^ rev code to store ^ description of charge | 
|---|
| 57 | N IBX,IBCS,IBLN,IBERROR S (IBERROR,IBX)="" | 
|---|
| 58 | S IBCS=$O(^IBE(363.1,"B",IBCSN,0)) I +IBCS  D | 
|---|
| 59 | . S IBLN=$G(^IBE(363.1,IBCS,0)) Q:IBLN="" | 
|---|
| 60 | . I $P(IBLN,U,2)'=+IBRATE S IBERROR="*** Error:  Charge Set "_IBCSN_" is not a "_$P(IBRATE,U,2)_" rate." Q | 
|---|
| 61 | . S IBX=IBCS,ARR(TYPE,ITEM)=IBCSN_U_IBCS_U_$S($G(RVCD):RVCD,1:$P(IBLN,U,5))_U_$G(RVCD)_U_$G(DESC) | 
|---|
| 62 | I 'IBX,IBERROR="" S IBERROR="*** Error:  The Charge Set "_IBCSN_" was not found." | 
|---|
| 63 | I IBERROR'="" W !!!,IBERROR,!,"            Can not continue!" | 
|---|
| 64 | Q IBX | 
|---|
| 65 | ; | 
|---|
| 66 | SET(IBRATE,ARR) ; add/edit charges:  for each type of charge and each item, displays rev code and description | 
|---|
| 67 | ; then askes the user for bedsection and charge | 
|---|
| 68 | ; | 
|---|
| 69 | N IBEFDT,IBTYP,IBBS,IBJ,IBIT,IBLN,IBCS,IBRVCD,IBCHG,IBOCHG,IBCI,IBX,IBDFTY,DIR,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
| 70 | S IBEFDT=+ARR | 
|---|
| 71 | S IBTYP=0 F  S IBTYP=$O(ARR(IBTYP)) Q:'IBTYP  D  Q:IBBS<0 | 
|---|
| 72 | . W !!,"--------------------------------------------------------------------------------" | 
|---|
| 73 | . W !,"Enter ",$P(ARR(IBTYP),U,1)," ",$P(IBRATE,U,2)," charges effective ",$$FMTE^XLFDT(IBEFDT),":" | 
|---|
| 74 | . W !,"--------------------------------------------------------------------------------" | 
|---|
| 75 | . S IBDFTY=IBTYP | 
|---|
| 76 | . F IBJ=1:1 W ! S IBBS=$$GETBS(10,$P(ARR(IBTYP),U,2),IBDFTY) Q:IBBS<1  D  I IBTYP>1 S IBDFTY="" | 
|---|
| 77 | .. S IBIT=0 F  S IBIT=$O(ARR(IBTYP,IBIT)) Q:'IBIT  D  I $D(DUOUT) Q | 
|---|
| 78 | ... S IBLN=ARR(IBTYP,IBIT),IBCS=$P(IBLN,U,2),IBRVCD=$P(IBLN,U,4),IBOCHG="" | 
|---|
| 79 | ... S IBX=$E($P(IBBS,U,2),1,28) | 
|---|
| 80 | ... S IBX=IBX_$J("",(30-$L(IBX)))_$P(IBLN,U,5) | 
|---|
| 81 | ... S IBX=IBX_$J("",(50-$L(IBX)))_$P($G(^DGCR(399.2,+$P(IBLN,U,3),0)),U,1)_"  $ = " | 
|---|
| 82 | ... S IBCI=$$FINDCI^IBCRU4(IBCS,+IBBS,IBEFDT,"",IBRVCD) | 
|---|
| 83 | ... I +IBCI S IBOCHG=$P($G(^IBA(363.2,+IBCI,0)),U,5),DIR("B")=$FN(IBOCHG,"",2) | 
|---|
| 84 | ... S DIR("A")=IBX,DIR(0)="NAO^0:999999:2" D ^DIR K DIR S IBCHG=+Y I IBCHG<1!(IBCHG=IBOCHG) Q | 
|---|
| 85 | ... I 'IBCI S IBCI=$$ADDCI^IBCREF(IBCS,+IBBS,IBEFDT,IBCHG,IBRVCD) I +IBCI W ?74,"added" Q | 
|---|
| 86 | ... I +IBCI D EDITCI^IBCREF(+IBCI,+IBCHG) W ?74,"edited" | 
|---|
| 87 | Q | 
|---|
| 88 | ; | 
|---|
| 89 | NPFRC() ; get the default revenue codes for non-professional inpatient services | 
|---|
| 90 | ; | 
|---|
| 91 | N IBX,DIC,X,Y,DTOUT,DUOUT,IBY S IBX=0 | 
|---|
| 92 | W !!,"Enter the Revenue Code to use for all non-professional inpatient services:",! | 
|---|
| 93 | S DIC("A")="Room, Board, Nursing Services: ",DIC("B")=101,DIC("S")="I +$P(^(0),U,3)" | 
|---|
| 94 | S DIC="^DGCR(399.2,",DIC(0)="AEQ" D ^DIC I Y<1 G NPFRCQ | 
|---|
| 95 | S IBY=+Y | 
|---|
| 96 | ; | 
|---|
| 97 | S DIC("A")="Ancillary Services: ",DIC("B")=240,DIC("S")="I +$P(^(0),U,3)" | 
|---|
| 98 | S DIC="^DGCR(399.2,",DIC(0)="AEQ" D ^DIC I Y<1 G NPFRCQ | 
|---|
| 99 | S IBX=IBY_U_+Y | 
|---|
| 100 | ; | 
|---|
| 101 | NPFRCQ I 'IBX W !!,"Both of these revenue codes are required for the Inpatient Non-Professional",!,"charges to be added to bills.  Can Not Continue!",! | 
|---|
| 102 | Q IBX | 
|---|
| 103 | ; | 
|---|
| 104 | DISP(IBRATE,ARR) ; | 
|---|
| 105 | N IBTYP,IBI,IBLN | 
|---|
| 106 | W @IOF,!,$P(IBRATE,U,2)," charges effective ",$$FMTE^XLFDT(ARR)," will be added as follows:" | 
|---|
| 107 | W !,"Charge Type",?30,"Charge Set",?55,"Rev Code",!,"--------------------------------------------------------------------------------",! | 
|---|
| 108 | S IBTYP=0 F  S IBTYP=$O(ARR(IBTYP)) Q:'IBTYP  D | 
|---|
| 109 | . W $P(ARR(IBTYP),U,1) | 
|---|
| 110 | . S IBI=0 F  S IBI=$O(ARR(IBTYP,IBI)) Q:'IBI  D | 
|---|
| 111 | .. S IBLN=ARR(IBTYP,IBI) | 
|---|
| 112 | .. W ?30,$P(IBLN,U,1),?55,$P($G(^DGCR(399.2,+$P(IBLN,U,3),0)),U,1),?65,$P(IBLN,U,5),! | 
|---|
| 113 | W !,"If any of the revenue codes are incorrect then change the Default Revenue for",!,"the Charge set." W:+IBRATE=1 " (except the non-prof inpt rev codes entered above)" | 
|---|
| 114 | W !!,"If any of the Charge Sets are incorrect DO NOT USE this option." | 
|---|
| 115 | W !,"This option may NOT be used to delete rates or add zero charges." | 
|---|
| 116 | W !!,"The charges will be asked in sections based on the Charge Types listed above." | 
|---|
| 117 | W !,"The first section is INPATIENT, enter all Inpatient Bedsections and their" | 
|---|
| 118 | W !,"charges, then press return at the Select Bedsection prompt to move to the" | 
|---|
| 119 | W !,"OUTPATIENT VISIT section and enter the Outpatient Visit Bedsection and charge..." | 
|---|
| 120 | W ! S DIR(0)="E" D ^DIR K DIR | 
|---|
| 121 | Q | 
|---|
| 122 | ; | 
|---|
| 123 | GETBS(COL,PROMPT,TYPE) ; ask and return billable bedsection (399.1):  (-1 if ^, 0 if none)  IFN^.01 | 
|---|
| 124 | ; if type is inpatient then not PRESCRIPTION or OUTPATIENT bedsections can be selected | 
|---|
| 125 | ; if type is not inpatient then default bedsections are provided | 
|---|
| 126 | N IBX,DIC,DIE,DA,DR,X,Y,DTOUT,DUOUT S IBX=0 | 
|---|
| 127 | S DIC("S")="I +$P(^(0),U,5)=1" | 
|---|
| 128 | I $G(TYPE)=1 S DIC("S")=DIC("S")_",$P(^(0),U,1)'[""OUTPATIENT"",$P(^(0),U,1)'[""PRESCRIPTION""" | 
|---|
| 129 | I +$G(TYPE)>1 S DIC("B")=$S(TYPE=3:"PRESCRIPTION",TYPE=4:"OUTPATIENT DENTAL",1:"OUTPATIENT VISIT") | 
|---|
| 130 | S DIC("A")=$J("",$G(COL))_"Select "_$G(PROMPT)_" BEDSECTION: " | 
|---|
| 131 | S DIC="^DGCR(399.1,",DIC(0)="AENQ" D ^DIC K DIC | 
|---|
| 132 | I $D(DTOUT)!($D(DUOUT)) S IBX=-1 | 
|---|
| 133 | I +Y>0 S IBX=Y | 
|---|
| 134 | Q IBX | 
|---|
| 135 | ; | 
|---|
| 136 | MT() ; do the new mt rate format (misc type) eff 12/6/01 ib*2*167 | 
|---|
| 137 | N IBCS,IBTYPE,IBITEM,IBCI,IBX,IBOCHG,DIR,X,Y,IBCHG,IBERROR | 
|---|
| 138 | S IBCS=$$CSN^IBCRU3("TL-MT OPT COPAY"),(IBOCHG,IBERROR)="" | 
|---|
| 139 | I 'IBCS W !,"*** Error:  Charge set TL-MT OPT COPAY not found" Q 1 | 
|---|
| 140 | W !!,"--------------------------------------------------------------------------------" | 
|---|
| 141 | W !,"Enter MT OUTPATIENT COPAYMENT charges effective ",$$FMTE^XLFDT(IBEFDT),":" | 
|---|
| 142 | W !,"--------------------------------------------------------------------------------" | 
|---|
| 143 | F IBTYPE="BASIC CARE","SPECIALTY CARE" D  Q:$L(IBERROR) | 
|---|
| 144 | . S IBITEM=+$$ADDBI^IBCREF("MISCELLANEOUS",IBTYPE) | 
|---|
| 145 | . I 'IBITEM S IBERROR="*** Error:  Billable Item "_IBTYPE_" not found" Q | 
|---|
| 146 | . S IBX=IBTYPE_$J("",(50-$L(IBTYPE)))_"$ =" | 
|---|
| 147 | . S IBCI=$$FINDCI^IBCRU4(IBCS,+IBITEM,IBEFDT) | 
|---|
| 148 | . I +IBCI S IBOCHG=$P($G(^IBA(363.2,+IBCI,0)),U,5),DIR("B")=$FN(IBOCHG,"",2) | 
|---|
| 149 | . S DIR("A")=IBX,DIR(0)="NAO^0:999999:2" D ^DIR K DIR S IBCHG=+Y I IBCHG<1!(IBCHG=IBOCHG) Q | 
|---|
| 150 | . I 'IBCI S IBCI=$$ADDCI^IBCREF(IBCS,+IBITEM,IBEFDT,IBCHG) I +IBCI W ?74,"added" Q | 
|---|
| 151 | . I +IBCI D EDITCI^IBCREF(+IBCI,+IBCHG) W ?74,"edited" | 
|---|
| 152 | W !,IBERROR | 
|---|
| 153 | Q $L(IBERROR) | 
|---|