[613] | 1 | LRBEECPT ;DALOI/JAH - Edit CPT associated with CIDC; 3/29/05
|
---|
| 2 | ;;5.2;LAB SERVICES;**291**;Sep 27, 1994
|
---|
| 3 | ;
|
---|
| 4 | ; To be able to provide a clean claim to the billing application, there
|
---|
| 5 | ; needs be an association between the test, the specimen, and the
|
---|
| 6 | ; CPT/HCPCS codes. This routine is designed to allow the user to define
|
---|
| 7 | ; this associaton.
|
---|
| 8 | ;
|
---|
| 9 | ; Reference to EN^DDIOL supported by IA #10142
|
---|
| 10 | ; Reference to ^DIC supported by IA #10006
|
---|
| 11 | ; Reference to $$GET1^DIQ supported by IA #2056
|
---|
| 12 | ; Reference to ^DIR supported by IA #10026
|
---|
| 13 | ; Reference to $$CPT^ICPTCOD Supported by DBIA #1995-A
|
---|
| 14 | ;
|
---|
| 15 | STRT ; Start the routine
|
---|
| 16 | N DIC,DIR,X,Y,LRBEY,LRBEQUIT,LRBEPNL
|
---|
| 17 | N LRBEAR,LRBEAR2,LRBEARP,LRBETST,LRBETSTN,LRBEMSG
|
---|
| 18 | S LRBEQUIT=0
|
---|
| 19 | F D Q:LRBEQUIT
|
---|
| 20 | .D TST S:Y<1 LRBEQUIT=1 Q:LRBEQUIT
|
---|
| 21 | .D EN^DDIOL("","","!")
|
---|
| 22 | .S DIR(0)="E" D ^DIR S:Y<1 LRBEQUIT=1
|
---|
| 23 | .D EN^DDIOL("","","!")
|
---|
| 24 | .D KLL
|
---|
| 25 | Q
|
---|
| 26 | TST ; Ask the user for the test to work on.
|
---|
| 27 | S DIC="^LAB(60,",DIC(0)="AEMQZ" D ^DIC
|
---|
| 28 | I Y=-1 K DIC Q ;quit if look-up fails
|
---|
| 29 | S LRBEPNL=0
|
---|
| 30 | I $P(Y(0),"^",5)="" S LRBEPNL=1 ;Selected test is a panel
|
---|
| 31 | S LRBEY=Y D WORK(LRBEY) Q:LRBEQUIT
|
---|
| 32 | Q
|
---|
| 33 | WORK(LRBEY) ; Start getting the CPT/HCPCS Codes
|
---|
| 34 | S LRBETST=$P(LRBEY,U,1),LRBETSTN=$P(LRBEY,U,2)
|
---|
| 35 | S LRBEAR2("TEST",LRBETST)=LRBEY
|
---|
| 36 | W ! D SPEC(LRBETST) Q:LRBEQUIT
|
---|
| 37 | W ! D DEFH(LRBETST,LRBETSTN) Q:LRBEQUIT
|
---|
| 38 | W ! D DEFC(LRBETST,LRBETSTN) Q:LRBEQUIT
|
---|
| 39 | I LRBEPNL D Q:LRBEQUIT
|
---|
| 40 | .W ! D AAMA^LRBEECP1(LRBETST,LRBETSTN)
|
---|
| 41 | D DISCPT(.LRBEAR2) Q:LRBEQUIT
|
---|
| 42 | Q
|
---|
| 43 | SPEC(LRBETST) ; Get the Specimen and CPT of the Test
|
---|
| 44 | N A,LRBEAX,LRBESP,LRBESPI,LRBESPE,LRBECPT,LRBEFIL,LRBEFLD,LRBEDT,LRBEMSG
|
---|
| 45 | N LRBEQT,LRBEXMSG,LRBEDCPT,LRX,LRBEDESC
|
---|
| 46 | D SAR(LRBETST,.LRX)
|
---|
| 47 | S A="" F S A=$O(LRX(60.196,A)) Q:A=""!(LRBEQUIT) D
|
---|
| 48 | .S LRBESP=$O(LRX(60.196,A,""),-1)
|
---|
| 49 | .S LRBESPI=$P(A,",",1)
|
---|
| 50 | .S LRBESPE=$P($G(LRX(60.196,A,LRBESP)),"^",1)
|
---|
| 51 | .S LRBEDCPT=$P($G(LRX(60.196,A,LRBESP)),"^",2)
|
---|
| 52 | .S LRBEQT=0 F D Q:LRBEQT!(LRBEQUIT)
|
---|
| 53 | ..S LRBEMSG="Enter a CPT for a "_LRBESPE_" specimen: "
|
---|
| 54 | ..S LRBECPT=$$ACPT(LRBEMSG,LRBEDCPT) Q:LRBEQUIT
|
---|
| 55 | ..I LRBEDCPT="",LRBECPT="@" D WMSG("","ND") Q
|
---|
| 56 | ..I LRBECPT=LRBEDCPT S LRBEQT=1 Q:LRBEQT
|
---|
| 57 | ..S:LRBECPT="" LRBEQT=1 Q:LRBEQT
|
---|
| 58 | ..I $P(LRBECPT,U,1)="@" D Q
|
---|
| 59 | ...S LRBEDESC=$$GET1^DIQ(81,LRBEDCPT_",",2)
|
---|
| 60 | ...S LRBECPT=LRBECPT_"^"_LRBEDCPT_"^"_LRBEDESC_"^"
|
---|
| 61 | ...S LRBECPT=LRBECPT_LRBESP_","_LRBESPI_","_LRBETST_","
|
---|
| 62 | ...S LRBEAR2("TEST",LRBETST,"00-SPECIMEN",LRBESPI)=LRBECPT,LRBEQT=1
|
---|
| 63 | ...S $P(LRBEAR2("TEST",LRBETST,"00-SPECIMEN",LRBESPI,"S"),U,1)=LRBESPE
|
---|
| 64 | ..S LRBEDT=$$ADAT("TODAY") Q:LRBEQUIT
|
---|
| 65 | ..S LRBEAX=$$GCPT(LRBECPT,LRBEDT) Q:LRBEQUIT
|
---|
| 66 | ..I +LRBEAX=-1 D WMSG($P(LRBEAX,U,2),"IV") Q
|
---|
| 67 | ..I $P(LRBEAX,U,7)'=1 D WMSG("INACTIVE","IA") Q
|
---|
| 68 | ..D WMSG($P(LRBEAX,U,3),"V")
|
---|
| 69 | ..S $P(LRBEAR2("TEST",LRBETST,"00-SPECIMEN",LRBESPI),U,1)=LRBEAX,LRBEQT=1
|
---|
| 70 | ..S LRBEAX=LRBESPE_"^"_LRBEDT
|
---|
| 71 | ..S $P(LRBEAR2("TEST",LRBETST,"00-SPECIMEN",LRBESPI,"S"),U,1)=LRBESPE
|
---|
| 72 | ..S $P(LRBEAR2("TEST",LRBETST,"00-SPECIMEN",LRBESPI,"D"),U,1)=LRBEDT
|
---|
| 73 | Q
|
---|
| 74 | DEFH(LRBETST,LRBETSTN) ; Get the Default HCPCS
|
---|
| 75 | N LRBEAX,LRBEQT
|
---|
| 76 | S LRBEQT=0 F D Q:LRBEQT!(LRBEQUIT)
|
---|
| 77 | .S LRBEAX=$$DHCPCS(LRBETST,LRBETSTN)
|
---|
| 78 | .S:LRBEAX="" LRBEQT=1 Q:LRBEQT!(LRBEQUIT)
|
---|
| 79 | .I +LRBEAX=-3 D WMSG("","ND") Q
|
---|
| 80 | .I $P(LRBEAX,U,1)="@" D Q
|
---|
| 81 | ..S LRBEAR2("TEST",LRBETST,"01-DEFAULT HCPCS")=LRBEAX,LRBEQT=1
|
---|
| 82 | .I +LRBEAX=-2 S LRBEQT=1 Q:LRBEQT
|
---|
| 83 | .I +LRBEAX=-1 D WMSG($P(LRBEAX,U,2),"IV") Q
|
---|
| 84 | .I $P(LRBEAX,U,7)'=1 D WMSG("INACTIVE","IA") Q
|
---|
| 85 | .D WMSG($P(LRBEAX,U,3),"V")
|
---|
| 86 | .S LRBEAR2("TEST",LRBETST,"01-DEFAULT HCPCS")=LRBEAX,LRBEQT=1
|
---|
| 87 | Q
|
---|
| 88 | DHCPCS(LRBETST,LRBETSTN) ; Get the Default HCPCS code of the Test
|
---|
| 89 | N LRBECPT,LRBEDCPT,LRBEDT,LRBEMSG,LRBEFIL,LRBEFLD,LRBEQT,LRBEDESC
|
---|
| 90 | S LRBEMSG="Enter a HCPCS code for "_LRBETSTN_": "
|
---|
| 91 | S LRBEFIL=60,LRBEFLD=507
|
---|
| 92 | S LRBEDCPT=$$GET1^DIQ(LRBEFIL,LRBETST_",",LRBEFLD)
|
---|
| 93 | S LRBECPT=$$ACPT(LRBEMSG,LRBEDCPT) Q:LRBEQUIT LRBEQUIT
|
---|
| 94 | I LRBECPT="" Q LRBECPT
|
---|
| 95 | I LRBEDCPT="",LRBECPT="@" Q -3
|
---|
| 96 | I LRBECPT="@" D Q LRBECPT
|
---|
| 97 | .S LRBEDESC=$$GET1^DIQ(81,LRBEDCPT_",",2)
|
---|
| 98 | .S LRBECPT=LRBECPT_"^"_LRBEDCPT_"^"_LRBEDESC
|
---|
| 99 | I LRBECPT=LRBEDCPT Q -2
|
---|
| 100 | S LRBEDT=$$ADAT("TODAY") Q:LRBEQUIT LRBEQUIT
|
---|
| 101 | S $P(LRBEAR2("TEST",LRBETST,"01-DEFAULT HCPCS","D"),U,1)=LRBEDT
|
---|
| 102 | Q $$GCPT(LRBECPT,LRBEDT)
|
---|
| 103 | DEFC(LRBETST,LRBETSTN) ; Get the Default CPT
|
---|
| 104 | N LRBEAX,LRBEQT
|
---|
| 105 | S LRBEQT=0 F D Q:LRBEQT!(LRBEQUIT)
|
---|
| 106 | .S LRBEAX=$$DCPT(LRBETST,LRBETSTN)
|
---|
| 107 | .S:LRBEAX="" LRBEQT=1 Q:LRBEQT!(LRBEQUIT)
|
---|
| 108 | .I +LRBEAX=-3 D WMSG("","ND") Q
|
---|
| 109 | .I $P(LRBEAX,U,1)="@" D Q
|
---|
| 110 | ..S LRBEAR2("TEST",LRBETST,"02-DEFAULT CPT")=LRBEAX,LRBEQT=1
|
---|
| 111 | .I +LRBEAX=-2 S LRBEQT=1 Q:LRBEQT
|
---|
| 112 | .I +LRBEAX=-1 D WMSG($P(LRBEAX,U,2),"IV") Q
|
---|
| 113 | .I $P(LRBEAX,U,7)'=1 D WMSG("INACTIVE","IA") Q
|
---|
| 114 | .D WMSG($P(LRBEAX,U,3),"V")
|
---|
| 115 | .S LRBEAR2("TEST",LRBETST,"02-DEFAULT CPT")=LRBEAX,LRBEQT=1
|
---|
| 116 | Q
|
---|
| 117 | DCPT(LRBETST,LRBETSTN) ; Get the Default CPT code of the Test
|
---|
| 118 | N LRBECPT,LRBEDCPT,LRBEDT,LRBEMSG,LRBEFIL,LRBEFLD,LRBEQT,LRBEDESC
|
---|
| 119 | S LRBEMSG="Enter a Default CPT code for "_LRBETSTN_": "
|
---|
| 120 | S LRBEFIL=60,LRBEFLD=506
|
---|
| 121 | S LRBEDCPT=$$GET1^DIQ(LRBEFIL,LRBETST_",",LRBEFLD)
|
---|
| 122 | S LRBECPT=$$RCPT(LRBEMSG,LRBEDCPT) Q:LRBEQUIT LRBEQUIT
|
---|
| 123 | I LRBECPT="" Q LRBECPT
|
---|
| 124 | I LRBEDCPT="",LRBECPT="@" Q -3
|
---|
| 125 | I LRBECPT="@" D Q LRBECPT
|
---|
| 126 | .S LRBEDESC=$$GET1^DIQ(81,LRBEDCPT_",",2)
|
---|
| 127 | .S LRBECPT=LRBECPT_"^"_LRBEDCPT_"^"_LRBEDESC
|
---|
| 128 | I LRBECPT=LRBEDCPT Q -2
|
---|
| 129 | S LRBEDT=$$ADAT("TODAY") Q:LRBEQUIT LRBEQUIT
|
---|
| 130 | S $P(LRBEAR2("TEST",LRBETST,"02-DEFAULT CPT","D"),U,1)=LRBEDT
|
---|
| 131 | Q $$GCPT(LRBECPT,LRBEDT)
|
---|
| 132 | ACPT(LRBEMSG,DCPT) ; Ask for CPT/HCPCS Code
|
---|
| 133 | N X,Y,DIR,DUOUT,DTOUT,DIRUT
|
---|
| 134 | S DIR("B")=DCPT
|
---|
| 135 | S DIR("A")=LRBEMSG,DIR(0)="FAUO^3:10" D ^DIR
|
---|
| 136 | I $D(DTOUT)!($D(DUOUT))!(X[U) S LRBEQUIT=1 Q LRBEQUIT
|
---|
| 137 | I Y?1A.4N Q Y
|
---|
| 138 | I X="@" Q X
|
---|
| 139 | S:Y<1 Y=""
|
---|
| 140 | Q Y
|
---|
| 141 | ADAT(LRBEMSG) ; Ask for date
|
---|
| 142 | N X,Y,DIR,DUOUT,DTOUT,DIRUT
|
---|
| 143 | D NOW^%DTC
|
---|
| 144 | S DIR(0)="DAO^"_X_"::E",DIR("B")=LRBEMSG
|
---|
| 145 | S DIR("A")="Enter Date to be Checked: "
|
---|
| 146 | D ^DIR I $D(DTOUT)!($D(DUOUT)) S Y=-1,LRBEQUIT=1
|
---|
| 147 | Q Y_"."_$P(%,".",2)
|
---|
| 148 | RCPT(LRBEMSG,DCPT) ; Ask for Required default CPT/HCPCS Code
|
---|
| 149 | N X,Y,DIR,DUOUT,DTOUT,DIRUT
|
---|
| 150 | S DIR("B")=DCPT
|
---|
| 151 | S DIR("A")=LRBEMSG,DIR(0)="FAUO^3:10" D ^DIR
|
---|
| 152 | I $D(DTOUT)!($D(DUOUT))!(X[U) S LRBEQUIT=1 Q LRBEQUIT
|
---|
| 153 | I X="@" Q X
|
---|
| 154 | S:Y<1 Y=""
|
---|
| 155 | Q Y
|
---|
| 156 | GCPT(CPT,TDAT) ; Get the CPT/HCPCS Code
|
---|
| 157 | Q $$CPT^ICPTCOD(CPT,TDAT)
|
---|
| 158 | DISCPT(LRBEAR2) ; Display the CPT code in File #60
|
---|
| 159 | N LRBEAX,LRBEALO,LRBEBX,DIR,LRBEQT,X,Y
|
---|
| 160 | S LRBEQT=0 D EN^DDIOL("","","!!")
|
---|
| 161 | S LRBEAX="" F S LRBEAX=$O(LRBEAR2("TEST",LRBEAX)) Q:LRBEAX=""!(LRBEQT) D
|
---|
| 162 | .I $D(LRBEAR2("TEST",LRBEAX))'=11 S LRBEQT=1 Q:LRBEQT
|
---|
| 163 | .S LRBEALO=1
|
---|
| 164 | .D EN^DDIOL("TEST:","","")
|
---|
| 165 | .D EN^DDIOL($E($P(LRBEAR2("TEST",LRBEAX),U,2),1,30),"","?10")
|
---|
| 166 | .S LRBEBX="" F S LRBEBX=$O(LRBEAR2("TEST",LRBEAX,"00-SPECIMEN",LRBEBX)) Q:LRBEBX="" D
|
---|
| 167 | ..S X=$G(LRBEAR2("TEST",LRBEAX,"00-SPECIMEN",LRBEBX)) Q:X=""
|
---|
| 168 | ..S Y=$G(LRBEAR2("TEST",LRBEAX,"00-SPECIMEN",LRBEBX,"S"))
|
---|
| 169 | ..D:LRBEALO
|
---|
| 170 | ...D EN^DDIOL("SPECIMEN:","","!"),EN^DDIOL("","","!")
|
---|
| 171 | ..D EN^DDIOL($E(Y,1,15),"","?3")
|
---|
| 172 | ..D EN^DDIOL($E($P(X,U,3),1,35),"","?20")
|
---|
| 173 | ..D EN^DDIOL($S($P(X,U,1)="@":$P(X,U,2)_" (DELETE)",1:$P(X,U,1)),"","?60")
|
---|
| 174 | ..D EN^DDIOL("","","!") S LRBEALO=0
|
---|
| 175 | .S X=$G(LRBEAR2("TEST",LRBEAX,"01-DEFAULT HCPCS"))
|
---|
| 176 | .D:X'=""
|
---|
| 177 | ..D EN^DDIOL("HCPCS:","","")
|
---|
| 178 | ..D EN^DDIOL($E($P(X,U,3),1,35),"","?20")
|
---|
| 179 | ..D EN^DDIOL($S($P(X,U,1)="@":$P(X,U,2)_" (DELETE)",1:$P(X,U,1)),"","?60")
|
---|
| 180 | ..D EN^DDIOL("","","!")
|
---|
| 181 | .S X=$G(LRBEAR2("TEST",LRBEAX,"02-DEFAULT CPT"))
|
---|
| 182 | .D:X'=""
|
---|
| 183 | ..D EN^DDIOL("Default CPT:","","")
|
---|
| 184 | ..D EN^DDIOL($E($P(X,U,3),1,35),"","?20")
|
---|
| 185 | ..D EN^DDIOL($S($P(X,U,1)="@":$P(X,U,2)_" (DELETE)",1:$P(X,U,1)),"","?60")
|
---|
| 186 | ..D EN^DDIOL("","","!")
|
---|
| 187 | .S X=$G(LRBEAR2("TEST",LRBEAX,"03-AMA FLAG"))
|
---|
| 188 | .D:X'=""
|
---|
| 189 | ..D EN^DDIOL("Panel CPT(S) AMA compliant or otherwise billable?:","","")
|
---|
| 190 | ..D EN^DDIOL($S(X=1:"YES",1:"NO"),"","?60")
|
---|
| 191 | ..D EN^DDIOL("","","!")
|
---|
| 192 | Q:LRBEQT
|
---|
| 193 | S DIR("A")="Is this correct",DIR(0)="Y",DIR("B")="YES" D ^DIR
|
---|
| 194 | I Y D SCPT(.LRBEAR2)
|
---|
| 195 | Q
|
---|
| 196 | SCPT(LRBEAR2) ; Set the CPT code in File #60
|
---|
| 197 | N LRBEAX,LRBEBX,LRBEFIL1,LRBEFIL2,LRERR,LRFDA,LRBESEQ,LRBEX,LRBEXX
|
---|
| 198 | N LRBEXIEN,LRBEDEL
|
---|
| 199 | S LRBEFIL1=60,LRBEFIL2=60.196
|
---|
| 200 | S LRBEAX="" F S LRBEAX=$O(LRBEAR2("TEST",LRBEAX)) Q:LRBEAX="" D
|
---|
| 201 | .S LRBEX=$G(LRBEAR2("TEST",LRBEAX,"01-DEFAULT HCPCS"))
|
---|
| 202 | .S:LRBEX'="" LRFDA(99,LRBEFIL1,LRBEAX_",",507)=$P(LRBEX,U,1)
|
---|
| 203 | .S LRBEX=$G(LRBEAR2("TEST",LRBEAX,"02-DEFAULT CPT"))
|
---|
| 204 | .S:LRBEX'="" LRFDA(99,LRBEFIL1,LRBEAX_",",506)=$P(LRBEX,U,1)
|
---|
| 205 | .S LRBEX=$G(LRBEAR2("TEST",LRBEAX,"03-AMA FLAG"))
|
---|
| 206 | .S:LRBEX'="" LRFDA(99,LRBEFIL1,LRBEAX_",",508)=$P(LRBEX,U)
|
---|
| 207 | .S LRBEBX=""
|
---|
| 208 | .F S LRBEBX=$O(LRBEAR2("TEST",LRBEAX,"00-SPECIMEN",LRBEBX)) Q:LRBEBX="" D
|
---|
| 209 | ..S LRBEX=$G(LRBEAR2("TEST",LRBEAX,"00-SPECIMEN",LRBEBX))
|
---|
| 210 | ..S LRBEDEL=$S($P(LRBEX,U)="@":1,1:0)
|
---|
| 211 | ..I LRBEDEL D
|
---|
| 212 | ...S LRBEXIEN=$P(LRBEX,U,4),LRFDAIEN=""
|
---|
| 213 | ..I 'LRBEDEL D
|
---|
| 214 | ...S LRBESEQ=$O(^LAB(60,LRBEAX,1,LRBEBX,3,"A"),-1)+1
|
---|
| 215 | ...S LRBETNUM=$G(LRBETNUM)+1
|
---|
| 216 | ...S LRBEXIEN="+"_LRBETNUM_","_LRBEBX_","_LRBEAX_","
|
---|
| 217 | ...S LRFDAIEN(LRBETNUM)=LRBESEQ
|
---|
| 218 | ...S LRBEXX=$G(LRBEAR2("TEST",LRBEAX,"00-SPECIMEN",LRBEBX,"D"))
|
---|
| 219 | ..S LRFDA(99,LRBEFIL2,LRBEXIEN,.01)=$P(LRBEX,U,1)
|
---|
| 220 | ..S:'LRBEDEL LRFDA(99,LRBEFIL2,LRBEXIEN,1)=$P(LRBEXX,U,1)
|
---|
| 221 | D UPDATE^DIE("","LRFDA(99)","LRFDAIEN","LRERR")
|
---|
| 222 | Q
|
---|
| 223 | SAR(LRBETST,LRBEAR2) ; Setup Array for Specimen
|
---|
| 224 | N A,B,LRBEAR,LRBETNAM,LRBETNUM,LRBETCPT
|
---|
| 225 | D GETS^DIQ(60,LRBETST_",","100*","","LRBEAR")
|
---|
| 226 | S A="" F S A=$O(LRBEAR(60.01,A)) Q:A="" D
|
---|
| 227 | .S LRBETNUM=1,LRBETCPT="",LRBETNAM=$P(LRBEAR(60.01,A,.01),U,1)
|
---|
| 228 | .S B="" F S B=$O(LRBEAR(60.196,B)) Q:B="" D
|
---|
| 229 | ..Q:A'=$P(B,",",2,4)
|
---|
| 230 | ..S LRBETNUM=$P(B,",",1),LRBETCPT=$G(LRBEAR(60.196,B,.01))
|
---|
| 231 | .S LRBEAR2(60.196,$P(A,",",1),LRBETNUM)=LRBETNAM_"^"_LRBETCPT
|
---|
| 232 | Q
|
---|
| 233 | WMSG(LRBEDESC,LRBEFLG) ; Write Message
|
---|
| 234 | N LRBEXMSG
|
---|
| 235 | S:LRBEFLG="ND" LRBEXMSG="NOTHING TO DELETE"
|
---|
| 236 | S:LRBEFLG="IV" LRBEXMSG="INVALID CPT: "_LRBEDESC
|
---|
| 237 | S:LRBEFLG="IA" LRBEXMSG="INACTIVE CPT: NOT ACTIVE FOR THIS DATE"
|
---|
| 238 | S:LRBEFLG="V" LRBEXMSG="VALID CPT: "_LRBEDESC
|
---|
| 239 | D EN^DDIOL(LRBEXMSG,"","!?$X+5")
|
---|
| 240 | Q
|
---|
| 241 | KLL ; Kill all variable
|
---|
| 242 | K LRBEAX,DIC,DIR,LRBEQT,X,Y
|
---|
| 243 | K LRBEAR,LRBEAR2,LRBEARP,LRBETST,LRBETSTN,LRBEMSG
|
---|
| 244 | Q
|
---|