1 | LRBEBA21 ;DALOI/JAH/FHS - PROCESS PANEL CPT CODE ;8/10/04
|
---|
2 | ;;5.2;LAB SERVICE;**291,359**;Sep 27, 1994
|
---|
3 | ;Continued LRBEBA2
|
---|
4 | ;Process panel test for CPT
|
---|
5 | ;Set 13th piece of LRSB(X) to prevent double counting
|
---|
6 | EN(LRBE21) ;LRBEAR1(LRBETST,
|
---|
7 | ;Returns LRBE21
|
---|
8 | ; 0 = process as atomic test
|
---|
9 | ; 1 = processed (or will be processed in future) as panel
|
---|
10 | N LRI,LRY,LRTST,LRNOP,LRNP,LRPEND,LRCANC,LRBSB,LRFDA,ERR,OK
|
---|
11 | N LRBECDT,LRBEEDT,LRORREFN,LRPCECNT,LRBEQTY,LRNOREQ,LRBESTG
|
---|
12 | S (LRBE21,LRPCECNT,LRNP,LRNOP,LRPEND,LRCANC)=0
|
---|
13 | I $D(LRBEAR1(LRBETST)) D
|
---|
14 | . ;must be AMA/billable panel
|
---|
15 | . Q:'($D(LRBEPAN(LRBETST)))
|
---|
16 | . S LRY=$O(^LRO(69,LRODT,1,LRSN,2,"B",LRBETST,0))
|
---|
17 | . Q:'LRY
|
---|
18 | . S LRY=LRY_","_LRSN_","_LRODT_","
|
---|
19 | . ;canceled test
|
---|
20 | . I $$GET1^DIQ(69.03,LRY,8,"I")="CA" K LRY Q
|
---|
21 | . S LRBECDT=$$GET1^DIQ(69.03,LRY,22,"I")
|
---|
22 | . I 'LRBECDT K LRY Q
|
---|
23 | . I '$G(LRBERES) S LRPCECNT=$$GET1^DIQ(69.03,LRY,11,"I")
|
---|
24 | . I LRPCECNT K LRY Q
|
---|
25 | . S LRORREFN=$$GET1^DIQ(69.03,LRY,6,"I")
|
---|
26 | . I $G(ORIEN),LRORREFN'=ORIEN K LRY Q
|
---|
27 | . ;check status of atomic tests
|
---|
28 | . S LRNOREQ=1
|
---|
29 | . S LRBSB=0 F S LRBSB=$O(LRBEAR1(LRBETST,LRBSB)) Q:'LRBSB I $G(LRIDT) D
|
---|
30 | . . ;check only 'required' atomic tests
|
---|
31 | . . Q:'$D(LRBEAR1(LRBETST,LRBSB,"R"))
|
---|
32 | . . S LRTST=+LRBEAR1(LRBETST,LRBSB,"R")
|
---|
33 | . . S X=$G(LRBESB(LRBSB)) I 'LRTST S LRTST=+$P($P(X,"^",3),"!",7)
|
---|
34 | . . I X="" S X=$G(^LR(LRDFN,LRSS,LRIDT,LRBSB)) S:(X'="") LRBESB(LRBSB)=X S:(X="") X="pending"
|
---|
35 | . . ;check for not performed tests
|
---|
36 | . . I $P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRTST,0)),U,6)="*Not Performed" S LRNP=1
|
---|
37 | . . ;check for tests already sent to pce
|
---|
38 | . . I $P(X,U,13)=1 S LRNOP=1 Q
|
---|
39 | . . ;check for cancelled tests
|
---|
40 | . . I $P(X,U,1)="canc" S LRCANC=1
|
---|
41 | . . ;check for tests still pending
|
---|
42 | . . I $P(X,U,1)="pending" S LRPEND=1
|
---|
43 | . . S LRNOREQ=0
|
---|
44 | . ;quit if any 'required' atomic tests not performed or cancelled
|
---|
45 | . Q:((LRNOREQ=0)&(LRNP!LRCANC))
|
---|
46 | . ;check for resulted tests in panel with no 'required' tests
|
---|
47 | . S OK=0
|
---|
48 | . I LRNOREQ S LRBSB=0 F S LRBSB=$O(LRBEAR1(LRBETST,LRBSB)) Q:'LRBSB!($G(LRNP)) D
|
---|
49 | . . S X=$G(LRBESB(LRBSB)),LRTST=+$P($P(X,"^",3),"!",7)
|
---|
50 | . . I $P(X,U,1)'="",$P(X,U,1)'="canc",$P(X,U,1)'="pending" S OK=1
|
---|
51 | . . ;check for not performed tests
|
---|
52 | . . I $P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRTST,0)),U,6)="*Not Performed" S LRNP=1
|
---|
53 | . ;quit if no 'required' tests on panel and no resulted tests
|
---|
54 | . Q:(LRNOREQ&'OK)
|
---|
55 | . ;if not roll-up to PCE, proceed to panel CPT;
|
---|
56 | . ;including case where none of atomic tests are 'required' (if results available)
|
---|
57 | . I '$G(LRBEROLL) D PANEL^LRBEBA4 I $O(LRBECPT(LRBETST,0)) D
|
---|
58 | . . S LRI=0 F S LRI=$O(LRBECPT(LRBETST,LRI)) Q:LRI<1 D
|
---|
59 | . . . S LRBECPT=$O(LRBECPT(LRBETST,LRI,0))
|
---|
60 | . . . S LRBEMOD=$$GMOD^LRBEBA2(LRAA,LRBECPT)
|
---|
61 | . . . S LRBEPOS=DUZ,LRBEQTY=1,LRBEDN=+$O(LRBEAR1(LRBETST,0))
|
---|
62 | . . . D GDGX^LRBEBA21(LRBETST,LRBEDN,.LRBEAR,.LRBEAR1,.LRBEDGX)
|
---|
63 | . . . S LRBESTG=LRBECPT_U_$G(LRBEMOD)_U_$G(LRBEDGX(LRBETST,1))_U_$G(LRBEDGX(LRBETST,2))_U_$G(LRBEDGX(LRBETST,3))
|
---|
64 | . . . S LRBESTG=LRBESTG_U_$G(LRBEDGX(LRBETST,4))_U_LRBECDT_U_LRBEEPRO_U_LRBEOPRO_U_LRBEQTY_U_LRBEPOS
|
---|
65 | . . . S LRBESTG=LRBESTG_U_$G(LRBEDGX(LRBETST,5))_U_$G(LRBEDGX(LRBETST,6))_U_$G(LRBEDGX(LRBETST,7))
|
---|
66 | . . . S LRBESTG=LRBESTG_U_$G(LRBEDGX(LRBETST,8))_U_LRORREFN
|
---|
67 | . . . I $G(LRBECPT(LRBETST,LRI,LRBECPT,"COUNT")) S $P(LRBESTG,U,20)=LRBECPT(LRBETST,LRI,LRBECPT,"COUNT")+1
|
---|
68 | . . . S LRBEAR(LRBEDFN,"LRBEDGX",LRI,LRBETST)=LRBESTG
|
---|
69 | ;
|
---|
70 | Q:$G(LRY)=""
|
---|
71 | ;
|
---|
72 | ;if PCE rollup, then 'unbundled' in SOP2^LRBEBA2
|
---|
73 | I $G(LRBEROLL) D Q
|
---|
74 | . K LRBECPT(LRBETST)
|
---|
75 | . ;clear 'pending panel' xref
|
---|
76 | . S LRFDA(1,69.03,LRY,22.1)=0
|
---|
77 | . D FILE^DIE("KS","LRFDA(1)","ERR")
|
---|
78 | ;
|
---|
79 | ;if no required tests on panel and panel CPT exists, at least one resulted atomic,
|
---|
80 | ;then mark panel as processed; retain LRBECPT array for BAWRK^LRBEBA;
|
---|
81 | ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
|
---|
82 | I $O(LRBECPT(LRBETST,0)),LRNOREQ D Q
|
---|
83 | . S LRBE21=1
|
---|
84 | . D LRSB
|
---|
85 | . S LRFDA(1,69.03,LRY,11)=1
|
---|
86 | . ;clear 'pending panel' xref
|
---|
87 | . S LRFDA(1,69.03,LRY,22.1)=0
|
---|
88 | . D FILE^DIE("KS","LRFDA(1)","ERR")
|
---|
89 | ;
|
---|
90 | ;if no required tests on panel and panel has no CPT or inactive CPT,
|
---|
91 | ;then return is "0" for 'unbundled' processing in SOP2^LRBEBA2
|
---|
92 | I '$O(LRBECPT(LRBETST,0)),LRNOREQ Q
|
---|
93 | ;
|
---|
94 | ;if resending (from WORK^LRBEBA4) and panel CPT determined,
|
---|
95 | ;then return "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
|
---|
96 | I $G(LRBERES)&LRNOP&('LRPEND)&($O(LRBECPT(LRBETST,0))) S LRBE21=1 Q
|
---|
97 | ;
|
---|
98 | ;if required atomic tests not performed, previously sent, or cancelled,
|
---|
99 | ;then return is "0" for 'unbundled' processing in SOP2^LRBEBA2
|
---|
100 | I (LRNP!LRNOP!LRCANC) D Q
|
---|
101 | . K LRBECPT(LRBETST)
|
---|
102 | . ;clear 'pending panel' xref
|
---|
103 | . S LRFDA(1,69.03,LRY,22.1)=0
|
---|
104 | . D FILE^DIE("KS","LRFDA(1)","ERR")
|
---|
105 | ;
|
---|
106 | ;if panel has CPT and no required atomic test still pending,
|
---|
107 | ;then mark panel as processed; retain LRBECPT array for BAWRK^LRBEBA;
|
---|
108 | ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
|
---|
109 | I $O(LRBECPT(LRBETST,0)),'LRPEND D Q
|
---|
110 | . S LRBE21=1
|
---|
111 | . D LRSB
|
---|
112 | . S LRFDA(1,69.03,LRY,11)=1
|
---|
113 | . ;clear 'pending panel' xref
|
---|
114 | . S LRFDA(1,69.03,LRY,22.1)=0
|
---|
115 | . D FILE^DIE("KS","LRFDA(1)","ERR")
|
---|
116 | ;
|
---|
117 | ;if panel has no CPT or inactive CPT, but required atomic test still pending,
|
---|
118 | ;then set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
|
---|
119 | I '$O(LRBECPT(LRBETST,0)),LRPEND D Q
|
---|
120 | . S LRBE21=1
|
---|
121 | . ;set 'pending panel' xref
|
---|
122 | . S LRFDA(1,69.03,LRY,22.1)=1
|
---|
123 | . D FILE^DIE("KS","LRFDA(1)","ERR")
|
---|
124 | ;
|
---|
125 | ;if panel has CPT, but required atomic test still pending,
|
---|
126 | ;then kill cpt to avoid transmission to PCE,
|
---|
127 | ;set return to "1" to avoid 'unbundled' processing in SOP2^LRBEBA2
|
---|
128 | I $O(LRBECPT(LRBETST,0)),LRPEND D
|
---|
129 | . S LRBE21=1
|
---|
130 | . S LRI=$O(LRBECPT(LRBETST,0)) K LRBEAR(LRBEDFN,"LRBEDGX",LRI,LRBETST)
|
---|
131 | . K LRBECPT(LRBETST)
|
---|
132 | . ;set 'pending panel' xref
|
---|
133 | . S LRFDA(1,69.03,LRY,22.1)=1
|
---|
134 | . D FILE^DIE("KS","LRFDA(1)","ERR")
|
---|
135 | ;
|
---|
136 | Q
|
---|
137 | ;
|
---|
138 | LRSB ;Set LRBESB(TEST) 13th piece to 1, counted as part of panel.
|
---|
139 | ;Set 13th piece of LRBESB(X) to prevent double counting
|
---|
140 | N LRSBX
|
---|
141 | S LRSBX=0 F S LRSBX=$O(LRBEAR1(LRBETST,LRSBX)) Q:LRSBX<1 D
|
---|
142 | . I $D(LRBESB(LRSBX))#2 S $P(LRBESB(LRSBX),U,13)=1
|
---|
143 | . I $G(LRIDT),$D(^LR(LRDFN,LRSS,LRIDT,LRSBX)) S $P(^(LRSBX),U,13)=1
|
---|
144 | Q
|
---|
145 | ;
|
---|
146 | GDGX(LRBETST,LRBEDN,LRBEAR,LRBEAR1,LRBEDGX) ; Set diagnosis LRBEDGX
|
---|
147 | N LRBEPOV,LRBEPTDT,LRBETNUM
|
---|
148 | S (LRBEPOV,LRBETNUM)="" F S LRBEPOV=$O(LRBEAR1(LRBETST,LRBEDN,LRBEPOV)) Q:'LRBEPOV D
|
---|
149 | . S LRBEPTDT=$G(LRBEAR1(LRBETST,LRBEDN,LRBEPOV))
|
---|
150 | . S LRBETNUM=$G(LRBETNUM)+1,LRBEDGX(LRBETST,LRBETNUM)=$P(LRBEPTDT,U,1)
|
---|
151 | Q:$D(LRBEDGX(LRBETST,1))
|
---|
152 | N DGX S DGX=0
|
---|
153 | F S DGX=$O(LRBEAR(LRBEDFN,"LRBEDGX",LRSAMP,LRSPEC,LRBETST,DGX)) Q:DGX<1 D
|
---|
154 | . S LRBETNUM=$G(LRBETNUM)+1,LRBEDGX(LRBETST,LRBETNUM)=DGX
|
---|
155 | Q
|
---|
156 | GOREF(LRODT,LRSN,LRBEDN,LRBEAR1,LRORREFN) ;
|
---|
157 | ;Get the OERR INTERNAL FILE #
|
---|
158 | N LRX1,LRBEIEN1,LRBETST
|
---|
159 | S LRBETST=""
|
---|
160 | F S LRBETST=$O(LRBEAR1(LRBETST)) Q:LRBETST="" D
|
---|
161 | .Q:'$D(LRBEAR1(LRBETST,LRBEDN))
|
---|
162 | .S LRX1=$O(^LRO(69,LRODT,1,LRSN,2,"B",LRBETST,0))
|
---|
163 | .I $G(LRX1) D Q
|
---|
164 | ..S LRBEIEN1=LRX1_","_LRSN_","_LRODT_","
|
---|
165 | ..S LRORREFN=$$GET1^DIQ(69.03,LRBEIEN1,6,"I")
|
---|
166 | .S LRORREFN=""
|
---|
167 | Q
|
---|
168 | ;
|
---|
169 | GMOD(LRBEAA,LRBECPT) ; Get external service modifier
|
---|
170 | ;input LRBECPT - ien to #81, not required
|
---|
171 | N DIC,LRBEESA,LRBEMOD,MOD,STAT,X,Y
|
---|
172 | S LRBEESA=$$GET1^DIQ(68,LRBEAA_",",12,"I"),LRBEMOD=""
|
---|
173 | I LRBEESA D
|
---|
174 | .S X=90,DIC="^DIC(81.3,",DIC(0)="Z" D ^DIC
|
---|
175 | .I +Y<0 K DIC Q
|
---|
176 | .S LRBEMOD=$P(Y,U,2),MOD=+Y
|
---|
177 | .;if cpt/hcpcs provided, check if modifier is valid to use
|
---|
178 | .I $G(LRBECPT) D
|
---|
179 | ..S STAT=$$MODP^ICPTMOD(LRBECPT,MOD,"I",DT)
|
---|
180 | ..I +STAT=0 S LRBEMOD=""
|
---|
181 | Q LRBEMOD
|
---|