1 | LRCAPPH3 ;DALOI/FHS/PC - CHECK CPT CODE AND FILE POINTERS ; 5/1/99
|
---|
2 | ;;5.2;LAB SERVICE;**263,291**;Sep 27, 1994
|
---|
3 | ;Called from LRCAPPH,LRCAPPH4
|
---|
4 | EN ;
|
---|
5 | K ^TMP("LRCAPPH",$J),LRSEP S LRSEP(1)="==================="
|
---|
6 | S LRSEP(2)="****************"
|
---|
7 | K %DT S %DT="",X="T+5" D ^%DT S LRPGDT=Y
|
---|
8 | S ^TMP("LRCAPPH",$J,0)=Y_U_$$NOW^XLFDT_U_"LAB CPT DATA CHECKER"
|
---|
9 | S ^TMP("LRCAPPH60",$J,0)=Y_U_$$NOW^XLFDT_U_"LAB 60 CPT DATA CHECKER"
|
---|
10 | K %DT S %DT="" S X="T-1" D ^%DT S LRINADT=$$FMTE^XLFDT(Y,1)
|
---|
11 | S LRINADTX=Y K %DT
|
---|
12 | AA ;Look for CPT processing errors
|
---|
13 | D
|
---|
14 | . N LRAAN,LRCE,LRTXT,LRX
|
---|
15 | . S LRAAN="^LRO(69,""AA"")"
|
---|
16 | . F S LRAAN=$Q(@LRAAN) Q:$QS(LRAAN,2)'="AA" D
|
---|
17 | . . S LRX=@LRAAN Q:'LRX S LRCE=$QS(LRAAN,3)
|
---|
18 | . . K LRTXT
|
---|
19 | . . S LRTXT="Lab Order Number "_LRCE_" "
|
---|
20 | . . I LRX<1 D
|
---|
21 | . . . S LRTXT(1)=LRTXT_" was rejected by the PCE API "
|
---|
22 | . . I LRX=2 D
|
---|
23 | . . . S LRTXT(1)=LRTXT_"has no Institution for the ordering location."
|
---|
24 | . . I LRX=3 D
|
---|
25 | . . . S LRTXT(1)=LRTXT_"Provider is InActive."
|
---|
26 | . . I LRX=4 D
|
---|
27 | . . . S LRTXT(1)=LRTXT_"Not Processed "
|
---|
28 | . . . S LRTXT(2)=" - No DEFAULT LAB OOS LOCATION defined."
|
---|
29 | . . I LRX=5 D
|
---|
30 | . . . S LRTXT(1)=LRTXT_"Ordering Location "
|
---|
31 | . . . S LRTXT(2)=" has no STOP CODE NUMBER defined."
|
---|
32 | . . I $D(LRTXT(1)) S LRTXT(10)=LRSEP(1) D MSGSET("LRCAPPH",.LRTXT)
|
---|
33 | LAM ;Look for inactive Codes and broken pointers.
|
---|
34 | ;in ^LAM
|
---|
35 | N LRI,LRXDT,LRY,LRII
|
---|
36 | S LRI=0 F S LRI=$O(^LAM(LRI)) Q:LRI<1 D I '$D(ZTQUEUED) W:'(LRI#50) "."
|
---|
37 | . I '$G(LRACT) Q:'$O(^LAM(LRI,7,0))
|
---|
38 | . S LRII=0 F S LRII=$O(^LAM(LRI,4,LRII)) Q:LRII<1 D
|
---|
39 | . . I '$G(^LAM(LRI,4,LRII,0)) W:'$D(ZTQUEUED) !,"@@@@@@@@@@@",LRI,! D Q
|
---|
40 | . . . I '$L($P($G(^LAM(LRI,4,LRII,0)),U)) K ^LAM(LRI,4,LRII) Q
|
---|
41 | . . . N DR,DA,DIE,DIK
|
---|
42 | . . . S DA=LRII,DA(1)=LRI,DIK="^LAM("_LRI_",4," D ^DIK
|
---|
43 | . . K LRX S LRX=^LAM(LRI,4,LRII,0) D CK
|
---|
44 | LAB ;Look for inactive Codes in ^LAB
|
---|
45 | N LRJ,LRN,LRSPEC,LRBECPT,MSGTYPE,MSGFLAG,DEFAULT,HCPCS,Y
|
---|
46 | S LRJ=0 F S LRJ=$O(^LAB(60,LRJ)) Q:'LRJ D
|
---|
47 | . S MSGFLAG=0
|
---|
48 | . S X=^LAB(60,LRJ,0),LRN=$P(X,U,1)
|
---|
49 | . I ($P(X,U,4)'="CH")&($P(X,U,4)'="MI") Q
|
---|
50 | . S LRSPEC=0 F S LRSPEC=$O(^LAB(60,LRJ,1,LRSPEC)) Q:'LRSPEC D
|
---|
51 | . . K LRBECPT
|
---|
52 | . . D IACPT(LRJ,DT,LRSPEC)
|
---|
53 | . . Q:('$D(LRBECPT(LRJ)))
|
---|
54 | . . S X=$O(LRBECPT(LRJ,1,0)) Q:'X
|
---|
55 | . . S MSGTYPE="SPECIMEN ("_LRSPEC_") CPT"
|
---|
56 | . . D MSG2(MSGTYPE)
|
---|
57 | . S X=$G(^LAB(60,LRJ,1.1)) S DEFAULT=$P(X,U,1),HCPCS=$P(X,U,2)
|
---|
58 | . I HCPCS D
|
---|
59 | . . S MSGTYPE="HCPCS CPT"
|
---|
60 | . . S X=HCPCS,Y=$$CPT^ICPTCOD(X,,,) I '$P(Y,U,7) S X=$P(Y,U,2) D MSG2(MSGTYPE)
|
---|
61 | . I DEFAULT D
|
---|
62 | . . S MSGTYPE="DEFAULT CPT"
|
---|
63 | . . S X=DEFAULT,Y=$$CPT^ICPTCOD(X,,,) I '$P(Y,U,7) S X=$P(Y,U,2) D MSG2(MSGTYPE)
|
---|
64 | . I MSGFLAG D MSGSET("LRCAPPH60",.LRMSG)
|
---|
65 | Q
|
---|
66 | ;
|
---|
67 | IACPT(LRBETST,LRBECDT,LRSPEC) ; Get inactive specimen CPT
|
---|
68 | N A,ARR,LRBEAX,LRBEIEN,LRBEAR60,X
|
---|
69 | S LRBEIEN=LRSPEC_","_LRBETST_",",(LRI,LRBECPT)=""
|
---|
70 | D GETS^DIQ(60.01,LRBEIEN,"96*","I","LRBEAR60")
|
---|
71 | S A="" F S A=$O(LRBEAR60(60.196,A)) Q:A="" D
|
---|
72 | . Q:$G(LRBEAR60(60.196,A,1,"I"))=""
|
---|
73 | . S ARR($G(LRBEAR60(60.196,A,1,"I")))=$G(LRBEAR60(60.196,A,.01,"I"))
|
---|
74 | S X=$O(ARR(LRBECDT),-1) I X D
|
---|
75 | .S LRBEAX=ARR(X)
|
---|
76 | .S LRBEAX=$$CPT^ICPTCOD(LRBEAX,LRBECDT)
|
---|
77 | .I '$P(LRBEAX,U,7) S LRBECPT(LRBETST,1,$P(LRBEAX,U,2))="SPECIMEN CPT"
|
---|
78 | Q
|
---|
79 | ;
|
---|
80 | EN0 ;Entry point for scan 64, scan 60, and mail reports to G.LMI
|
---|
81 | ;Called from LRCAPPH
|
---|
82 | D EN
|
---|
83 | D MAIL
|
---|
84 | D MAIL2
|
---|
85 | END ;Called from LRCAPPH4
|
---|
86 | I $E($G(IOST),1,2)="P-" W @IOF
|
---|
87 | K DA,DIC,DIE,DIK,DR,I
|
---|
88 | K LRACT,LRCMT,LRINADT,LRINADTX,LRI,LRII,LRMSG,LRN,LRPGDT,LRTST,LRSEP,LRX
|
---|
89 | K LRTXT,X,XMTEXT,XMSUB,Y
|
---|
90 | K ^TMP("LRCAPPH",$J),^TMP("LRCAPPH60",$J)
|
---|
91 | D ^%ZISC
|
---|
92 | Q
|
---|
93 | ACTIVE ;Print only WKLD CODES that have associated test assigned
|
---|
94 | ;and do not have inactivation dates
|
---|
95 | S LRACT=1 D EN0
|
---|
96 | Q
|
---|
97 | CK ;
|
---|
98 | I '$G(LRACT) Q:$P(LRX,U,4)
|
---|
99 | K X,Y,DIC,LRMSG
|
---|
100 | F I=1:1:5 S LRX(I)=$P(LRX,U,I)
|
---|
101 | I LRX(2)="CPT" D Q
|
---|
102 | . S X=$P(LRX(1),";")
|
---|
103 | . S Y=$$CPT^ICPTCOD(X,,,) I $S('$P(Y,U,7):1,LRX(4):1,1:0) D
|
---|
104 | . . S ^TMP("LRCAPPH",$J,"ICPT",X)=""
|
---|
105 | . . S Y(0)=$P(Y,U,2,3)_"^^1"
|
---|
106 | . . D MSG
|
---|
107 | S DIC(0)="XOZ",X=+LRX(1),DIC=U_$P(LRX(1),";",2)
|
---|
108 | S:$E(LRX(2))="L" DIC("S")="I '$P($G(^(4)),U)"
|
---|
109 | D ^DIC
|
---|
110 | I Y<1 D MSG Q
|
---|
111 | I $G(LRX(4)) D MSG
|
---|
112 | Q
|
---|
113 | MSG ;
|
---|
114 | K LRMSG
|
---|
115 | S LRN=^LAM(LRI,0)
|
---|
116 | S LRCMT=$P($G(^TMP("LRCAPPH",$J,0)),U,4)+1
|
---|
117 | S LRMSG(LRCMT)=$P(LRN,U,2)_" ["_LRI_"] "_$P(LRN,U),LRCMT=LRCMT+1
|
---|
118 | I Y<1 D Q
|
---|
119 | . S LRMSG(LRCMT)="*** Has an invalid "_LRX(2)_" code of "_+X_" ."
|
---|
120 | . D TST
|
---|
121 | . I '$P(^LAM(LRI,4,LRII,0),U,4) S $P(^(0),U,4)=LRINADTX D
|
---|
122 | . . S LRCMT=LRCMT+1,LRMSG(LRCMT)="Inactivation date of "_LRINADT_" has been entered."
|
---|
123 | . S LRCMT=LRCMT+1,LRMSG(LRCMT)=LRSEP(1)
|
---|
124 | . D MSGSET("LRCAPPH",.LRMSG)
|
---|
125 | I $P($G(Y(0)),U,4) D
|
---|
126 | . N LRXDT
|
---|
127 | . S LRCMT=LRCMT+1,LRMSG(LRCMT)=$P(Y(0),U)_" "_$P(Y(0),U,2),LRCMT=LRCMT+1
|
---|
128 | . S LRMSG(LRCMT)="Is an inactive "_LRX(2)_" code."
|
---|
129 | . D TST
|
---|
130 | . S:'$P(^LAM(LRI,4,LRII,0),U,4) $P(^(0),U,4)=LRINADTX
|
---|
131 | . S LRXDT=$P(^LAM(LRI,4,LRII,0),U,4)
|
---|
132 | . S LRCMT=LRCMT+1,LRMSG(LRCMT)="Inactivation date of "_$$FMTE^XLFDT(LRXDT,1)_" has been entered."
|
---|
133 | . S LRCMT=LRCMT+1,LRMSG(LRCMT)=LRSEP(2)
|
---|
134 | . D MSGSET("LRCAPPH",.LRMSG)
|
---|
135 | Q
|
---|
136 | MAIL ;Send message to G.LMI local mail group
|
---|
137 | Q:'$O(^TMP("LRCAPPH",$J,0))
|
---|
138 | N DUZ,XMDUZ,XMSUB,XMTEXT
|
---|
139 | S LRCMT=$G(LRCMT)+1
|
---|
140 | S ^TMP("LRCAPPH",$J,LRCMT,0)="Listing of all offending codes:"
|
---|
141 | S LRCMT=$G(LRCMT)+1,^TMP("LRCAPPH",$J,LRCMT,0)=""
|
---|
142 | S LRC="^TMP(""LRCAPPH"",$J,""A"")" F S LRC=$Q(@LRC) Q:$QS(LRC,2)'=$J D
|
---|
143 | . S LRCMT=LRCMT+1,^TMP("LRCAPPH",$J,LRCMT,0)=" "_$QS(LRC,3)_" "_$QS(LRC,4)
|
---|
144 | S XMSUB=" NIGHTLY WKLD CODE CHECK REPORT "_$$FMTE^XLFDT($$NOW^XLFDT,"1S")
|
---|
145 | S XMY("G.LMI")="",XMTEXT="^TMP(""LRCAPPH"","_$J_","
|
---|
146 | D ^XMD
|
---|
147 | Q
|
---|
148 | TST ;
|
---|
149 | Q:'$O(^LAM(LRI,7,0))
|
---|
150 | K LRT N X
|
---|
151 | S LRCMT=$G(LRCMT)+1 S LRMSG(LRCMT)="Associated Tests"
|
---|
152 | S LRT=0 F S LRT=$O(^LAM(LRI,7,LRT)) Q:LRT<1 S LRTST=$G(^(LRT,0)) D
|
---|
153 | . S X=+LRTST
|
---|
154 | . S LRTST="^"_$P(LRTST,";",2)_$P(LRTST,";")_",0)",LRCMT=LRCMT+1
|
---|
155 | . S LRMSG(LRCMT)=" "_$P(@LRTST,U)_" {"_X_"}"
|
---|
156 | Q
|
---|
157 | MSGSET(SUB,TXT) ;SUB=subscript - TXT = array containing the message
|
---|
158 | N I ;
|
---|
159 | S LRCMT=$P($G(^TMP(SUB,$J,0)),U,4)
|
---|
160 | S I=0 F S I=$O(TXT(I)) Q:I<1 D
|
---|
161 | . S LRCMT=LRCMT+1,^TMP(SUB,$J,LRCMT,0)=TXT(I)
|
---|
162 | S $P(^TMP(SUB,$J,0),U,4)=LRCMT
|
---|
163 | Q
|
---|
164 | ;
|
---|
165 | MSG2(MSGTYPE) ;
|
---|
166 | I 'MSGFLAG D
|
---|
167 | . K LRMSG
|
---|
168 | . S LRCMT=$P($G(^TMP("LRCAPPH",$J,0)),U,4)+1,LRMSG(LRCMT)=" "
|
---|
169 | . S LRCMT=LRCMT+1,LRMSG(LRCMT)=$P(LRN,U,1)_" ["_LRJ_"]"
|
---|
170 | S LRCMT=LRCMT+1
|
---|
171 | S LRMSG(LRCMT)="*** Has an inactive "_MSGTYPE_" Code of "_X_".",MSGFLAG=1
|
---|
172 | Q
|
---|
173 | ;
|
---|
174 | MAIL2 ;Send message to G.LMI local mail group
|
---|
175 | N DUZ,XMDUZ,XMSUB,XMTEXT
|
---|
176 | Q:'$O(^TMP("LRCAPPH60",$J,0))
|
---|
177 | S LRCMT=$G(LRCMT)+1,^TMP("LRCAPPH60",$J,LRCMT,0)=" "
|
---|
178 | S XMSUB="NIGHTLY FILE #60 CPT CODE CHECK REPORT "_$$FMTE^XLFDT($$NOW^XLFDT,"1S")
|
---|
179 | S XMY("G.LMI")="",XMTEXT="^TMP(""LRCAPPH60"","_$J_","
|
---|
180 | D ^XMD
|
---|
181 | Q
|
---|