1 | IBATO1 ;LL/ELZ - TRANSFER PRICING REPORTS CONT. ; 18-DEC-98
|
---|
2 | ;;2.0;INTEGRATED BILLING;**115,266,389**;21-MAR-94;Build 6
|
---|
3 | ;;Per VHA Directive 2004-038, 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($P($$PIN^IBATUTL(+$P(IBA(0),"^",12)),U,2),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
|
---|