| [613] | 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 | 
|---|