1 | LRCAPES1 ;DALOI/FHS/KLL-CONT MANUAL PCE CPT WORKLOAD CAPTURE ;07/30/04
|
---|
2 | ;;5.2;LAB SERVICE;**274,308**;Sep 27, 1994
|
---|
3 | ;Continuation of LRCAPES
|
---|
4 | EN ;Setup the order of defined NLT codes
|
---|
5 | ; ^ICPTCOD supported by DBIA 1995-A
|
---|
6 | Q:$G(^TMP("LR",$J,"AK",0,1))=DUZ_U_DT
|
---|
7 | N LRI,LRY,LRX,LRX2,LRX3,LRDES,LRCNT
|
---|
8 | K ^TMP("LR",$J,"AK")
|
---|
9 | S LRCNT=0
|
---|
10 | S ^TMP("LR",$J,"AK",0)=$$FMADD^XLFDT(DT,2)_U_DT_U_"ES CPT code list"
|
---|
11 | S ^TMP("LR",$J,"AK",0,1)=DUZ_U_DT
|
---|
12 | S LRY="^LAM(""AK"")" F S LRY=$Q(@LRY) Q:$QS(LRY,1)'="AK" D
|
---|
13 | . N LRDES
|
---|
14 | . S LRX2=$QS(LRY,2),LRX3=$QS(LRY,3)
|
---|
15 | . Q:'$G(LRX2)!('$G(LRX3))
|
---|
16 | . S LRI=0 F S LRI=$O(^LAM(LRX3,4,"AC","CPT",LRI)) Q:LRI<1 D
|
---|
17 | . . S LRX=+$G(^LAM(LRX3,4,LRI,0)),LRX=$$CPT^ICPTCOD(LRX,DT)
|
---|
18 | . . Q:'$P(LRX,U,7)
|
---|
19 | . . K LRDES S LRDES=$$CPTD^ICPTCOD(+LRX,"LRDES")
|
---|
20 | . . S LRCNT=LRCNT+1
|
---|
21 | . . I $L(LRDES(1)) S ^TMP("LR",$J,"AK",LRX2,LRI,+LRX)=LRX3_U_$E(LRDES(1),1,55)_U_$$GET1^DIQ(64,LRX3_",",.01,"E")_U_$$GET1^DIQ(64,LRX3_",",1,"E") Q
|
---|
22 | . . S ^TMP("LR",$J,"AK",LRX2,LRI,+LRX)=LRX3_U_$P(LRX,U,3)_U_$$GET1^DIQ(64,LRX3_",",.01,"E")_U_$$GET1^DIQ(64,LRX3_",",1,"E")
|
---|
23 | Q
|
---|
24 | SET(DFN,LRPRO,LREDT,LRLOC,LRINS,LRCPT,LRAA,LRAD,LRAN) ; Call to check variable
|
---|
25 | S (LREND,LROK)=0,LRAA=+$G(LRAA),LRAD=+$G(LRAD),LRAN=+$G(LRAN)
|
---|
26 | I '$D(^DPT(DFN,0))#2 S LROK="1^Error Patient" Q LROK
|
---|
27 | I $$GET^XUA4A72(LRPRO,DT)<1 S LROK="2^Inactive Provider" Q LROK
|
---|
28 | I LREDT'?7N.E S LROK="3^Date Format" Q LROK
|
---|
29 | I '$D(^SC(LRLOC,0))#2 S LROK="4^Location Error" Q LROK
|
---|
30 | I "CMZ"'[$P($G(^SC(LRLOC,0)),U,3) S LROK="4.2^Not Inpatient Location" Q LROK
|
---|
31 | I '$G(LRDSSID) S LROK="4.2^Not Inpatient Location" Q LROK
|
---|
32 | I '$D(^DIC(4,LRINS,0))#2 S LROK="5^Institution Error" Q LROK
|
---|
33 | I '$O(LRCPT(0)) S LROK="6^No CPT Codes Passed" Q LROK
|
---|
34 | D EN^LRCAPES,READ^LRCAPES1
|
---|
35 | D DIS I '$O(^TMP("LR",$J,"LRLST",0)) S LROK="-1" Q LROK
|
---|
36 | D LOAD^LRCAPES,CLEAN^LRCAPES
|
---|
37 | Q LROK
|
---|
38 | ;
|
---|
39 | SEND ;Send data to PCE via DATA2PCE^PXAPI API
|
---|
40 | I $$GET1^DIQ(63,+$G(LRDFN),.02,"I")=2,$G(LRDSSID),$O(^TMP("LRPXAPI",$J,"PROCEDURE",0)) D
|
---|
41 | . I '$D(LRQUIET) W !,$$CJ^XLFSTR("Sending PCE Workload",IOM)
|
---|
42 | . S:'$D(^LRO(68,LRAA,1,LRAD,1,LRAN,"PCE")) ^("PCE")="" S LRPCEN=^("PCE")
|
---|
43 | . S LREDT=$S($G(LREDT):LREDT,1:$$NOW^XLFDT)
|
---|
44 | . S:'$P(LREDT,".",2) $P(LREDT,".",2)="1201"
|
---|
45 | . D SEND^LRCAPPH1
|
---|
46 | . I '$D(LRQUIET) W $$CJ^XLFSTR("Visit # "_LRVSITN,80)
|
---|
47 | . S ^LRO(68,LRAA,1,LRAD,1,LRAN,"PCE")=$E(LRPCEN_LRVSITN_";",1,80)
|
---|
48 | D SETWKL(LRAA,LRAD,LRAN)
|
---|
49 | Q
|
---|
50 | SETWKL(LRAA,LRAD,LRAN) ;Set workload into 68 from CPT coding
|
---|
51 | Q:'$P(LRPARAM,U,14)!('$P($G(^LRO(68,+$G(LRAA),0)),U,16))
|
---|
52 | I '$G(^LRO(68,+$G(LRAA),1,+$G(LRAD),1,+$G(LRAN),0)) Q
|
---|
53 | I '$O(^TMP("LR",$J,"LRLST",0)) K ^TMP("LR",$J,"LRLST") Q
|
---|
54 | I '$D(LRQUIET) W !,$$CJ^XLFSTR("Storing LMIP Workload",IOM)
|
---|
55 | N LRCNT,LRT,LRP,LRTIME,LRCDEF,LRURGW,LRI,LRADD
|
---|
56 | S:'$G(LRURG) LRURG=9
|
---|
57 | S (LRADD,LRCNT)=1,LRCDEF="3000",LRURGW=+$G(LRURG)
|
---|
58 | S LRT("P")=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,0))
|
---|
59 | S LRI=0 F S LRI=$O(^TMP("LR",$J,"LRLST",LRI)) Q:LRI<1 D
|
---|
60 | . S LRP=$P(^TMP("LR",$J,"LRLST",LRI),U,2)
|
---|
61 | . I 'LRP D Q:'LRP
|
---|
62 | . . S LRP=+$O(^LAM("AB",$P(^TMP("LR",$J,"LRLST",LRI),U)_";ICPT(",0))
|
---|
63 | . Q:'($D(^LAM(LRP,0))#2)
|
---|
64 | . S LRT=+$O(^LAM(LRP,7,"B",0))
|
---|
65 | . I 'LRT S LRT=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,0))
|
---|
66 | . Q:'LRT
|
---|
67 | . D SET^LRCAPV1S,STUFI^LRCAPV1
|
---|
68 | K ^TMP("LR",$J,"LRLST")
|
---|
69 | Q
|
---|
70 | DIS ;
|
---|
71 | N X9
|
---|
72 | K X,LRLST,LRCNT,LRI,LRX,LRXY,LRXTST
|
---|
73 | K ^TMP("LR",$J,"LRLST")
|
---|
74 | N LRNOTFD,LRNOLK,LRIA81,LRIA64,LRRF64
|
---|
75 | I $G(LRANSX) D
|
---|
76 | . S X=LRANSX D RANGE^LRWU2
|
---|
77 | . X (X9_"S LRX=T1 D EX1^LRCAPES")
|
---|
78 | I '$O(^TMP("LR",$J,"LRLST",0)) D Q
|
---|
79 | . W !!!,?5,"The following CPT Code(s) are not selected:"
|
---|
80 | . W:$G(LRNOTFD) !?8,"Not found in #81: ",LRNOTFD
|
---|
81 | . W:$G(LRIA81) !?8,"Inactive in #81: ",LRIA81
|
---|
82 | . W:$G(LRIA64) !?8,"Inactive in #64: ",LRIA64
|
---|
83 | . W:$G(LRNOLK) !?8,"Not linked to workload: ",LRNOLK
|
---|
84 | . W !
|
---|
85 | . S LRANSY=0
|
---|
86 | D DEM
|
---|
87 | CHK ;User accepts CPT list
|
---|
88 | N DIR
|
---|
89 | S DIR("A")="Is this correct "
|
---|
90 | S DIR(0)="Y",DIR("B")="Yes" D RD
|
---|
91 | I $G(LRANSY)'=1 D
|
---|
92 | .K ^TMP("LR",$J,"LRLST")
|
---|
93 | .S ^TMP("LR",$J,"LRLST")=$$FMADD^XLFDT(DT,2)_U_DT_U_"LAB ES CPT"
|
---|
94 | Q
|
---|
95 | PG ;Page break
|
---|
96 | N DIR,DIRUT,DUOUT,DTOUT
|
---|
97 | S DIR(0)="E" D ^DIR
|
---|
98 | I $G(DIRUT) S LREND=1 Q
|
---|
99 | W @IOF
|
---|
100 | Q
|
---|
101 | RD ;DIR read
|
---|
102 | N Y,X,DTOUT,DUOUT,DIRUT,DIROUT
|
---|
103 | S (LRANSY,LRANSX)=0
|
---|
104 | S LREND=0 W !
|
---|
105 | D ^DIR I $D(DIRUT) S LREND=1 Q
|
---|
106 | S LRANSY=$G(Y),LRANSX=$G(X)
|
---|
107 | Q
|
---|
108 | READ ;Select CPT codes for accession
|
---|
109 | ; Ask if want to see previously loaded CPT codes
|
---|
110 | D LSTCPT(LRAA,LRAD,LRAN)
|
---|
111 | N DIR,LREND
|
---|
112 | S DIR(0)="LO",LREND=0
|
---|
113 | S DIR("A")="Select CPT codes"
|
---|
114 | S DIR("?")="List or range e.g, 1,3,5-7,88000."
|
---|
115 | S DIR("??")="^D HLP^LRCAPES1"
|
---|
116 | D RD
|
---|
117 | Q
|
---|
118 | DEM ;
|
---|
119 | N LRIENS,DA
|
---|
120 | S LRIENS=LRAN_","_LRAD_","_LRAA_","
|
---|
121 | W @IOF
|
---|
122 | W !?3,PNM,?35,SSN,?55,"DOB: ",$$FMTE^XLFDT(DOB,1)
|
---|
123 | W !?5,LRCDT
|
---|
124 | W !?10,LRSPECID,?60,"Loc: ",$G(LRLLOCX)
|
---|
125 | I $G(^LRO(68,LRAA,1,LRAD,1,LRAN,"PCE")) W !?15,"PCE ENC # "_^("PCE")
|
---|
126 | W !?15,"Specimen: ",$$GET1^DIQ(68.05,"1,"_LRIENS,.01,"E")
|
---|
127 | I $L($G(LRSS)),$O(^LR(LRDFN,LRSS,LRIDT,.1,0)) D
|
---|
128 | . N LRX
|
---|
129 | . W !?5,"Tissue Specimens: "
|
---|
130 | . S LRX=0 F S LRX=$O(^LR(LRDFN,LRSS,LRIDT,.1,LRX)) Q:LRX<1 W !,?15,$P($G(^(LRX,0)),U)
|
---|
131 | W !?5,"Test(s); "
|
---|
132 | S (LREND,LRX)=0 D
|
---|
133 | . N LREND
|
---|
134 | . F S LRX=$O(^LRO(68,LRAA,1,LRAD,1,LRAN,4,LRX)) Q:LRX<1!($G(LREND)) D
|
---|
135 | . . I $Y>(IOSL-5) D PG Q:$G(LREND)
|
---|
136 | . . W ?15,$P($G(^LAB(60,+LRX,0)),U)_"/ "
|
---|
137 | ;Display pathologist's name
|
---|
138 | N LRPATH,LRIENS,LRFL
|
---|
139 | S:LRSS="AU" LRPATH=$$GET1^DIQ(63,LRDFN,13.6,"I")
|
---|
140 | I LRSS'="AU" D
|
---|
141 | .S LRFL=$S(LRSS="EM":63.02,LRSS="CY":63.09,LRSS="SP":63.08,1:0)
|
---|
142 | .S LRIENS=LRIDT_","_LRDFN_","
|
---|
143 | .S LRPATH=$$GET1^DIQ(LRFL,LRIENS,.02,"I")
|
---|
144 | S LRPATH=$$GET1^DIQ(200,+$G(LRPATH),.01,"I")
|
---|
145 | W:LRSS="CY" !?5,"Pathologist/Cytotechnologist: ",LRPATH,!
|
---|
146 | W:LRSS'="CY" !?5,"Pathologist: ",LRPATH,!
|
---|
147 | ;
|
---|
148 | Q:'$O(^TMP("LR",$J,"LRLST",0))
|
---|
149 | W !!,$$CJ^XLFSTR("Selected CPT Codes",IOM)
|
---|
150 | W ! S (LREND,LRX)=0 D
|
---|
151 | . N LREND,LRTMP
|
---|
152 | . S LRTMP=0
|
---|
153 | . F S LRX=+$O(^TMP("LR",$J,"LRLST",LRX)) Q:LRX<1!($G(LREND)) D
|
---|
154 | . . I $Y>(IOSL-5) D PG Q:$G(LREND)
|
---|
155 | . . S LRTMP=$G(^TMP("LR",$J,"LRLST",LRX))
|
---|
156 | . . W !?5,"("_LRX_") "_$P(LRTMP,U)_" "_$E($P(LRTMP,U,3),1,50),!
|
---|
157 | . . W:$P(LRTMP,U,5) ?10,$E($P(LRTMP,U,4),1,50)_" {"_$P(LRTMP,U,5)_"}"
|
---|
158 | I $G(LRNOTFD)!$G(LRIA81)!$G(LRIA64)!$G(LRNOLK)!$G(LRRF64) D
|
---|
159 | . W !!!?5,"The following CPT Codes are NOT Selected"
|
---|
160 | . W:$G(LRNOTFD) !?8,"Not found in #81: ",LRNOTFD
|
---|
161 | . W:$G(LRIA81) !?8,"Inactive in #81: ",LRIA81
|
---|
162 | . W:$G(LRIA64) !?8,"Inactive in #64: ",LRIA64
|
---|
163 | . W:$G(LRNOLK) !?8,"Not Linked to Workload: ",LRNOLK
|
---|
164 | . W:$G(LRRF64) !?8,"Inactive in #64\Active Replacement Found: ",LRRF64
|
---|
165 | Q
|
---|
166 | CHKCPT ;Edit CPT code - does it exist,active in 81 or 64, linked to workload?
|
---|
167 | N LRINACT,LRII
|
---|
168 | S (LRNR,LRACTV,LRXY2,LRWL2,LRD2)=0,LRXY1=$P(LRXY,U)
|
---|
169 | I LRXY1=-1 S LRNOTFD=$S($G(LRNOTFD):LRNOTFD_LRX_",",1:LRX_",") Q
|
---|
170 | I '$P(LRXY,U,7) S LRIA81=$S($G(LRIA81):LRIA81_LRXY1_",",1:LRXY1_",") Q
|
---|
171 | I '$O(^LAM("AB",LRXY1_";ICPT(",0)) D Q
|
---|
172 | . S LRNOLK=$S($G(LRNOLK):LRNOLK_LRXY1_",",1:LRXY1_","),LRNR=1
|
---|
173 | ;If CPT is not active in 64, look for alternative active CPT
|
---|
174 | S LRWL2=+$O(^LAM("AB",LRXY1_";ICPT(",0))
|
---|
175 | S:$G(LRQ)'="" LRWL2=$P(@LRQ,"^") ;For ES Display CPTs
|
---|
176 | Q:'LRWL2
|
---|
177 | S LRD2=+$O(^LAM("AB",LRXY1_";ICPT(",LRWL2,LRD2))
|
---|
178 | S LRREL2=$P(^LAM(LRWL2,4,LRD2,0),U,3),LRINA2=$P(^(0),U,4)
|
---|
179 | Q:LRREL2&(LRINA2="")
|
---|
180 | Q:LREDT>(LRREL2-1)&((LREDT<LRINA2)!(LRINA2=""))
|
---|
181 | ;CPT is inactive, search for another linked, active CPT to replace it
|
---|
182 | S LRD2="A",LRD2=$O(^LAM(LRWL2,4,LRD2),-1)
|
---|
183 | I LRD2>1 D
|
---|
184 | .S LRII=0,(LRREL2,LRINA2)=""
|
---|
185 | .F S LRII=$O(^LAM(LRWL2,4,LRII)) Q:'LRII!(LRACTV) D
|
---|
186 | ..S LRXY2=+$P(^LAM(LRWL2,4,LRII,0),U)
|
---|
187 | ..Q:LRXY2=LRXY1
|
---|
188 | ..S LRREL2=$P(^LAM(LRWL2,4,LRII,0),U,3),LRINA2=$P(^(0),U,4)
|
---|
189 | ..I LRREL2&(LRINA2="") S LRACTV=1 Q
|
---|
190 | ..I LREDT>(LRREL2-1)&((LREDT<LRINA2)!(LRINA2="")) S LRACTV=1 Q
|
---|
191 | ;No replacement active CPT found,
|
---|
192 | I 'LRACTV S LRIA64=$S($G(LRIA64):LRIA64_LRXY1_",",1:LRXY1_","),LRNR=1 Q
|
---|
193 | Q
|
---|
194 | LSTCPT(LRAA,LRAD,LRAN) ; Show loaded CPT codes if any
|
---|
195 | Q:$S('$G(LRAA):1,'$G(LRAD):1,'$G(LRAN):1,1:0)
|
---|
196 | N LRSTR
|
---|
197 | S LRSTR=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,"PCE")) Q:'LRSTR
|
---|
198 | N DA,DIC,DIR,DIRUT,DIR,DR,ERR,DUOUT,IEN,LRDA,LRENC,LREND,LRP,S,X,Y
|
---|
199 | S DIR(0)="Y",DIR("A")=" Would you like to see PCE CPT Information"
|
---|
200 | S DIR("B")="No" D ^DIR Q:$G(DIRUT)!($G(Y)'=1)
|
---|
201 | ;List filed CPT CODES
|
---|
202 | W @IOF
|
---|
203 | F LRP=1:1 S IEN=$P(LRSTR,";",LRP) Q:IEN="" D
|
---|
204 | . D GETCPT^PXAPIOE(IEN,"LRENC","ERR")
|
---|
205 | S (LRDA,LREND)=0 F S LRDA=$O(LRENC(LRDA)) Q:'LRDA!($G(LREND)) D
|
---|
206 | . I $Y>(IOSL-6) D PG W @IOF Q:$G(LREND)
|
---|
207 | . S S=0,DA=LRDA,DR="0:99",DIC="^AUPNVCPT(" D EN^DIQ
|
---|
208 | Q
|
---|
209 | HLP ;Help display for CPT selection
|
---|
210 | N DIR,DIRUT,DUOUT,DTOUT,LREND,LRX,LRY
|
---|
211 | W @IOF
|
---|
212 | S LRX="^TMP(""LR"","_$J_",""AK"",0,1)"
|
---|
213 | W $$CJ^XLFSTR("List or range e.g, 1,3,5-7,88300.",IOM)
|
---|
214 | W $$CJ^XLFSTR("Select from the following or enter CPT separated by a comma",IOM),!
|
---|
215 | F S LRX=$Q(@LRX) Q:$QS(LRX,2)'=$J!($G(LREND))!($QS(LRX,1)'="LR") D
|
---|
216 | . S LRY=@LRX
|
---|
217 | . W !?3,$QS(LRX,4),?6," = "_$QS(LRX,6)_" "_$E($P(LRY,U,2),1,60),!
|
---|
218 | . W:$P(LRY,U,4) ?8,$P(LRY,U,3)_" { NLT = "_$P(LRY,U,4)_" }",!
|
---|
219 | . I $Y>(IOSL-6) S DIR(0)="E" D RD I '$G(LREND) W @IOF
|
---|
220 | D LSTCPT^LRCAPES1($G(LRAA),$G(LRAD),$G(LRAN))
|
---|
221 | Q
|
---|