| 1 | OCXOCMP4 ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Sort Code Segments) ;1/05/04  14:38 | 
|---|
| 2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32,221**;Dec 17,1997 | 
|---|
| 3 | ;;  ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998 | 
|---|
| 4 | ; | 
|---|
| 5 | EN() ; | 
|---|
| 6 | ; | 
|---|
| 7 | Q:$G(OCXWARN) OCXWARN | 
|---|
| 8 | N OCXD0,OCXD1,OCXD2,OCXD3,OCXD4,OCXU | 
|---|
| 9 | S OCXU="UPDATE" | 
|---|
| 10 | Q:'$$LINE("LOG","-") 1 | 
|---|
| 11 | Q:'$$LINE("CDATA","-") 1 | 
|---|
| 12 | Q:'$$LINE(OCXU,"DFN","OCXSRC","OUTMSG") 1 | 
|---|
| 13 | Q:'$$LINE("SCAN") 1 | 
|---|
| 14 | Q:'$$LINE("TERM","OCXTERM","OCXLIST") 1 | 
|---|
| 15 | ; | 
|---|
| 16 | D SWAP^OCXOCMPH | 
|---|
| 17 | ; | 
|---|
| 18 | D TERM^OCXOCMPU | 
|---|
| 19 | ; | 
|---|
| 20 | D IN("LOG"," Q "_(+OCXDLOG)) | 
|---|
| 21 | D IN("CDATA"," Q """_(+OCXTRACE)_U_(+OCXTLOG)_U_(+OCXDLOG)_"""") | 
|---|
| 22 | ; | 
|---|
| 23 | I OCXTLOG D | 
|---|
| 24 | .D IN(OCXU," S OCXOTIME=$$TIMELOG(""O"",""UPDATE^OCXOZ01"")") | 
|---|
| 25 | .D IN(OCXU," ;") | 
|---|
| 26 | ; | 
|---|
| 27 | D IN(OCXU," K ^TMP(""OCXCHK"",$J)") | 
|---|
| 28 | D IN(OCXU," S ^TMP(""OCXCHK"",$J)=($P($H,"","",2)+($H*86400)+(2*60))_"" <- ^TMP ENTRY EXPIRATION DATE FOR ^OCXOPURG""") | 
|---|
| 29 | I '(OCXTLOG) D IN(OCXU," N OCXOERR,OCXOCMSG,OCXNDX,OCXDF,OCXX,OCXTSPI") | 
|---|
| 30 | I (OCXTLOG) D IN(OCXU," N OCXOERR,OCXOCMSG,OCXNDX,OCXDF,OCXX,OCXTSPI,OCXBOOLV") | 
|---|
| 31 | D IN(OCXU," S OCXTSPI="_+$G(OCXTSPI)) | 
|---|
| 32 | I $G(OCXTRACE) D | 
|---|
| 33 | .D IN(OCXU," I $G(OCXTRACE),'$G(DFN) W !,""Patient not defined !""") | 
|---|
| 34 | .D IN(OCXU," I $G(OCXTRACE),$G(DFN) W !,||LNTAG||,?30,""Data Field: Patient: ("",DFN,"") "",$P($G(^DPT(DFN,0)),""^"",1),"" !""") | 
|---|
| 35 | I 'OCXTLOG D IN(OCXU," Q:'$G(DFN)") | 
|---|
| 36 | I OCXTLOG D IN(OCXU," I '$G(DFN) S OCXOTIME=$$TIMELOG(""I"",""UPDATE^OCXOZ01"") Q") | 
|---|
| 37 | D IN("SCAN"," ;") | 
|---|
| 38 | D IN("SCAN"," N OCXD0,OCXRULE S OCXD0=0 F  S OCXD0=$O(^TMP(""OCXCHK"",$J,DFN,OCXD0)) Q:'OCXD0  D") | 
|---|
| 39 | D IN("SCAN"," .Q:'($G(^TMP(""OCXCHK"",$J,DFN,OCXD0))=1)") | 
|---|
| 40 | D IN("SCAN"," .N OCXPGM S OCXPGM=$O(^OCXS(860.3,""APGM"",OCXD0,"""")) Q:'$L(OCXPGM)  X ""I $L($T(""_OCXPGM_""))"" E  Q") | 
|---|
| 41 | D IN("SCAN"," .D @OCXPGM") | 
|---|
| 42 | D IN("SCAN"," .S ^TMP(""OCXCHK"",$J,DFN,OCXD0)=$G(^TMP(""OCXCHK"",$J,DFN,OCXD0))+10") | 
|---|
| 43 | D IN("SCAN"," K ^TMP(""OCXCHK"",$J)") | 
|---|
| 44 | ; | 
|---|
| 45 | S OCXCOD0=0 F  S OCXCOD0=$O(^TMP("OCXCMP",$J,"A CODE",OCXCOD0)) Q:'OCXCOD0  D  Q:OCXWARN | 
|---|
| 46 | .S OCXD1=0 F  S OCXD1=$O(^TMP("OCXCMP",$J,"A CODE",OCXCOD0,OCXD1)) Q:'OCXD1  S OCXCODE=$G(^(OCXD1)) I $L(OCXCODE) D | 
|---|
| 47 | ..I '$G(OCXAUTO) W:($X>60) ! W "." | 
|---|
| 48 | ..Q:(OCXCODE["OCXBOOLV") | 
|---|
| 49 | ..S OCXD2=OCXD1 F  S OCXD2=$O(^TMP("OCXCMP",$J,"A CODE",OCXCOD0,OCXD2)) Q:'OCXD2  D | 
|---|
| 50 | ...I (OCXCODE=$G(^TMP("OCXCMP",$J,"A CODE",OCXCOD0,OCXD2))) K ^TMP("OCXCMP",$J,"A CODE",OCXCOD0,OCXD2) | 
|---|
| 51 | ; | 
|---|
| 52 | I $G(OCXTRACE) D | 
|---|
| 53 | .D IN(OCXU," ;") | 
|---|
| 54 | .D IN(OCXU," I $G(OCXTRACE) D") | 
|---|
| 55 | .D IN(OCXU," .W !,||LNTAG||,?30,""Data Source: "",$G(OCXOSRC)") | 
|---|
| 56 | .;S CONTXT=$O(^OCXS(860.6,"B","DATABASE LOOKUP",0)) Q:'CONTXT 0 | 
|---|
| 57 | .S OCXD0="" F  S OCXD0=$O(^TMP("OCXCMP",$J,"DATA FIELD TRACE",OCXD0)) Q:'$L(OCXD0)  D | 
|---|
| 58 | ..N OCXTRLN,OCXTRSR | 
|---|
| 59 | ..S OCXTRLN="TRACE"_OCXD0,OCXTRSR=$$LINE(OCXTRLN) Q:'OCXTRSR | 
|---|
| 60 | ..I ($P($G(^OCXS(860.6,+OCXD0,0)),U,1)="DATABASE LOOKUP") D IN(OCXU," .D ||LINE:"_OCXTRSR_"||") I 1 | 
|---|
| 61 | ..E  D IN(OCXU," .I ($G(OCXOSRC)="""_$P($G(^OCXS(860.6,+OCXD0,0)),U,1)_""") D ||LINE:"_OCXTRSR_"||") | 
|---|
| 62 | ..S OCXD1="" F  S OCXD1=$O(^TMP("OCXCMP",$J,"DATA FIELD TRACE",OCXD0,OCXD1)) Q:'$L(OCXD1)  D | 
|---|
| 63 | ...S OCXD2="" F  S OCXD2=$O(^TMP("OCXCMP",$J,"DATA FIELD TRACE",OCXD0,OCXD1,OCXD2)) Q:'$L(OCXD2)  D | 
|---|
| 64 | ....S OCXD3="" F  S OCXD3=$O(^TMP("OCXCMP",$J,"DATA FIELD TRACE",OCXD0,OCXD1,OCXD2,OCXD3)) Q:'$L(OCXD3)  D | 
|---|
| 65 | .....S OCXD4="" F  S OCXD4=$O(^TMP("OCXCMP",$J,"DATA FIELD TRACE",OCXD0,OCXD1,OCXD2,OCXD3,OCXD4)) Q:'$L(OCXD4)  D | 
|---|
| 66 | ......D IN(OCXTRLN," "_^TMP("OCXCMP",$J,"DATA FIELD TRACE",OCXD0,OCXD1,OCXD2,OCXD3,OCXD4)) | 
|---|
| 67 | .D IN(OCXU," ;") | 
|---|
| 68 | ; | 
|---|
| 69 | S OCXD0=$$LINE("GETDF") | 
|---|
| 70 | S OCXD1=$$LINE("SWAPOUT") | 
|---|
| 71 | D IN(OCXU," I ($G(OCXOSRC)=""GENERIC HL7 MESSAGE ARRAY"") D ||LINE:"_OCXD0_"||,||LINE:"_OCXD1_"||(""OCXODATA"",.OCXODATA)","Y") | 
|---|
| 72 | ; | 
|---|
| 73 | S OCXCOD0=0 F  S OCXCOD0=$O(^TMP("OCXCMP",$J,"A CODE",OCXCOD0)) Q:'OCXCOD0  D  Q:OCXWARN | 
|---|
| 74 | .N OCXCODE,OCXLIST | 
|---|
| 75 | .S (OCXPAR,OCXD1)=0,OCXLLAB=OCXU | 
|---|
| 76 | .F  S OCXD1=$O(^TMP("OCXCMP",$J,"A CODE",OCXCOD0,OCXD1)) Q:'OCXD1  S OCXCODE=$G(^(OCXD1)),OCXLIST=$G(^(OCXD1,"OPLIST")) I $L(OCXCODE) D | 
|---|
| 77 | ..I '$G(OCXAUTO) W:($X>60) ! W "." | 
|---|
| 78 | ..S OCXD2=$$CODELKUP(OCXPAR,OCXCODE) | 
|---|
| 79 | ..I 'OCXD2 D | 
|---|
| 80 | ...S OCXD2=$O(^TMP("OCXCMP",$J,"B CODE",OCXPAR,99999),-1)+1 | 
|---|
| 81 | ...S ^TMP("OCXCMP",$J,"B CODE",OCXPAR,"B",$E(OCXCODE,1,50),OCXD2)=OCXCODE | 
|---|
| 82 | ...S OCXNPAR=$O(^TMP("OCXCMP",$J,"B CODE",99999),-1)+1 | 
|---|
| 83 | ...I ($O(^TMP("OCXCMP",$J,"A CODE",OCXCOD0,OCXD1))) S OCXCODE=OCXCODE_" D ||LINE:"_$$LINE("CHK"_OCXNPAR)_"||" S:$L(OCXLIST) OCXLIST=OCXLIST_"D" | 
|---|
| 84 | ...D IN(OCXLLAB," "_OCXCODE,OCXLIST,16000) | 
|---|
| 85 | ...S ^TMP("OCXCMP",$J,"B CODE",OCXPAR,OCXD2,"PAR")=OCXNPAR | 
|---|
| 86 | ...S ^TMP("OCXCMP",$J,"B CODE",OCXPAR,OCXD2)=OCXCODE | 
|---|
| 87 | ...S:$L(OCXLIST) ^TMP("OCXCMP",$J,"B CODE",OCXPAR,OCXD2,"OPLIST")=OCXLIST | 
|---|
| 88 | ..S OCXPAR=$G(^TMP("OCXCMP",$J,"B CODE",OCXPAR,OCXD2,"PAR")) | 
|---|
| 89 | ..S OCXLLAB="CHK"_OCXPAR | 
|---|
| 90 | ; | 
|---|
| 91 | S OCXWARN=$$EN^OCXOCMPD | 
|---|
| 92 | ; | 
|---|
| 93 | D IN(OCXU," ;","Y",18000) | 
|---|
| 94 | D IN(OCXU," D ||LINE:"_$$LINE("SCAN")_"||","Y",18000) | 
|---|
| 95 | D IN(OCXU," ;","Y",18000) | 
|---|
| 96 | D IN(OCXU," I $O(OCXOCMSG("""")) D","Y",18000) | 
|---|
| 97 | D IN(OCXU," .N OCXNDX1,OCXNDX2","Y",18000) | 
|---|
| 98 | D IN(OCXU," .S OCXNDX1=0 F  S OCXNDX1=$O(OCXOCMSG(OCXNDX1)) Q:'OCXNDX1  D","Y",18000) | 
|---|
| 99 | D IN(OCXU," ..S OCXNDX2=0 F  S OCXNDX2=$O(OUTMSG(OCXNDX2)) Q:'OCXNDX2  Q:(OUTMSG(OCXNDX2)=OCXOCMSG(OCXNDX1))","Y",18000) | 
|---|
| 100 | D IN(OCXU," ..Q:OCXNDX2  S OUTMSG($O(OUTMSG(999999),-1)+1)=OCXOCMSG(OCXNDX1)","Y",18000) | 
|---|
| 101 | D IN(OCXU," K ^TMP(""OCXCHK"",$J)","Y",18000) | 
|---|
| 102 | I OCXTLOG D IN(OCXU," S OCXOTIME=$$TIMELOG(""I"",""UPDATE^OCXOZ01"")","Y",18000) | 
|---|
| 103 | ; | 
|---|
| 104 | D IN(OCXU," ;","Y",18000) | 
|---|
| 105 | S OCXD0=$$LINE("SWAPIN") | 
|---|
| 106 | D IN(OCXU," I ($G(OCXOSRC)=""GENERIC HL7 MESSAGE ARRAY"") K OCXDF D ||LINE:"_OCXD0_"||(""OCXODATA"",.OCXODATA)","Y",18000) | 
|---|
| 107 | ; | 
|---|
| 108 | Q OCXWARN | 
|---|
| 109 | ; | 
|---|
| 110 | CODELKUP(OCXP,OCXC) ; | 
|---|
| 111 | ; | 
|---|
| 112 | N OCXD0 | 
|---|
| 113 | S OCXD0=0 F  S OCXD0=$O(^TMP("OCXCMP",$J,"B CODE",OCXP,"B",$E(OCXC,1,50),OCXD0))  Q:'OCXD0  Q:(OCXC=^(OCXD0)) | 
|---|
| 114 | Q +OCXD0 | 
|---|
| 115 | ; | 
|---|
| 116 | IN(LINE,CODE,OPLIST,STRT) ; | 
|---|
| 117 | ; | 
|---|
| 118 | N INDEX,NEXTLN | 
|---|
| 119 | S STRT=+$G(STRT,13000),INDEX=$$LINE(LINE) | 
|---|
| 120 | F NEXTLN=STRT:1 Q:'$D(^TMP("OCXCMP",$J,"C CODE",INDEX,NEXTLN)) | 
|---|
| 121 | S ^TMP("OCXCMP",$J,"C CODE",INDEX,NEXTLN,0)=CODE | 
|---|
| 122 | S:$L($G(OPLIST)) ^TMP("OCXCMP",$J,"C CODE",INDEX,NEXTLN,"OPLIST")=OPLIST | 
|---|
| 123 | ; | 
|---|
| 124 | Q | 
|---|
| 125 | ; | 
|---|
| 126 | LINE(X,ARG1,ARG2,ARG3,ARG4) ; | 
|---|
| 127 | ; | 
|---|
| 128 | N Y S Y=+$G(^TMP("OCXCMP",$J,"LINE","B",X)) Q:Y +Y | 
|---|
| 129 | ; | 
|---|
| 130 | Q +$$NEWLINE(X,$G(ARG1),$G(ARG2),$G(ARG3),$G(ARG4)) | 
|---|
| 131 | ; | 
|---|
| 132 | NEWLINE(X,ARG1,ARG2,ARG3,ARG4) ; | 
|---|
| 133 | ; | 
|---|
| 134 | N Y,REC | 
|---|
| 135 | S Y=0 | 
|---|
| 136 | I ($E(X,1,3)="LOG") S Y=1 | 
|---|
| 137 | E  I ($E(X,1,5)="CDATA") S Y=2 | 
|---|
| 138 | E  I ($E(X,1,6)="UPDATE") S Y=3 | 
|---|
| 139 | E  I (X="SWAPIN") S Y=10 | 
|---|
| 140 | E  I (X="SWAPOUT") S Y=10 | 
|---|
| 141 | E  I ($E(X,1,5)="GETDF") S Y=10 | 
|---|
| 142 | E  I ($E(X,1,4)="SCAN") S Y=20 | 
|---|
| 143 | E  I ($E(X,1,5)="TRACE") S Y=30 | 
|---|
| 144 | E  I ($E(X,1,8)="TERM") S Y=40 | 
|---|
| 145 | E  D | 
|---|
| 146 | .I ($E(X,1,3)="CHK") S Y=100000 | 
|---|
| 147 | .I ($E(X,1,2)="EL") S Y=200000 | 
|---|
| 148 | .I ($E(X,1)="R") S Y=300000 | 
|---|
| 149 | F Y=Y:1 Q:'$D(^TMP("OCXCMP",$J,"LINE",Y)) | 
|---|
| 150 | S ^TMP("OCXCMP",$J,"LINE",+Y)=X | 
|---|
| 151 | S ^TMP("OCXCMP",$J,"LINE","B",X)=+Y | 
|---|
| 152 | S REC(10000,0)=X_" ;" | 
|---|
| 153 | I $L($G(ARG1)) S REC(10000,0)=X_"("_$S(ARG1="-":"",1:ARG1)_") ;" | 
|---|
| 154 | I $L($G(ARG1)),$L($G(ARG2)) S REC(10000,0)=X_"("_ARG1_","_ARG2_") ;" | 
|---|
| 155 | I $L($G(ARG1)),$L($G(ARG2)),$L($G(ARG3)) S REC(10000,0)=X_"("_ARG1_","_ARG2_","_ARG3_") ;" | 
|---|
| 156 | I $L($G(ARG1)),$L($G(ARG2)),$L($G(ARG3)),$L($G(ARG4)) S REC(10000,0)=X_"("_ARG1_","_ARG2_","_ARG3_","_ARG4_") ;" | 
|---|
| 157 | ; | 
|---|
| 158 | S REC(10001,0)=" ;",REC(10002,0)=" ;" | 
|---|
| 159 | I '(X["UPDATE"),'(X["LOG"),'(X["CDATA") S REC(10003,0)=" Q:$G(OCXOERR)" | 
|---|
| 160 | ; | 
|---|
| 161 | I $G(OCXTRACE) D | 
|---|
| 162 | .S:(X["UPDATE") REC(10004,0)=" W:$G(OCXTRACE) !!,""**********************************************************"",!,||LNTAG||,?25,""Execution trace. """ | 
|---|
| 163 | .S:'(X["UPDATE") REC(10004,0)=" W:$G(OCXTRACE) !,||LNTAG||,?25,""Execution trace. "",$P($T("_X_"+1),"";"",2)" | 
|---|
| 164 | ; | 
|---|
| 165 | I OCXTLOG,'(X["UPDATE"),'(X["LOG") S REC(10005,0)=" S OCXERR=$$TIMELOG(""M"",""Line: "_X_U_"""_$P($T(+1),"" "",1))" | 
|---|
| 166 | ; | 
|---|
| 167 | I '(X["LOG"),'(X["CDATA") S REC(11000,0)=" ;",REC(19998,0)=" Q" | 
|---|
| 168 | S REC(19999,0)=" ;" | 
|---|
| 169 | M ^TMP("OCXCMP",$J,"C CODE",+Y)=REC | 
|---|
| 170 | Q (+Y) | 
|---|
| 171 | K ARG1,ARG2 | 
|---|
| 172 | ; | 
|---|