| [623] | 1 | IBATO1 ;LL/ELZ - TRANSFER PRICING REPORTS CONT. ; 18-DEC-98 | 
|---|
|  | 2 | ;;2.0;INTEGRATED BILLING;**115,266**;21-MAR-94 | 
|---|
|  | 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
|  | 4 | ; | 
|---|
|  | 5 | PAGE() ; performs page reads and returns 1 if quiting is needed | 
|---|
|  | 6 | N DIR,X,Y,DTOUT,DUOUT,DIRUT,DIROUT | 
|---|
|  | 7 | S DIR(0)="E" D ^DIR | 
|---|
|  | 8 | Q $D(DIRUT) | 
|---|
|  | 9 | NUM(X,X2,X3) ; calls to format numbers | 
|---|
|  | 10 | D COMMA^%DTC | 
|---|
|  | 11 | Q $E(X,1,$L(X)-1) | 
|---|
|  | 12 | UNIT(IBA,IBD,IBO) ; sets IBD subscripted with units for IBA | 
|---|
|  | 13 | N IBX,IBB S IBB="UNIT" | 
|---|
|  | 14 | I $P(IBA(0),"^",12)["DGPM" D  Q | 
|---|
|  | 15 | . S IBD(1,IBO,IBB)=$$EX^IBATUTL(351.61,1.01,+IBA(1)) | 
|---|
|  | 16 | I $P(IBA(0),"^",12)["PSRX(" D  Q | 
|---|
|  | 17 | . S IBD(1,IBO,IBB)=$$EX^IBATUTL(52,.01,+$P(IBA(0),"^",12)) | 
|---|
|  | 18 | I $P(IBA(0),"^",12)["RMPR" D  Q | 
|---|
|  | 19 | . S IBD(1,IBO,IBB)="PROSTHETIC" | 
|---|
|  | 20 | S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D | 
|---|
|  | 21 | . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0) | 
|---|
|  | 22 | . S IBD(IBX,IBO,IBB)="CPT"_$P($$PROC^IBATUTL(+IBX(0)),U) | 
|---|
|  | 23 | Q | 
|---|
|  | 24 | TYPE(IBA,IBO) ; sets IBO with descriptive trans type for IBA | 
|---|
|  | 25 | N IBB,IBC,IBD | 
|---|
|  | 26 | S:'$D(IBA(0)) IBA(0)=^IBAT(351.61,IBA,0) | 
|---|
|  | 27 | S IBB=$P(IBA(0),"^",12) | 
|---|
|  | 28 | I IBB["DGPM(" S IBO="INPATIENT" Q | 
|---|
|  | 29 | I IBB["PSRX(" S IBO="PHARMACY" Q | 
|---|
|  | 30 | I IBB["RMPR(660," S IBO="PROSTHETICS" Q | 
|---|
|  | 31 | D GETGEN^SDOE(+$P(IBA(0),"^",12),"IBC") | 
|---|
|  | 32 | D:$P($G(IBC(0)),"^",3) PARSE^SDOE(.IBC,"EXTERNAL","IBD") | 
|---|
|  | 33 | S IBO=$S($G(IBD(.03))="":"OUTPATINET",1:$E("OUT "_IBD(.03),1,10)) | 
|---|
|  | 34 | Q | 
|---|
|  | 35 | DES(IBA,IBD,IBO) ; sets IBD subscripted with description for IBA | 
|---|
|  | 36 | N IBX,IBB,IBDATE S IBB="UNIT DESCRIPTION" | 
|---|
|  | 37 | I $P(IBA(0),"^",12)["DGPM" D  Q | 
|---|
|  | 38 | . S IBD(1,IBO,IBB)=$E($$DRGTD^IBACSV(+IBA(1),$P(IBA(0),U,4)),1,18) | 
|---|
|  | 39 | I $P(IBA(0),"^",12)["PSRX(" D  Q | 
|---|
|  | 40 | . S IBD(1,IBO,IBB)=$E($$EX^IBATUTL(351.61,4.01,+IBA(4)),1,18) | 
|---|
|  | 41 | I $P(IBA(0),"^",12)["RMPR(660," D  Q | 
|---|
|  | 42 | . S IBD(1,IBO,IBB)=$E($$EX^IBATUTL(351.61,4.04,$P(IBA(4),"^",4)),1,18) | 
|---|
|  | 43 | S IBDATE=$P($G(^IBAT(351.61,IBIEN,0)),U,4) ; Event Date | 
|---|
|  | 44 | S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D | 
|---|
|  | 45 | . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0) | 
|---|
|  | 46 | . S IBD(IBX,IBO,IBB)=$E($P($$PROC^IBATUTL(+IBX(0),IBDATE),U,2),1,18) | 
|---|
|  | 47 | Q | 
|---|
|  | 48 | PRICE(IBA,IBD,IBO) ; sets IBD subscripted with price for IBA | 
|---|
|  | 49 | N IBX,IBB S IBB="UNIT PRICE" | 
|---|
|  | 50 | I $P(IBA(0),"^",12)["DGPM" D  Q | 
|---|
|  | 51 | . S IBD(1,IBO,IBB)=$$NUM($P(IBA(1),"^",2),2,9) | 
|---|
|  | 52 | I $P(IBA(0),"^",12)["PSRX(" D  Q | 
|---|
|  | 53 | . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",3),3,10) | 
|---|
|  | 54 | I $P(IBA(0),"^",12)["RMPR(660," D  Q | 
|---|
|  | 55 | . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",5),3,10) | 
|---|
|  | 56 | S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D | 
|---|
|  | 57 | . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0) | 
|---|
|  | 58 | . S IBD(IBX,IBO,IBB)=$$NUM($P(IBX(0),"^",3),2,9) | 
|---|
|  | 59 | Q | 
|---|
|  | 60 | QTY(IBA,IBD,IBO) ; sets IBD subscripted with quantity for IBA | 
|---|
|  | 61 | N IBX,IBB S IBB="QTY" | 
|---|
|  | 62 | I $P(IBA(0),"^",12)["DGPM" D  Q | 
|---|
|  | 63 | . S IBD(1,IBO,IBB)=$$NUM($P(IBA(1),"^",5),0,3) | 
|---|
|  | 64 | I $P(IBA(0),"^",12)["PSRX(" D  Q | 
|---|
|  | 65 | . S IBD(1,IBO,IBB)=$$NUM($P(IBA(4),"^",2),0,3) | 
|---|
|  | 66 | I $P(IBA(0),"^",12)["RMPR(660," D  Q | 
|---|
|  | 67 | . S IBD(1,IBO,IBB)=$$NUM(1,0,3) | 
|---|
|  | 68 | S IBX=0 F  S IBX=$O(^IBAT(351.61,IBA,3,IBX)) Q:IBX<1  D | 
|---|
|  | 69 | . S IBX(0)=^IBAT(351.61,IBIEN,3,IBX,0) | 
|---|
|  | 70 | . S IBD(IBX,IBO,IBB)=$$NUM($P(IBX(0),"^",2),0,3) | 
|---|
|  | 71 | Q | 
|---|
|  | 72 | COPAY(IBA) ; compute copay for iba and return | 
|---|
|  | 73 | N IBC,IBT,IBCOPAY | 
|---|
|  | 74 | S IBCOPAY=$$COPAY^IBATUTL($P(IBA(0),"^",2),$P(IBA(0),"^",12),$P($P(IBA(0),"^",9),"."),$P($P(IBA(0),"^",10),".")) | 
|---|
|  | 75 | I IBCOPAY,$P(IBA(0),"^",12)["SCE(" S (IBC,IBT)=0 F  S IBT=$O(^IBAT(351.61,"AH",$P(IBA(0),"^",2),$P(IBA(0),"^",4),IBT)) Q:IBT<1  I $P(^IBAT(351.61,IBT,0),"^",12)["SCE(" S IBC=IBC+1 | 
|---|
|  | 76 | I  S IBCOPAY=IBCOPAY/IBC | 
|---|
|  | 77 | Q $$NUM(IBCOPAY,2,7) | 
|---|
|  | 78 | ; | 
|---|
|  | 79 | VAR(IBA) ; set up required variables | 
|---|
|  | 80 | N IBX | 
|---|
|  | 81 | F IBX=0,1,4 S IBA(IBX)=$G(^IBAT(351.61,IBA,IBX)) | 
|---|
|  | 82 | Q | 
|---|
|  | 83 | PRT(IBIEN) ; main entry for report printing | 
|---|
|  | 84 | ; | 
|---|
|  | 85 | N DFN,IBXDATA,IBC,IBF,IBF1,IBF2,IBO,VA,VAERR,IBM | 
|---|
|  | 86 | ; | 
|---|
|  | 87 | D VAR(.IBIEN) | 
|---|
|  | 88 | S DFN=$P(IBIEN(0),"^",2) | 
|---|
|  | 89 | I IBPAGE=0!($Y+5>IOSL)!(IBLAST'=$P(IBIEN(0),"^",11)) S IBLAST=$P(IBIEN(0),"^",11) D PRTH Q:IBQUIT | 
|---|
|  | 90 | W ! S IBC=0 | 
|---|
|  | 91 | ; | 
|---|
|  | 92 | ; print single valued data first | 
|---|
|  | 93 | S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D | 
|---|
|  | 94 | . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC) | 
|---|
|  | 95 | . X ^IBAT(351.62,IBF1,1) | 
|---|
|  | 96 | . W IBXDATA,?IBC | 
|---|
|  | 97 | ; | 
|---|
|  | 98 | ; compute multiple valued data | 
|---|
|  | 99 | S IBM=IBC | 
|---|
|  | 100 | S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D | 
|---|
|  | 101 | . S IBF1=0,IBF1=$O(IBMUL(IBF,IBF1)) | 
|---|
|  | 102 | . X ^IBAT(351.62,IBF1,1) | 
|---|
|  | 103 | ; | 
|---|
|  | 104 | ; print multiple valued data | 
|---|
|  | 105 | S IBF=0 F  S IBF=$O(IBXDATA(IBF)) Q:IBF=""  W:IBC'=IBM ! W ?IBM S IBC=IBM D | 
|---|
|  | 106 | . S IBO=0 F  S IBO=$O(IBXDATA(IBF,IBO)) Q:IBO<1  S IBF1=0 F  S IBF1=$O(IBXDATA(IBF,IBO,IBF1)) Q:IBF1=""  D | 
|---|
|  | 107 | .. S IBF2=0,IBF2=$O(^IBAT(351.62,"B",IBF1,IBF2)) | 
|---|
|  | 108 | .. S IBF2=^IBAT(351.62,IBF2,0) | 
|---|
|  | 109 | .. S IBC=IBC+$P(IBF2,"^",2)+1 | 
|---|
|  | 110 | .. I IBC>IOM W !?5 S IBC=$P(IBF2,"^",2)+6 | 
|---|
|  | 111 | .. W IBXDATA(IBF,IBO,IBF1),?IBC | 
|---|
|  | 112 | ; | 
|---|
|  | 113 | ; clean up | 
|---|
|  | 114 | X ^IBAT(351.62,999,1) | 
|---|
|  | 115 | ; | 
|---|
|  | 116 | Q | 
|---|
|  | 117 | EXPRT(IBIEN) ; main entry for excel printing | 
|---|
|  | 118 | ; | 
|---|
|  | 119 | N DFN,IBXDATA,IBF,IBF1,IBF2,IBO,VA,VAERR | 
|---|
|  | 120 | ; | 
|---|
|  | 121 | D VAR(.IBIEN) | 
|---|
|  | 122 | S DFN=$P(IBIEN(0),"^",2) | 
|---|
|  | 123 | ; | 
|---|
|  | 124 | ; do single if no multiple | 
|---|
|  | 125 | I '$D(IBMUL) D EXSING() W ! X ^IBAT(351.62,999,1) Q | 
|---|
|  | 126 | ; | 
|---|
|  | 127 | ; compute multiple valued data | 
|---|
|  | 128 | S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D | 
|---|
|  | 129 | . S IBF1=0,IBF1=$O(IBMUL(IBF,IBF1)) | 
|---|
|  | 130 | . X ^IBAT(351.62,IBF1,1) | 
|---|
|  | 131 | ; | 
|---|
|  | 132 | ; print multiple valued data | 
|---|
|  | 133 | S IBF=0 F  S IBF=$O(IBXDATA(IBF)) Q:IBF=""  D EXSING(IBF) D | 
|---|
|  | 134 | . S IBO=0 F  S IBO=$O(IBXDATA(IBF,IBO)) Q:IBO<1  S IBF1=0 F  S IBF1=$O(IBXDATA(IBF,IBO,IBF1)) Q:IBF1=""  D | 
|---|
|  | 135 | .. S IBF2=0,IBF2=$O(^IBAT(351.62,"B",IBF1,IBF2)) | 
|---|
|  | 136 | .. S IBF2=^IBAT(351.62,IBF2,0) | 
|---|
|  | 137 | .. W $$STRIP(IBXDATA(IBF,IBO,IBF1),IBF2),"|" | 
|---|
|  | 138 | . W ! | 
|---|
|  | 139 | ; | 
|---|
|  | 140 | ; clean up | 
|---|
|  | 141 | X ^IBAT(351.62,999,1) | 
|---|
|  | 142 | ; | 
|---|
|  | 143 | Q | 
|---|
|  | 144 | STRIP(A,B) ; strips off junk from numbers | 
|---|
|  | 145 | Q $S($P(B,"^",5):+$TR(A,", "),1:A) | 
|---|
|  | 146 | ; | 
|---|
|  | 147 | EXSING(IBF) ; print single valued data first | 
|---|
|  | 148 | S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D | 
|---|
|  | 149 | . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC) | 
|---|
|  | 150 | . X ^IBAT(351.62,IBF1,1) | 
|---|
|  | 151 | . W $$STRIP(IBXDATA,IBF1(0)),"|" | 
|---|
|  | 152 | Q | 
|---|
|  | 153 | ; | 
|---|
|  | 154 | PRTH ; header | 
|---|
|  | 155 | S IBC=0 | 
|---|
|  | 156 | D HEAD^IBATO($P(IBIEN(0),"^",11)) Q:IBQUIT | 
|---|
|  | 157 | W ! | 
|---|
|  | 158 | S IBF=0 F  S IBF=$O(IBFIELD(IBF)) Q:IBF<1  D | 
|---|
|  | 159 | . D PRTG(.IBFIELD,.IBF,.IBF1,.IBC) | 
|---|
|  | 160 | . W $P(IBF1(0),"^"),?IBC | 
|---|
|  | 161 | ; | 
|---|
|  | 162 | ; multiple part of header | 
|---|
|  | 163 | S IBF=0 F  S IBF=$O(IBMUL(IBF)) Q:IBF<1  D | 
|---|
|  | 164 | . D PRTG(.IBMUL,.IBF,.IBF1,.IBC) | 
|---|
|  | 165 | . W $P(IBF1(0),"^"),?IBC | 
|---|
|  | 166 | ; | 
|---|
|  | 167 | W ! F IBC=1:1:IOM W "-" | 
|---|
|  | 168 | Q | 
|---|
|  | 169 | PRTG(X,Y,Z,C) ; general printing stuff | 
|---|
|  | 170 | S Z=0,Z=$O(X(Y,Z)) | 
|---|
|  | 171 | S Z(0)=X(Y,Z) | 
|---|
|  | 172 | I $D(C) S C=C+$P(Z(0),"^",2)+1 I C>IOM W !?5 S C=$P(Z(0),"^",2)+6 | 
|---|
|  | 173 | Q | 
|---|
|  | 174 | SEL(B) ; selection of which fields B = default | 
|---|
|  | 175 | ; sets up variables IBFIELD and IBMUL | 
|---|
|  | 176 | ; returns max length of output | 
|---|
|  | 177 | ; | 
|---|
|  | 178 | N DTOUT,DUOUT,DIRUT,DIROUT,DIR,W,X,Y,Z,IBR,IBM | 
|---|
|  | 179 | S (IBR,IBM)=0 | 
|---|
|  | 180 | ; | 
|---|
|  | 181 | AGAIN S DIR(0)="LAO^1:98",DIR("A")="Which fields: "_$S($D(B):B_"//",1:"") | 
|---|
|  | 182 | S DIR("?")="Select what fields you want printed. Ranges must start with a valid number." | 
|---|
|  | 183 | D ^DIR Q:$D(DTOUT)!($D(DUOUT))!($D(DIROUT)) 0 | 
|---|
|  | 184 | ; | 
|---|
|  | 185 | ; if default selected set Y | 
|---|
|  | 186 | S:Y="" Y=$G(B) | 
|---|
|  | 187 | ; | 
|---|
|  | 188 | ; validate input | 
|---|
|  | 189 | I '$D(^IBAT(351.62,"AC",+Y)) W *7,"??" G AGAIN | 
|---|
|  | 190 | F X=1:1 Q:$P(Y,",",X)=""  S:'$D(^IBAT(351.62,"AC",$P(Y,",",X))) Y=$P(Y,",",1,X-1)_","_$P(Y,",",X+1,98),X=X-1 | 
|---|
|  | 191 | ; | 
|---|
|  | 192 | ; setup variables for output | 
|---|
|  | 193 | F X=1:1 Q:'$P(Y,",",X)  S W=+$P($Q(^IBAT(351.62,"AC",$P(Y,",",X))),",",4),Z=^IBAT(351.62,W,0),IBR=$S($P(Z,"^",3):"IBMUL",1:"IBFIELD"),@(IBR_"("_X_","_W_")")=Z,@IBR=$G(@IBR)+$P(Z,"^",2)+1 | 
|---|
|  | 194 | ; | 
|---|
|  | 195 | Q $G(IBFIELD)+$G(IBMUL) | 
|---|
|  | 196 | ; | 
|---|
|  | 197 | DISP ; displays fields for selection | 
|---|
|  | 198 | ; | 
|---|
|  | 199 | N IBX,IBL,IBI | 
|---|
|  | 200 | ; | 
|---|
|  | 201 | ; set up lines | 
|---|
|  | 202 | S (IBX,IBL)=0 F  S IBX=$O(^IBAT(351.62,"AC",IBX)),IBL=IBL+1 Q:IBX<1  S:IBX=40 IBL=1 S IBI=+$P($Q(^IBAT(351.62,"AC",IBX)),",",4),IBL(IBL,$S(IBX<40:0,1:40))=^IBAT(351.62,IBI,0) | 
|---|
|  | 203 | ; | 
|---|
|  | 204 | ; display lines | 
|---|
|  | 205 | W @IOF,!,"Select the fields you would like printed on this report, in the order you",!,"want them printed.  Fields with an asterisk (*) are fields that are multiples.",! | 
|---|
|  | 206 | S IBX="" F  S IBX=$O(IBL(IBX)) Q:IBX=""  W ! S IBI="" F  S IBI=$O(IBL(IBX,IBI)) Q:IBI=""  W ?IBI,$P(IBL(IBX,IBI),"^",4),?IBI+4,$S($P(IBL(IBX,IBI),"^",3):"*",1:""),$P(IBL(IBX,IBI),"^") | 
|---|
|  | 207 | ; | 
|---|
|  | 208 | W ! | 
|---|
|  | 209 | ; | 
|---|
|  | 210 | Q | 
|---|