| 1 | OCXOCMPD ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Sort Code Segments cont...) ;3/22/01  09:38
 | 
|---|
| 2 |  ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32,105**;Dec 17,1997
 | 
|---|
| 3 |  ;;  ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | EN() ;
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  N OCXELE,OCXD0,OCXD1,OCXD2
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  S OCXD0=0 F  S OCXD0=$O(^TMP("OCXCMP",$J,"RULE",OCXD0)) Q:'OCXD0  D  Q:OCXWARN
 | 
|---|
| 10 |  .N OCXR M OCXR=^OCXS(860.2,OCXD0)
 | 
|---|
| 11 |  .S OCXD1=0 F  S OCXD1=$O(^TMP("OCXCMP",$J,"RULE",OCXD0,OCXD1)) Q:'OCXD1  S OCXCODE=$G(^(OCXD1)) I $L(OCXCODE) D
 | 
|---|
| 12 |  ..N OCXNMSG,OCXCMSG,OCXNTF,OCXNOD0,OCXL,OCXD2,OCXCNT,OCXVAR,OCXCODE,OCXMCOD
 | 
|---|
| 13 |  ..S OCXLA="R"_OCXD0_"R"_OCXD1_"A",OCXLB="R"_OCXD0_"R"_OCXD1_"B"
 | 
|---|
| 14 |  ..S OCXCODE=" D ||LINE:"_$$LINE^OCXOCMP4(OCXLA)_"||"
 | 
|---|
| 15 |  ..;
 | 
|---|
| 16 |  ..S OCXD2=0 F OCXCNT=0:1 S OCXD2=$O(^TMP("OCXCMP",$J,"RULE",OCXD0,OCXD1,OCXD2)) Q:'OCXD2  D
 | 
|---|
| 17 |  ...I '$D(OCXELE(OCXD2)) D
 | 
|---|
| 18 |  ....I $G(OCXTRACE) D IN^OCXOCMP4("EL"_OCXD2," W:$G(OCXTRACE) !,||LNTAG||,?27,""Element Check for: ("_OCXD2_") '"_$P(^OCXS(860.3,OCXD2,0),U,1)_"'""")
 | 
|---|
| 19 |  ....I $G(OCXTRACE) D IN^OCXOCMP4("EL"_OCXD2," ;")
 | 
|---|
| 20 |  ....S OCXELE(OCXD2)=""
 | 
|---|
| 21 |  ...D IN^OCXOCMP4("EL"_OCXD2,OCXCODE_"   ; Check Relation #"_(+OCXD1)_" in Rule #"_(+OCXD0)_" '"_$P(OCXR(0),U,1)_"'")
 | 
|---|
| 22 |  ..;
 | 
|---|
| 23 |  ..D IN^OCXOCMP4(OCXLA," Q:$G(^OCXS(860.2,"_OCXD0_",""INACT""))")
 | 
|---|
| 24 |  ..D IN^OCXOCMP4(OCXLA," ;")
 | 
|---|
| 25 |  ..S OCXD2=0 F  S OCXD2=$O(^TMP("OCXCMP",$J,"RULE",OCXD0,OCXD1,"CODE",OCXD2)) Q:'OCXD2  S OCXCODE=$G(^(OCXD2)) D
 | 
|---|
| 26 |  ...F  Q:'(OCXCODE["@@@@")  S OCXCODE=$P(OCXCODE,"@@@@",1)_"||LINE:"_$$LINE^OCXOCMP4(OCXLB)_"||"_$P(OCXCODE,"@@@@",2,999)
 | 
|---|
| 27 |  ...D IN^OCXOCMP4(OCXLA," "_OCXCODE)
 | 
|---|
| 28 |  ..;
 | 
|---|
| 29 |  ..S OCXNOD0=$G(OCXR("R",OCXD1,0))
 | 
|---|
| 30 |  ..S OCXNMSG=$G(OCXR("R",OCXD1,"MSG")) S:'$P(OCXNOD0,U,3) OCXNMSG=""
 | 
