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