1 | IBATEI ;ALB/BGA - TRANSFER PRICING INPATIENT TRACKER ; 02-FEB-99
|
---|
2 | ;;2.0;INTEGRATED BILLING;**115,210**;21-MAR-94
|
---|
3 | ;; Per VHA Directive 10-93-142, this routine should not be modified
|
---|
4 | ;
|
---|
5 | ; This routine is called from ^IBAMTD and tracks all patient movements
|
---|
6 | ; as they relate to patients who are out of network.
|
---|
7 | ;
|
---|
8 | EN ; Main Entry Point
|
---|
9 | I '$P($G(^IBE(350.9,1,10)),"^",2) Q ; transfer pricing turned off
|
---|
10 | I $G(DGPMA)="",$G(DGPMP)="" Q
|
---|
11 | N DFN,IBATIEN,DA,IBRTYPE,TYPE,IBA,IBIND,IBPTF,IBDISDT,IBDISPT,IBATFILE
|
---|
12 | N IBADMDT,IBSOURCE,IBPREF,PTF,ADMIS,IBDFN,IBREST
|
---|
13 | S IBA=$P($S(DGPMA="":DGPMP,1:DGPMA),U,14) Q:IBA<1 ; iba ptr to the admission
|
---|
14 | S IBIND=IBA_";DGPM("
|
---|
15 | ; $$FINDT checks to see if the entry exist and the entry is not cancelled
|
---|
16 | S IBATIEN=$$FINDT^IBATUTL(IBIND)
|
---|
17 | I IBATIEN D G END
|
---|
18 | . S DFN=$P($G(^IBAT(351.61,+IBATIEN,0)),U,2) Q:DFN<1
|
---|
19 | . ; if the MOVEMENT admission was deleted DELETE entry from 351.61
|
---|
20 | . I DGPMA="",($P(DGPMP,U,2)=1) D Q
|
---|
21 | . . D DEL^IBATFILE(IBATIEN)
|
---|
22 | . ; if the MOVEMENT deleted a discharge reset transaction STATUS="entered"
|
---|
23 | . I DGPMA="",($P(DGPMP,U,2)=3) D Q
|
---|
24 | . . S IBATFILE=$$DISC^IBATFILE(IBATIEN)
|
---|
25 | . ; if the MOVEMENT is adding a *DISCHARGE* add the event
|
---|
26 | . I DGPMP="",($P(DGPMA,U,2)=3) D Q
|
---|
27 | . . ; Look for ptf in the parent event
|
---|
28 | . . Q:'$P(DGPMA,U,14)
|
---|
29 | . . S IBPTF=$P($G(^DGPM($P(DGPMA,U,14),0)),U,16) Q:'IBPTF
|
---|
30 | . . S IBDISDT=$P($G(^DGPT(IBPTF,70)),U)
|
---|
31 | . . Q:IBDISDT']" "
|
---|
32 | . . S IBDISPT=$P($G(^DGPM($P(DGPMA,U,14),0)),U,17) Q:'IBDISPT
|
---|
33 | . . ; PASS IN=ien 351.61,discharge dt in ptf,discharge movement
|
---|
34 | . . S IBATFILE=$$DIS^IBATFILE(IBATIEN,IBDISDT,IBPTF,IBDISPT)
|
---|
35 | . . ; <<end of update existing entry>>
|
---|
36 | . . ; [if new admission not currently being tracked added to 351.61]
|
---|
37 | I DGPMP="",($P(DGPMA,U,2)=1) D G END
|
---|
38 | . ; check to see if this is a tp $$TTP returns '0' if not TP
|
---|
39 | . Q:'$$TPP^IBATUTL($P(DGPMA,U,3))
|
---|
40 | . S IBADMDT=$P(DGPMA,U),IBSOURCE=$P(DGPMA,U,14)
|
---|
41 | . S IBPREF=$$PPF^IBATUTL($P(DGPMA,U,3)) Q:'IBPREF
|
---|
42 | . Q:IBSOURCE=""!($P(DGPMA,U,14)="")
|
---|
43 | . S IBSOURCE=IBSOURCE_";DGPM("
|
---|
44 | . S IBATFILE=$$ADM^IBATFILE($P(DGPMA,U,3),IBADMDT,IBPREF,IBSOURCE)
|
---|
45 | ;
|
---|
46 | ; Case where we have a discharge but the admission was not recorded
|
---|
47 | I DGPMP="",($P(DGPMA,U,2)=3) D G END
|
---|
48 | . Q:'$$TPP^IBATUTL($P(DGPMA,U,3))
|
---|
49 | . ; add the admission and than add the discharge
|
---|
50 | . S IBADMDT=$P(DGPMA,U),IBSOURCE=$P(DGPMA,U,14)
|
---|
51 | . S IBPREF=$$PPF^IBATUTL($P(DGPMA,U,3)) Q:'IBPREF
|
---|
52 | . Q:IBSOURCE=""!($P(DGPMA,U,14)="")
|
---|
53 | . S IBSOURCE=IBSOURCE_";DGPM("
|
---|
54 | . S IBATFILE=$$ADM^IBATFILE($P(DGPMA,U,3),IBADMDT,IBPREF,IBSOURCE)
|
---|
55 | . ; add the discharge
|
---|
56 | . Q:'$P(DGPMA,U,14)!(IBATFILE<1)
|
---|
57 | . S IBATIEN=+IBATFILE,IBPTF=$P($G(^DGPM($P(DGPMA,U,14),0)),U,16) Q:'IBPTF
|
---|
58 | . S IBDISDT=$P($G(^DGPT(IBPTF,70)),U)
|
---|
59 | . Q:IBDISDT']" "
|
---|
60 | . S IBDISPT=$P($G(^DGPM($P(DGPMA,U,14),0)),U,17) Q:'IBDISPT
|
---|
61 | . ; PASS IN=ien 351.61,discharge dt in ptf,discharge movement
|
---|
62 | . S IBATFILE=$$DIS^IBATFILE(IBATIEN,IBDISDT,IBPTF,IBDISPT)
|
---|
63 | Q
|
---|
64 | ;
|
---|
65 | FINDRT(PTF,ADMIS,IBDFN) ; Find the Rate
|
---|
66 | ;
|
---|
67 | ; Input: PTF=ien to PTF
|
---|
68 | ; ADMIS=ien to DGPM Patient Movement
|
---|
69 | ; IBDFN=ien to Patient File
|
---|
70 | ;
|
---|
71 | ; Output:
|
---|
72 | ; IBREST= if 0^ 2nd piece is error message
|
---|
73 | ; = if 1^ the rate has been calculated.
|
---|
74 | N IBATERR,IBRTYPE,IBADMDT,CHARGE,IBPREF,DISSPEC,TYPE,IBCALC,DRG
|
---|
75 | I '$G(PTF)!('$G(ADMIS))!('$G(IBDFN)) S IBREST="0^Parmeter passed in to FINDRT was less than one" Q IBREST
|
---|
76 | S IBATERR=0,IBADMDT=$P($P($G(^DGPM(+ADMIS,0)),U),".")
|
---|
77 | I IBADMDT<1 S IBREST="0^No admission date FOUND for ^dgpm ien="_ADMIS Q IBREST
|
---|
78 | S IBRTYPE=$$TYPRATE(PTF) ; returns bed or drg
|
---|
79 | I IBRTYPE["Could not find" Q IBRTYPE ;no DRG or Rate could be found
|
---|
80 | I $P(IBRTYPE,U,2)["DRG" D Q IBREST
|
---|
81 | . S DRG=$P(IBRTYPE,U)
|
---|
82 | . ; Find the home facility
|
---|
83 | . S IBPREF=$$PPF^IBATUTL(+IBDFN) I 'IBPREF S IBREST="0^No home facility found for DFN="_IBDFN Q
|
---|
84 | . ; Pass in DRG the date of the admission, the pref fac. and return
|
---|
85 | . ; CHARGE=1!0^default rate^nego rate^rate to use^tortliability rate
|
---|
86 | . S CHARGE=$$INPT^IBATCM(DRG,IBADMDT,IBPREF)
|
---|
87 | . I '$P(CHARGE,U)!$P(CHARGE,U,4)<1 S IBREST="0^Could not find a valid charge for the DRG" Q
|
---|
88 | . ; Pass in string "DRG",ien 405,DRG, DOLLAR AMOUNT)
|
---|
89 | . S IBREST=$$CALCRT("DRG",ADMIS,DRG,$P(CHARGE,U,4))
|
---|
90 | . ; if the second piece of IBVALUE is there than we have an
|
---|
91 | . ; error (need to do something) if not file away.
|
---|
92 | . ; if the filing was successful we need to set IBREST=1 and quit
|
---|
93 | . ; otherwise set IBREST="0^give reason for problem
|
---|
94 | I $P(IBRTYPE,U,2)["BED" D Q IBREST ; price and file the claim
|
---|
95 | . S IBREST=$$CALCRT("BED",ADMIS,$P(IBRTYPE,U))
|
---|
96 | ;
|
---|
97 | TYPRATE(X) ; Pass in PTF ien and return either DRG or Bedsection or ERROR
|
---|
98 | ; see if PTF has a DRG
|
---|
99 | I '$G(X) S TYPE="0^Parameter passed into TYPRATE(X) has no value" Q TYPE
|
---|
100 | N IBPTF,IBPTFD,DIC,DA,DR,DIQ,IBDISCH,IBBED
|
---|
101 | S DIC="^DGPT(",DA=X,DR=".01;71;9",DIQ="IBPTF",DIQ(0)="I" D EN^DIQ1
|
---|
102 | K DIQ(0) S DIQ="IBPTFD" D EN^DIQ1 ; i need the computed drg value
|
---|
103 | I '$D(IBPTF),('$D(IBPTFD)) S TYPE="0^Could not find PTF RECORD" Q TYPE
|
---|
104 | I $G(IBPTFD(45,DA,9))="",$G(IBPTF(45,DA,71,"I"))="" S TYPE="0^Could not find a PTF RECORD" Q TYPE
|
---|
105 | S DISSPEC=$G(IBPTF(45,DA,71,"I")) ; used in $$calc when calculating outliers
|
---|
106 | ; Below if i have a drg and the drg can be priced SELECT drg
|
---|
107 | I $G(IBPTFD(45,DA,9)),+$$INPT^IBATCM(IBPTFD(45,DA,9),IBADMDT) S TYPE=$G(IBPTFD(45,DA,9))_U_"DRG"
|
---|
108 | E D
|
---|
109 | . S IBDISCH=$G(IBPTF(45,DA,71,"I")) ;gives you the discharge speciality
|
---|
110 | . S IBBED=$P($G(^DIC(42.4,+IBDISCH,0)),U,5) ; Bedsection 399.1
|
---|
111 | . S TYPE=IBBED_U_"BED"
|
---|
112 | Q TYPE
|
---|
113 | ;
|
---|
114 | CALCRT(Z,Y,V,R) ; Calculate LOS, and price out claim.
|
---|
115 | ; INPUT:
|
---|
116 | ; Z = a string either "BED" or "DRG"
|
---|
117 | ; Y = ien for the admission movement
|
---|
118 | ; V = value either bedsection NAME or the drg NUMBER
|
---|
119 | ; R = used only with DRG and it is the dollar value of the drg.
|
---|
120 | ; OUTPUT:
|
---|
121 | ; IBCALC=" if 0^ 2nd piece is error message
|
---|
122 | ; if 1^ there are 2 possible options that can be returned
|
---|
123 | ; Option 1 - If we are calculating a Bed Section
|
---|
124 | ; 1^calculated amount^"B"
|
---|
125 | ; Option 2 - If we are calculating a DRG
|
---|
126 | ; 1^calculated amt^ien drg^los^hightrim^outlier days
|
---|
127 | ; ^bedsection rate for the outliers
|
---|
128 | ;
|
---|
129 | N X,IBBEDPTR,IBLOS,IBDATE,CALCDATE,DRGHIGH,IBBEDRT,IBDIFF,IBBED,IBOUTDT,IBBEDRT,DGPMIFN
|
---|
130 | I '$D(Z)!('$D(V))!($G(Y)<1) S IBCALC="0^parameter 'Z' is invalid" Q IBCALC
|
---|
131 | S IBCALC=0 I Z'="DRG"&(Z'="BED") S IBCALC="0^parameter is incorrect" Q IBCALC
|
---|
132 | ; calculate the LOS Y=ien for the admission movement
|
---|
133 | I '$D(^DGPM(+Y,0)) S IBCALC="0^ien "_Y_" in 405 does not exist" Q IBCALC
|
---|
134 | I Z["DRG",($G(R)<1) S IBCALC="0^the drg dollar value for ien "_Y_" was not passed in" Q IBCALC
|
---|
135 | S DGPMIFN=Y D ^DGPMLOS
|
---|
136 | I $P(X,U,5)<1 S IBCALC="0^no LOS found FOR movement "_Y Q IBCALC
|
---|
137 | E S IBLOS=$P(X,U,5)
|
---|
138 | S IBDATE=$P($P($G(^DGPM(+Y,0)),U),".") ; Date of patient movement
|
---|
139 | I Z="BED" D Q IBCALC
|
---|
140 | . ;get the pointer to the bedsection
|
---|
141 | . S IBBEDPTR=$$MCCRUTL^IBCRU1(V,5) ; 5 distinguishes bedsection in 399.1
|
---|
142 | . I IBBEDPTR<1 S IBCALC="0^could not find pointer to bedsection for name: "_V Q
|
---|
143 | . S CALCDATE=IBDATE
|
---|
144 | . ; below 1=ien to the charge set = TL-INPT(INCLUSIVE) #363.3
|
---|
145 | . S IBCALC=$$ITCHG^IBCRCI(1,IBBEDPTR,CALCDATE)
|
---|
146 | . S IBCALC=$P(IBCALC,U)
|
---|
147 | . S IBCALC=$S(IBCALC<1:"0^No rate found for bedsect "_Y,1:IBCALC)
|
---|
148 | . I IBCALC<1 Q
|
---|
149 | . S IBCALC="1^"_(IBLOS*(IBCALC*.8))_U_"B"
|
---|
150 | ;
|
---|
151 | ; (***** calculate DRG outliers here ******)
|
---|
152 | I Z="DRG" D Q IBCALC
|
---|
153 | . ; do look up calculate drg value
|
---|
154 | . S DRGHIGH=$P($$DRG^IBACSV(+V,IBDATE),U,4)
|
---|
155 | . S IBDIFF=$S(DRGHIGH:IBLOS-DRGHIGH,1:0)
|
---|
156 | . S IBCALC=R ;==DRG is calculated for the entire los except when there are high trim days
|
---|
157 | . ; if you have an outlier and you have a bedsection calc outlier
|
---|
158 | . ; disspec is the ptr to speciality from ptf set in $$typrate
|
---|
159 | . I IBDIFF>0,(DISSPEC>0) D
|
---|
160 | . . ; DISSPEC ;gives you the discharge speciality
|
---|
161 | . . S IBBED=$P($G(^DIC(42.4,+DISSPEC,0)),U,5) ; Name of Bedsection 399.1
|
---|
162 | . . S IBBEDPTR=$$MCCRUTL^IBCRU1(IBBED,5) ; Ptr to bedsection
|
---|
163 | . . S IBOUTDT=$P($G(^DGPM(+Y,0)),U)
|
---|
164 | . . S IBBEDRT=$$ITCHG^IBCRCI(1,IBBEDPTR,IBOUTDT) ; returns rate for bedsection
|
---|
165 | . . S IBBEDRT=$P(IBBEDRT,U)
|
---|
166 | . . I IBBEDRT>0 S IBBEDRT=(IBBEDRT*.8) ;**BGA-MOD 2/9/2000
|
---|
167 | . S IBCALC="1^"_IBCALC_U_V_U_IBLOS_U_DRGHIGH_U_$S(IBDIFF<1:0,1:IBDIFF)_U_$S($G(IBBEDRT)>0:IBBEDRT,1:0)
|
---|
168 | . ; All bedsections,drgs and outliers are calculated at 80% of there face value
|
---|
169 | Q IBCALC
|
---|
170 | ;
|
---|
171 | END ;
|
---|
172 | W !,"Updating Transfer Pricing has been...completed."
|
---|
173 | Q
|
---|