|---|
| 31 |  ..S OCXCMSG=$G(OCXR("R",OCXD1,"OCMSG")) S:'$P(OCXNOD0,U,2) OCXCMSG=""
 | 
|---|
| 32 |  ..S OCXMCOD=$G(OCXR("R",OCXD1,"MCODE"))
 | 
|---|
| 33 |  ..;
 | 
|---|
| 34 |  ..I $G(OCXTRACE) D IN^OCXOCMP4(OCXLB," I $G(OCXTRACE),$D(OCXRULE("""_OCXLB_""")) W !,||LNTAG||,?27,""Rule '"_$P($G(OCXR(0)),U,1)_"' already triggered !!""")
 | 
|---|
| 35 |  ..D IN^OCXOCMP4(OCXLB," Q:$D(OCXRULE("""_OCXLB_"""))")
 | 
|---|
| 36 |  ..D IN^OCXOCMP4(OCXLB," ;")
 | 
|---|
| 37 |  ..;
 | 
|---|
| 38 |  ..I '$G(OCXAUTO) W:($X>60) ! W "."
 | 
|---|
| 39 |  ..;
 | 
|---|
| 40 |  ..I '($L(OCXCMSG)+$L(OCXNMSG)),'$L($G(OCXR("R",OCXD1,"RULE"))),'$L(OCXMCOD) D  Q
 | 
|---|
| 41 |  ...D IN^OCXOCMP4(OCXLB," ; Notification and order checking disabled for this")
 | 
|---|
| 42 |  ...D IN^OCXOCMP4(OCXLB," ; rule due to no Order Check or Notification message,")
 | 
|---|
| 43 |  ...D IN^OCXOCMP4(OCXLB," ; or execute code found in the Order Check Rule File (860.2)")
 | 
|---|
| 44 |  ..;
 | 
|---|
| 45 |  ..I $L($G(OCXR("R",OCXD1,"RULE"))) D
 | 
|---|
| 46 |  ...N OCXSCH,OCXTIME
 | 
|---|
| 47 |  ...S OCXSCH=$P(OCXR("R",OCXD1,"RULE"),U,1)
 | 
|---|
| 48 |  ...S OCXTIME=$P(OCXR("R",OCXD1,"RULE"),U,2)
 | 
|---|
| 49 |  ...;
 | 
|---|
| 50 |  ...D IN^OCXOCMP4(OCXLB," ;")
 | 
|---|
| 51 |  ...I ((OCXSCH="START")!(OCXSCH="CONTINUE")) D  Q
 | 
|---|
| 52 |  ....I '$L(OCXTIME) D  Q
 | 
|---|
| 53 |  .....D IN^OCXOCMP4(OCXLB," ; No code generated for '"_OCXSCH_"' rule schedule.")
 | 
|---|
| 54 |  .....D IN^OCXOCMP4(OCXLB," ; Time period not defined.")
 | 
|---|
| 55 |  .....D IN^OCXOCMP4(OCXLB," ;")
 | 
|---|
| 56 |  ....I '$L($$TIME^OCXOCMPQ(OCXTIME,OCXD0,OCXD1)) D  Q
 | 
|---|
| 57 |  .....D IN^OCXOCMP4(OCXLB," ; No code generated for '"_OCXSCH_"' rule schedule.")
 | 
|---|
| 58 |  .....D IN^OCXOCMP4(OCXLB," ; Invalid time period definition. -> "_OCXTIME)
 | 
|---|
| 59 |  .....D IN^OCXOCMP4(OCXLB," ;")
 | 
|---|
| 60 |  ....S OCXTIME=$$TIME^OCXOCMPQ(OCXTIME,OCXD0,OCXD1)
 | 
|---|
| 61 |  ....D IN^OCXOCMP4(OCXLB," ;  Add '"_$P($G(^OCXS(860.2,OCXD0,0)),U,1)_"' rule to")
 | 
|---|
| 62 |  ....D IN^OCXOCMP4(OCXLB," ;  Time Based Order Check Schedule for patient defined by 'DFN'.")
 | 
|---|
| 63 |  ....D IN^OCXOCMP4(OCXLB," ;")
 | 
|---|
| 64 |  ....D IN^OCXOCMP4(OCXLB," N OCXSDATE")
 | 
|---|
| 65 |  ....D IN^OCXOCMP4(OCXLB," S OCXSDATE=$$ADD2DATE("_OCXTIME_")")
 | 
|---|
| 66 |  ....D IN^OCXOCMP4(OCXLB," S ^OCXD(860.1,DFN,0)=DFN")
 | 
|---|
| 67 |  ....D IN^OCXOCMP4(OCXLB," S ^OCXD(860.1,DFN,2,0)=""^860.12D^""_OCXSDATE")
 | 
|---|
| 68 |  ....D IN^OCXOCMP4(OCXLB," S ^OCXD(860.1,DFN,2,OCXSDATE,1,0)=""^860.121P^"_OCXD0_"""")
 | 
|---|
| 69 |  ....D IN^OCXOCMP4(OCXLB," S ^OCXD(860.1,DFN,2,OCXSDATE,1,"_OCXD0_",0)="_OCXD0)
 | 
|---|
| 70 |  ....D IN^OCXOCMP4(OCXLB," S ^OCXD(860.1,""TIME"","_OCXD0_",DFN,OCXSDATE,"_OCXD0_")=""""")
 | 
|---|
| 71 |  ...;
 | 
|---|
| 72 |  ...I (OCXSCH="STOP") D
 | 
|---|
| 73 |  ....D IN^OCXOCMP4(OCXLB," ;  Delete all entries for rule '"_$P($G(^OCXS(860.2,OCXD0,0)),U,1)_"' from")
 | 
|---|
| 74 |  ....D IN^OCXOCMP4(OCXLB," ;  Time Based Order Check Schedule for patient defined by 'DFN'.")
 | 
|---|
| 75 |  ....D IN^OCXOCMP4(OCXLB," ; ")
 | 
|---|
| 76 |  ....D IN^OCXOCMP4(OCXLB," N OCXSDATE S OCXSDATE=0 F  S OCXSDATE=$O(^OCXD(860.1,DFN,2,OCXSDATE)) Q:'OCXSDATE  D")
 | 
|---|
| 77 |  ....D IN^OCXOCMP4(OCXLB," .Q:'$D(^OCXD(860.1,DFN,2,OCXSDATE,1,"_OCXD0_"))")
 | 
|---|
| 78 |  ....D IN^OCXOCMP4(OCXLB," .K ^OCXD(860.1,DFN,2,OCXSDATE,1,"_OCXD0_")")
 | 
|---|
| 79 |  ....D IN^OCXOCMP4(OCXLB," .K ^OCXD(860.1,DFN,2,OCXSDATE,1,""B"","_OCXD0_","_OCXD0_")")
 | 
|---|
| 80 |  ....D IN^OCXOCMP4(OCXLB," .K ^OCXD(860.1,""TIME"","_OCXD0_",DFN,OCXSDATE,"_OCXD0_")")
 | 
|---|
| 81 |  ..;
 | 
|---|
| 82 |  ..I '($L(OCXCMSG)+$L(OCXNMSG)+$L(OCXMCOD)) Q
 | 
|---|
| 83 |  ..;
 | 
|---|
| 84 |  ..D IN^OCXOCMP4(OCXLB," N OCXNMSG,OCXCMSG,OCXPORD,OCXFORD,OCXDATA,OCXNUM,OCXDUZ,OCXQUIT,OCXLOGS,OCXLOGD")
 | 
|---|
| 85 |  ..;
 | 
|---|
| 86 |  ..I $L(OCXCMSG) D  I 1
 | 
|---|
| 87 |  ...S OCXCMSG=$TR(OCXCMSG,"""","""""")
 | 
|---|
| 88 |  ...S OCXCMSG=$$XLATE^OCXOCMPQ(OCXCMSG,OCXD0,OCXD1)
 | 
|---|
| 89 |  ...D IN^OCXOCMP4(OCXLB," I ($G(OCXOSRC)=""CPRS ORDER PRESCAN"") S OCXCMSG=(+OCXPSD)_""^"_(+$P(OCXNOD0,U,2))_"^^"_$S(($E(OCXCMSG,1)=""""):$E(OCXCMSG,2,$L(OCXCMSG)),1:"""_"_OCXCMSG)_" I 1")
 | 
|---|
| 90 |  ...D IN^OCXOCMP4(OCXLB," E  S OCXCMSG="_OCXCMSG)
 | 
|---|
| 91 |  ..E  D IN^OCXOCMP4(OCXLB," S OCXCMSG=""""")
 | 
|---|
| 92 |  ..;
 | 
|---|
| 93 |  ..S OCXNMSG=$$XLATE^OCXOCMPQ(OCXNMSG,OCXD0,OCXD1)
 | 
|---|
| 94 |  ..S OCXMCOD=$$XLATE^OCXOCMPQ(OCXMCOD,OCXD0,OCXD1,1)
 | 
|---|
| 95 |  ..D IN^OCXOCMP4(OCXLB," S OCXNMSG="_OCXNMSG)
 | 
|---|
| 96 |  ..;
 | 
|---|
| 97 |  ..S OCXWARN=$$EN^OCXOCMPG(OCXLB,OCXCNT)
 | 
|---|
| 98 |  ..;
 | 
|---|
| 99 |  ..M OCXVAR("CODE")=^TMP("OCXCMP",$J,"C CODE",$$LINE^OCXOCMP4(OCXLA))
 | 
|---|
| 100 |  ..S OCXD2=0 F  S OCXD2=$O(OCXVAR("CODE",OCXD2)) Q:'OCXD2  D
 | 
|---|
| 101 |  ...N OCXD3
 | 
|---|
| 102 |  ...F OCXD3=1:1:$L(OCXVAR("CODE",OCXD2,0),"OCXLD") I +$P(OCXVAR("CODE",OCXD2,0),"OCXLD",OCXD3+1) S OCXVAR("VAR","OCXLD"_(+$P(OCXVAR("CODE",OCXD2),"OCXLD",OCXD3+1)))=""
 | 
|---|
| 103 |  ...F OCXD3=1:1:$L(OCXVAR("CODE",OCXD2,0),"OCXLV") I +$P(OCXVAR("CODE",OCXD2,0),"OCXLV",OCXD3+1) S OCXVAR("VAR","OCXLV"_(+$P(OCXVAR("CODE",OCXD2),"OCXLV",OCXD3+1)))=""
 | 
|---|
| 104 |  ...F OCXD3=1:1:$L(OCXVAR("CODE",OCXD2,0),"OCXLC") I +$P(OCXVAR("CODE",OCXD2,0),"OCXLC",OCXD3+1) S OCXVAR("VAR","OCXLC"_(+$P(OCXVAR("CODE",OCXD2),"OCXLC",OCXD3+1)))=""
 | 
|---|
| 105 |  ..S (OCXD2,OCXCODE)="" F  S OCXD2=$O(OCXVAR("VAR",OCXD2)) Q:'$L(OCXD2)  S:$L(OCXCODE) OCXCODE=OCXCODE_"," S OCXCODE=OCXCODE_OCXD2
 | 
|---|
| 106 |  ..I $L(OCXCODE) D IN^OCXOCMP4(OCXLA," N "_OCXCODE,"",11000),IN^OCXOCMP4(OCXLA," ;","",11000)
 | 
|---|
| 107 |  ..K OCXVAR("CODE") M OCXVAR("CODE")=^TMP("OCXCMP",$J,"C CODE",$$LINE^OCXOCMP4(OCXLA),0)
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  Q OCXWARN
 | 
|---|
| 110 |  ;
 | 
|---|