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