1 | LRCAPES ;DALOI/FHS/KLL -MANUAL PCE CPT WORKLOAD CAPTURE ;07/30/04
|
---|
2 | ;;5.2;LAB SERVICE;**274,259,349,308**;Sep 27, 1994
|
---|
3 | ;Reference to $$GET^XUA4A72 - Supported by DBIA #1625
|
---|
4 | EN ;
|
---|
5 | D EN^LRCAPES1
|
---|
6 | Q
|
---|
7 | EX1 ;Parse the read entry
|
---|
8 | N LRXY,LRACTV,LRXY1,LRXY2,LRD2,LRNR,LRWL2,LRINA2,LRREL2,LRQ
|
---|
9 | Q:'$L($G(LRX))
|
---|
10 | ;Edit on 5-digit code entry
|
---|
11 | I LRX?5N,'$D(^TMP("LR",$J,"AK",LRX))#2 D Q
|
---|
12 | .S LRXY=$$CPT^ICPTCOD(LRX,DT)
|
---|
13 | .D CHKCPT^LRCAPES1
|
---|
14 | .;Don't pass to PCE if CPT is missing or inactive in #81 or #64
|
---|
15 | .Q:'$P(LRXY,U,7)!(LRNR)
|
---|
16 | .;If CPT is inactive in #64 and another active CPT exists, replace
|
---|
17 | .; the inactive with the active CPT
|
---|
18 | .I LRACTV D Q
|
---|
19 | ..S LRXY=$$CPT^ICPTCOD(LRXY2,DT)
|
---|
20 | ..S LRCNT=+$G(LRCNT)+1
|
---|
21 | ..S ^TMP("LR",$J,"LRLST",LRCNT)=$P(LRXY,U)_U_LRWL2_U_$P(LRXY,U,3)_U
|
---|
22 | ..S LRRF64=$S($G(LRRF64):LRRF64_LRXY1_"\"_LRXY2_",",1:LRXY1_"\"_LRXY2_",")
|
---|
23 | ..;If CPT passes edits, continue
|
---|
24 | .S LRCNT=+$G(LRCNT)+1
|
---|
25 | .S ^TMP("LR",$J,"LRLST",LRCNT)=$P(LRXY,U)_"^^"_$P(LRXY,U,3)_U
|
---|
26 | ;Edit on ES Display Order # entry
|
---|
27 | S LRQ="^TMP(""LR"","_$J_",""AK"","_LRX_")"
|
---|
28 | S LRQ=$Q(@LRQ)
|
---|
29 | S LRXY=$$CPT^ICPTCOD($QS(LRQ,6),DT)
|
---|
30 | D CHKCPT^LRCAPES1
|
---|
31 | Q:'$P(LRXY,U,7)!(LRNR)
|
---|
32 | ;If CPT is inactive in #64 and another active CPT exists, replace
|
---|
33 | ; the inactive with the active CPT
|
---|
34 | I LRACTV D Q
|
---|
35 | .S LRXY=$$CPT^ICPTCOD(LRXY2,DT)
|
---|
36 | .S LRCNT=+$G(LRCNT)+1
|
---|
37 | .S ^TMP("LR",$J,"LRLST",LRCNT)=$P(LRXY,U)_U_LRWL2_U_$P(LRXY,U,3)_U
|
---|
38 | .S LRRF64=$S($G(LRRF64):LRRF64_LRXY1_"\"_LRXY2_",",1:LRXY1_"\"_LRXY2_",")
|
---|
39 | .;I CPT passes edits, continue
|
---|
40 | S LRCNT=+$G(LRCNT)+1
|
---|
41 | S ^TMP("LR",$J,"LRLST",LRCNT)=$QS(LRQ,6)_U_@LRQ
|
---|
42 | Q
|
---|
43 | END1 ;
|
---|
44 | D END S LREND=1
|
---|
45 | Q
|
---|
46 | END ;
|
---|
47 | I $G(LRAA),$G(LRAD),$G(LRAN) L -^LRO(68,LRAA,1,LRAD,1,LRAN)
|
---|
48 | K:'$G(LRESCPT) ^TMP("LR",$J,"AK")
|
---|
49 | I $G(LRDEBUG) W !,"END ",! Q
|
---|
50 | Q
|
---|
51 | WLN ;Interactive entry point
|
---|
52 | D KVA^VADPT
|
---|
53 | K DIC,DIR
|
---|
54 | K LREND,LRUID,DIC,DIR,LRVBY
|
---|
55 | K ^TMP("LR",$J,"LRLST")
|
---|
56 | K LRAA,LRACC,LRAD,LRAN,LRDFN,LRDPF,LRIDT
|
---|
57 | K LRRB,LRSS,LRTIME,LRTREA,LRUID,LRWRD,PNM,SEX,SSN,AGE
|
---|
58 | S (LRAA,LRACC,LRAD,LRNOP,LRAN,LREND)=0,LRVBY=1,LRUID=""
|
---|
59 | S:'$G(LRPRO) LRPRO=DUZ
|
---|
60 | I '$G(LRESCPT) S LRVBY=$$SELBY^LRWU4("Select Accession By")
|
---|
61 | D:LRVBY=1 ^LRVERA D:LRVBY=2 UID^LRVERA
|
---|
62 | I 'LRVBY!(LRAA<1) D END S LREND=1 Q
|
---|
63 | S LRDFN=+$$GET1^DIQ(68.02,+$G(LRAN)_","_+$G(LRAD)_","_+$G(LRAA)_",",.01)
|
---|
64 | I 'LRDFN D END S LRNOP=1 D Q
|
---|
65 | . W !?5,"This accession is corrupt",!
|
---|
66 | LCK ;
|
---|
67 | L +^LRO(68,LRAA,1,LRAD,1,LRAN):10 I '$T D Q
|
---|
68 | . W !?5,"Someone else is editing this accession",!
|
---|
69 | . S LRNOP=1
|
---|
70 | D PT^LRX
|
---|
71 | S LRUID=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",16)
|
---|
72 | S LRLLOCX=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",6)
|
---|
73 | S LRSPECID="Acc #: "_$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",15,"E")
|
---|
74 | S:$L($G(LRUID)) LRSPECID=LRSPECID_" UID: "_LRUID
|
---|
75 | S LREDT=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",9,"I")
|
---|
76 | I LREDT'?7N.E D Q
|
---|
77 | . W !?5,"This accession does not have a Collection Date/Time",!
|
---|
78 | . W !?10,"CAN NOT PROCEED",!
|
---|
79 | . S LRNOP="6^Not Accessioned"
|
---|
80 | I '$G(LRIDT) S LRIDT=+$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",13.5,"I")
|
---|
81 | S LRCDT="Collection Date: "_$$FMTE^XLFDT(LREDT,1)
|
---|
82 | I '$L($G(LRSS)) S LRSS=$$GET1^DIQ(68,LRAA_",",.02,"I")
|
---|
83 | S LRDSSLOC=+$$GET1^DIQ(68,LRAA_",",.8,"I")
|
---|
84 | S LRDSSLOC=$S($G(LRDSSLOC):LRDSSLOC,1:LRDLOC)
|
---|
85 | D DEM^LRCAPES1
|
---|
86 | PRO ;Get provider,patient/location information
|
---|
87 | S LREND=0
|
---|
88 | D
|
---|
89 | . N LRPRONM,DIR,DIRUT,DUOUT,X,Y
|
---|
90 | . S LRPRONM=$$GET1^DIQ(200,+$G(LRPRO),.01,"I")
|
---|
91 | . I $L(LRPRONM),$D(^VA(200,"AK.PROVIDER",LRPRONM,+$G(LRPRO)))#2,$$GET^XUA4A72(+$G(LRPRO),DT)>0 S DIR("B")=LRPRONM
|
---|
92 | . ;S DIR("A")="Releasing Pathologist"
|
---|
93 | . S DIR("A")="Provider"
|
---|
94 | . S LRPRO=0,DIR(0)="PO^200:ENMZ"
|
---|
95 | . S DIR("S")="I $D(^VA(200,""AK.PROVIDER"",$P(^(0),U),+Y)),$$GET^XUA4A72(+Y,DT)>0"
|
---|
96 | . D ^DIR
|
---|
97 | . I Y>1 S LRPRO=+Y
|
---|
98 | I '$G(LRPRO) D D END1 Q
|
---|
99 | . W !?5,"No Active Provider Selected",!
|
---|
100 | . S LRNOP=1
|
---|
101 | I '$D(^LRO(68,LRAA,1,LRAD,1,LRAN,0))#2 D D END1 G WLN
|
---|
102 | . W !?5,"The accession is corrupt - missing zero node",!
|
---|
103 | . S LRNOP="7^Corrupt Accession"
|
---|
104 | LOC ;Reporting Location
|
---|
105 | S LRNODE0=^LRO(68,LRAA,1,LRAD,1,LRAN,0)
|
---|
106 | S LRNOP=0
|
---|
107 | S (LRLLOCX,LRLLOC)=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",6)
|
---|
108 | I $L(LRLLOC) S LRLLOC=+$$FIND1^DIC(44,"","OM",LRLLOC)
|
---|
109 | ASKLOC ;Check to see if outpatient location
|
---|
110 | I '$D(^SC(+$G(LRLLOC),0))#2 D
|
---|
111 | . N DIR,X,Y
|
---|
112 | . S LRLLOC=""
|
---|
113 | . S DIR(0)="PO^44:AEZNMO",DIR("A")=" Ordering Location "
|
---|
114 | . D ^DIR
|
---|
115 | . I +Y<1 Q
|
---|
116 | . S LRLLOC=+Y
|
---|
117 | I '$G(LRLLOC) D END1 Q
|
---|
118 | S LRDSSID=+$$GET1^DIQ(44,+LRLLOC,8,"I") ;I 'LRDSSID S LRNOP="2^No Stop Code Number" Q
|
---|
119 | S LRNINS=$$GET1^DIQ(44,+LRLLOC,3,"I")
|
---|
120 | S LRNINS=$S(LRNINS:LRNINS,1:DUZ(2))
|
---|
121 | Q
|
---|
122 | ES() ;Entry point for front end application.
|
---|
123 | N DFN,LRESCPT,LRDFN,LRLLOC,LRLLOCX,LRNINS,LRTST,LRENCDT,LRDUZ
|
---|
124 | K LRES,LRESCPT
|
---|
125 | S LRES=1
|
---|
126 | ASK ; Option entry point - Check and setup PCE reporting variables
|
---|
127 | D EN^LRCAPES1
|
---|
128 | N X,Y,T1
|
---|
129 | S LREND=0
|
---|
130 | D ^LRPARAM Q:$G(LREND)
|
---|
131 | K ^TMP("LRPXAPI",$J),^TMP("LR",$J,"LRLST")
|
---|
132 | S ^TMP("LR",$J,"LRLST")=$$FMADD^XLFDT(DT,2)_U_DT_U_"LAB ES CPT"
|
---|
133 | S:'$G(LRPKG) LRPKG=$O(^DIC(9.4,"B","LR",0))
|
---|
134 | S:'$G(LRPKG) LRPKG=$O(^DIC(9.4,"B","LAB SERVICE",0))
|
---|
135 | PKG ;Check to see if Lab Package is installed
|
---|
136 | I '$G(LRPKG) D D WKL Q
|
---|
137 | . W !?5,"LAB SERVICE PACKAGE is not loaded",!
|
---|
138 | PCE ;Check to see if PCE is turned on
|
---|
139 | S X="PXAI" X ^%ZOSF("TEST") I '$T D:'$G(LRES) D WKL Q
|
---|
140 | . W !?5,"PCE Is not installed",!
|
---|
141 | S LRPCEON=$$PKGON^VSIT("PX")
|
---|
142 | I '$G(LRES),'LRPCEON D D WKL Q
|
---|
143 | . W !?5,"PCE is not turned on",!
|
---|
144 | S LRDLOC=+$$GET1^DIQ(69.9,"1,",.8,"I")
|
---|
145 | OOS ;Check to see if the LRDLOC is an OOS location
|
---|
146 | I $G(LRES),$P($G(^SC(LRDLOC,0)),U)'["LAB DIV " D D WKL Q
|
---|
147 | . W !?5,"DEFAULT LAB OOS LOCATION is not defined correctly",!
|
---|
148 | S LRESCPT=1
|
---|
149 | D:'$G(^TMP("LR",$J,"AK",0,1))'=DUZ_U_DT EN
|
---|
150 | I $G(LRES) Q $G(LRESCPT)
|
---|
151 | LOOP ;
|
---|
152 | Q:$G(LREND)
|
---|
153 | F D WLN Q:$G(LREND) I '$G(LRNOP) D CPTEN Q:$G(LREND)
|
---|
154 | D CLEAN Q
|
---|
155 | CPTEN ;Entry point from CPT API call
|
---|
156 | WKL S (LRNOP,LREND)=0 D READ^LRCAPES1
|
---|
157 | D DIS^LRCAPES1
|
---|
158 | I '$O(^TMP("LR",$J,"LRLST",0)) D END Q
|
---|
159 | LOAD ;Setup ^TMP("LRPXAPI" to load CPT workload
|
---|
160 | K LRXCPT,LRXTST,^TMP("LRPXAPI",$J)
|
---|
161 | S LRDUZ=LRPRO
|
---|
162 | I '$G(LRESCPT) S LRNOP="3^PCE Workload Capture Not Setup"
|
---|
163 | I $G(LRNOP) D D SENDWKL Q
|
---|
164 | . I '$D(LRQUIET) W !,$$CJ^XLFSTR("PCE Wkld Abort "_$P(LRNOP,U,2),IOM)
|
---|
165 | I $G(LRESCPT),'$G(LRNOP) D
|
---|
166 | . N AFTER812,D,D0,DDER,DI,DIC,DIG,DIH,DISL,DIV
|
---|
167 | . N I,LRACC,LRCNT,LRI,LRPCEN,PXALOOK,PXASUB,PXJ,PXJJ,LRCCT
|
---|
168 | . N SDT1,SPEL,SUBL,TYPEI,X,XPARSYS
|
---|
169 | . S LRTST=0
|
---|
170 | . F S LRTST=$O(^TMP("LR",$J,"LRLST",LRTST)) Q:LRTST<1 D
|
---|
171 | . . S (LRNLTN,CPT)=+$G(^TMP("LR",$J,"LRLST",LRTST)),LRTSTP=$P(^(LRTST),U,2,99)
|
---|
172 | . . D SET^LRCAPPH1
|
---|
173 | . D ADDPREV
|
---|
174 | SENDWKL ; Store LMIP workload
|
---|
175 | D SEND^LRCAPES1
|
---|
176 | L -^LRO(68,LRAA,1,LRAD,1,LRAN)
|
---|
177 | S LRNOP=0
|
---|
178 | Q
|
---|
179 | ADDPREV ;Add CPT quantities from PCE to current totals
|
---|
180 | N LRSTR2,LRIEN2,LRPX,LRCPT,LRXX,LRCPT2,LRCPT1,LRX1,LRQ1,LRQ2,LRQT,LRCT
|
---|
181 | S LRSTR2=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,"PCE"))
|
---|
182 | Q:'LRSTR2
|
---|
183 | K LRVIS S LRVIS=""
|
---|
184 | S LRCT=$L(LRSTR2,";")-1,LRVIS=$P(LRSTR2,";",LRCT)
|
---|
185 | F LRPX=1:1 S LRIEN2=$P(LRSTR2,";",LRPX) Q:LRIEN2="" D
|
---|
186 | .D GETCPT^PXAPIOE(LRIEN2,"LRCPT","ERR")
|
---|
187 | S LRXX=""
|
---|
188 | F S LRXX=$O(LRCPT(LRXX)) Q:LRXX="" D
|
---|
189 | .Q:$P(LRCPT(LRXX),"^",3)'=LRVIS
|
---|
190 | .S LRCPT2=""
|
---|
191 | .S LRCPT2=+$G(LRCPT(LRXX))
|
---|
192 | .D:LRCPT2
|
---|
193 | ..S (LRX1,LRQT)=0
|
---|
194 | ..F S LRX1=$O(^TMP("LRPXAPI",$J,"PROCEDURE",LRX1)) Q:LRX1=""!(LRQT) D
|
---|
195 | ...S LRCPT1=+$G(^TMP("LRPXAPI",$J,"PROCEDURE",LRX1,"PROCEDURE"))
|
---|
196 | ...I LRCPT1=LRCPT2 D
|
---|
197 | ....S LRQ1=$P(LRCPT(LRXX),"^",16)
|
---|
198 | ....S LRQ2=+$G(^TMP("LRPXAPI",$J,"PROCEDURE",LRX1,"QTY"))
|
---|
199 | ....S ^TMP("LRPXAPI",$J,"PROCEDURE",LRX1,"QTY")=LRQ1+LRQ2
|
---|
200 | ....S LRQT=1
|
---|
201 | Q
|
---|
202 | CLEAN ;Final Cleanup
|
---|
203 | K AFTER812,AGE,CPT,D,D0,DOB,DDER,DFN,DI,DIC,DIG,DIH,DIR,DIRUT
|
---|
204 | K DISL,DIRUT,DIU,DUOUT,DIV,DQ
|
---|
205 | K I,J,LRACC,LRCNT,LRI,POP,PXALOOK,PXASUB,PXJ,PXJJ
|
---|
206 | K SDT1,SPEL,SUBL,T1,TYPEI,X,XPARSYS
|
---|
207 | K ANS,CLN,CNT,FPRI,LRAA,LRAD,LRAN,LRANSX,LRANSY,LRCDT,LRCNT
|
---|
208 | K LRDFN,LRDPF,LRDLOC,LRDSSID,LRDSSLOC,LRDUZ,LREDT,LREND,LRES,LRESCPT
|
---|
209 | K LRIDT,LRIDIV,LRLLOC,LRLLOCX,LRLST,LRNINS,LRNLT,LRNLTN,LRNODE0,LRNOP,LROK
|
---|
210 | K LRPCEN,LRPCENON,LRPCEVSO,LRPKG,LRPRAC,LRPRO,LRRB,LRQ,LRSS,LRTREA,LRTST,LRURG
|
---|
211 | K LRSPECID,LRTSTP,LRUID,LRVBY
|
---|
212 | K LRVSITN,LRWRD,LRX,LRXCPT,LRXTST
|
---|
213 | K NODE,NODE0,PNM,SEX,SDFLAG,SSN,VA,X1,X2,X3
|
---|
214 | K ^TMP("LRMOD",$J)
|
---|
215 | K ^TMP("LR",$J,"AK"),^TMP("LR",$J,"LRLST")
|
---|
216 | K ^TMP("LRPXAPI",$J)
|
---|
217 | D KVAR^VADPT
|
---|
218 | Q
|
---|
219 | CPT(LRAA,LRAD,LRAN,LRPRO) ;AP Release entry point
|
---|
220 | ;LRAA=accession area, LRAD=accession date, LRAN=accession number
|
---|
221 | ;LRPRO=provider
|
---|
222 | N X,Y,I,LRI,LREDT,LRCDT,LRIDT,LRLLOCX,LRSPECID,DIC,LRNOP,LREND,LRES
|
---|
223 | S (LRLLOCX,LRLLOC)=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",6)
|
---|
224 | S DIC=44,DIC(0)="ONM",X=LRLLOC D ^DIC
|
---|
225 | I Y>1 S LRLLOC=+Y
|
---|
226 | I Y<1 D Q:$G(LREND)
|
---|
227 | . S DIC(0)="AEZNM" D ^DIC
|
---|
228 | . I Y<1 S LRNOP="4^Not an outpatient location",LREND=1 Q
|
---|
229 | . S LRLLOC=+Y
|
---|
230 | ;KLL - set LRDSSLOC to LRDLOC, instead of LRLLOC to resolve location
|
---|
231 | ; problem occurring in PCE
|
---|
232 | ;TAC - use accession area OOS location if one exists
|
---|
233 | S LRDSSLOC=+$$GET1^DIQ(68,LRAA_",",.8,"I")
|
---|
234 | S LRDSSLOC=$S($G(LRDSSLOC):LRDSSLOC,1:+$G(LRDLOC))
|
---|
235 | S LRDSSID=+$$GET1^DIQ(44,+LRLLOC,8,"I")
|
---|
236 | S LRNINS=$$GET1^DIQ(44,+LRLLOC,3,"I")
|
---|
237 | S LRNINS=$S(LRNINS:LRNINS,1:DUZ(2))
|
---|
238 | I '$G(LRIDT) S LRIDT=+$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",13.5,"I")
|
---|
239 | S LRUID=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",16)
|
---|
240 | S LRLLOCX=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",6)
|
---|
241 | S LRSPECID="Acc #: "_$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",15,"E")
|
---|
242 | S:$L($G(LRUID)) LRSPECID=LRSPECID_" UID: "_LRUID
|
---|
243 | S LREDT=$$GET1^DIQ(68.02,LRAN_","_LRAD_","_LRAA_",",9,"I")
|
---|
244 | I 'LREDT S LREDT=$$NOW^XLFDT
|
---|
245 | S LRCDT="Collection Date: "_$$FMTE^XLFDT(LREDT,1)
|
---|
246 | I '$G(LRESCPT) D Q
|
---|
247 | . D EN^DDIOL("CPT workload is not activated","","!?20")
|
---|
248 | I $S('$G(LRAA):1,'$G(LRAD):1,'$G(LRAN):1,'$G(LRPRO):1,1:0) Q
|
---|
249 | I +$G(^LRO(68,LRAA,1,LRAD,1,LRAN,0))'=LRDFN Q
|
---|
250 | D CPTEN
|
---|
251 | Q
|
---|