1 | OCXOCMPM ;SLC/RJS,CLA - ORDER CHECK CODE COMPILER (Compile Rule Element MetaCode) ;10/29/98 12:37
|
---|
2 | ;;3.0;ORDER ENTRY/RESULTS REPORTING;**32**;Dec 17,1997
|
---|
3 | ;; ;;ORDER CHECK EXPERT version 1.01 released OCT 29,1998
|
---|
4 | ;
|
---|
5 | EN() ;
|
---|
6 | ;
|
---|
7 | Q:$G(OCXWARN) 1
|
---|
8 | S OCXDLK=$O(^OCXS(860.6,"B","DATABASE LOOKUP",0))
|
---|
9 | S OCXEL=0 F S OCXEL=$O(^TMP("OCXCMP",$J,"ELEMENT",OCXEL)) Q:'OCXEL D Q:OCXWARN
|
---|
10 | .N OCXD1,OCXREC,OCXDFC,OCXCNT,OCXFCODE,OCXDFL,OCXSCAN
|
---|
11 | .S (OCXFCODE,OCXDFL)=""
|
---|
12 | .;
|
---|
13 | .I '$G(OCXAUTO) W:($X>60) ! W "."
|
---|
14 | .;
|
---|
15 | .M OCXREC=^OCXS(860.3,OCXEL) Q:'$D(OCXREC(0))
|
---|
16 | .S OCXNAM=$P(OCXREC(0),U,1) Q:'$L(OCXNAM)
|
---|
17 | .S OCXCON=$P(OCXREC(0),U,2) I '(OCXCON) D WARN^OCXOCMPV("Context not defined for Element...",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
18 | .I '(OCXCON) D WARN^OCXOCMPV("Context not defined for Element...",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
19 | .S OCXCONN=$P($G(^OCXS(860.6,+OCXCON,0)),U,1) I '$L(OCXCONN) D WARN^OCXOCMPV("Data context a '"_OCXCON_"' not defined in Data Context file...",4,OCXDF,$P($T(+1)," ",1)) Q
|
---|
20 | .S OCXCONA=$P($G(^OCXS(860.6,+OCXCON,0)),U,2) I '$L(OCXCONA) D WARN^OCXOCMPV("Data context abbreviation for '"_OCXCONN_"' not defined in Data Context file...",4,OCXDF,$P($T(+1)," ",1)) Q
|
---|
21 | .;
|
---|
22 | .I (OCXTRACE) D FILECODE("W:$G(OCXTRACE) !,||LNTAG||,?27,""Metacode Function MCE"_OCXEL_"() Execution trace. ""","Y")
|
---|
23 | .D FILECODE("N OCXRES","Y")
|
---|
24 | .D FILECODE("Q:'(|PATIENT IEN|) 0 I $D(^TMP(""OCXCHK"",$J,|PATIENT IEN|,"_(+OCXEL)_")) Q $G(^TMP(""OCXCHK"",$J,|PATIENT IEN|,"_(+OCXEL)_"))","Y")
|
---|
25 | .;
|
---|
26 | .I '(OCXCON=OCXDLK) D FILECODE("Q 0","Y")
|
---|
27 | .;
|
---|
28 | .I (OCXCON=OCXDLK) D
|
---|
29 | ..;
|
---|
30 | ..D FILECODE("S OCXRES("_(+OCXEL)_")=0","S")
|
---|
31 | ..;
|
---|
32 | ..; SORT PRIMARY DATA FIELDS
|
---|
33 | ..;
|
---|
34 | ..S OCXD1=0 F S OCXD1=$O(OCXREC("COND",OCXD1)) Q:'OCXD1 D
|
---|
35 | ...N OCXDF,OCXSUB
|
---|
36 | ...F OCXSUB=1,2,3 D
|
---|
37 | ....N OCXFREC S OCXDF=+$G(OCXREC("COND",OCXD1,"DFLD"_OCXSUB)) Q:'OCXDF
|
---|
38 | ....M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",OCXDF)
|
---|
39 | ....I '$D(OCXFREC(OCXCON)) S OCXFREC=OCXFREC-99999
|
---|
40 | ....I OCXDF,OCXFREC S OCXDFC(OCXFREC,OCXD1)=OCXDF,OCXDFL(OCXDF)=""
|
---|
41 | ..;
|
---|
42 | ..;
|
---|
43 | ..; GET PRIMARY DATA FIELD'S 'GET CODE'
|
---|
44 | ..;
|
---|
45 | ..S OCXCNT="" F S OCXCNT=$O(OCXDFC(OCXCNT),-1) Q:'OCXCNT D
|
---|
46 | ...S OCXD1=0 F S OCXD1=$O(OCXDFC(OCXCNT,OCXD1)) Q:'OCXD1 D Q:OCXWARN
|
---|
47 | ....N OCXDF,OCXD2,OCXFREC
|
---|
48 | ....S OCXDF=+$G(OCXDFC(OCXCNT,OCXD1)) Q:'OCXDF
|
---|
49 | ....I $D(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF,OCXCON)) M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",OCXDF,OCXCON)
|
---|
50 | ....E S OCXD2=0 F S OCXD2=$O(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF,OCXD2)) Q:'OCXD2 I $G(^(OCXD2,"DA MODE")) M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",OCXDF,OCXD2) Q
|
---|
51 | ....S OCXD2=0 F S OCXD2=$O(OCXFREC(OCXD2)) Q:'OCXD2 D FILECODE($G(OCXFREC(OCXD2)))
|
---|
52 | ....;
|
---|
53 | ....; GET EXPRESSION CONDITIONAL EVALUATION CODE
|
---|
54 | ....;
|
---|
55 | ....I $D(OCXFREC) D
|
---|
56 | .....N OCXCOD1,OCXCOD2,OCXCVAL,OCXFLDG,OCXFLDN,OCXFLDP,OCXFLDS,OCXDFLD
|
---|
57 | .....N OCXNAM,OCXOPER,OCXOPC,OCXD2,OCXD3,OCXP,OCXP1,OCXP2,OCXP3
|
---|
58 | .....;
|
---|
59 | .....S OCXOPER=$G(OCXREC("COND",OCXD1,"OPER"))
|
---|
60 | .....I '(OCXOPER) D WARN^OCXOCMPV("Operator/Function not defined...",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
61 | .....S OCXOPN=$P($G(^OCXS(863.9,OCXOPER,0)),U,1),OCXOPDT=$P($G(^OCXS(863.9,OCXOPER,0)),U,2)
|
---|
62 | .....I '(OCXOPDT) D WARN^OCXOCMPV("Data Type not defined for '"_OCXOPN_"' Operator",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
63 | .....I '$L($G(^OCXS(864.1,+OCXOPDT,0))) D WARN^OCXOCMPV("Data Type '"_OCXOPDT_"' not defined for '"_OCXOPN_"' Operator",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
64 | .....;
|
---|
65 | .....S OCXOPC=$$GETPARM^OCXOCMPE(39,OCXOPER,"OCXO GENERATE CODE FUNCTION")
|
---|
66 | .....I '$L(OCXOPC) D WARN^OCXOCMPV("'"_OCXOPN_"' Operator 'OCXO GENERATE CODE FUNCTION' parameter not defined",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
67 | .....S:'(OCXOPC=+OCXOPC) OCXOPC=$$GETIEN("^OCXS(863.7)",OCXOPC)
|
---|
68 | .....I '$D(^OCXS(863.7,+OCXOPC,0)) D WARN^OCXOCMPV("'"_OCXOPN_"' Operator 'OCXO GENERATE CODE FUNCTION' Public Function not defined",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
69 | .....S OCXP=$G(^OCXS(863.7,+OCXOPC,"EX")) I '$L(OCXP) D WARN^OCXOCMPV("Operator ("_(+OCXOPC)_") '"_$P($G(^OCXS(863.9,+OCXOPC,0)),U,1)_"' executable not defined",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
70 | .....S OCXD2=0 F S OCXD2=$O(^OCXS(863.7,+OCXOPC,"PAR",OCXD2)) Q:'OCXD2 D
|
---|
71 | ......N OCXPOS,OCXVNAM
|
---|
72 | ......S OCXPOS=+$G(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,"IN")) Q:'OCXPOS Q:$D(OCXP(OCXPOS))
|
---|
73 | ......S OCXVNAM=+$G(^OCXS(863.7,+OCXOPC,"PAR",OCXD2,0)) Q:'OCXVNAM
|
---|
74 | ......S OCXVNAM=$P($G(^OCXS(863.8,+OCXVNAM,0)),U,2) Q:'$L(OCXVNAM)
|
---|
75 | ......S OCXP(+OCXPOS)=OCXVNAM,OCXP(OCXVNAM)=""
|
---|
76 | ......;
|
---|
77 | .....D GETC^OCXOCMPE(OCXEL,OCXD1,.OCXP)
|
---|
78 | ..D FILECODE("E Q 0","Y")
|
---|
79 | ..;
|
---|
80 | ..; GATHER OUTPUT DATA FOR THIS ELEMENT-EVENT
|
---|
81 | ..;
|
---|
82 | ..S OCXDF=0 F S OCXDF=$O(^TMP("OCXCMP",$J,"ELEMENT",OCXEL,"DATA",OCXDF)) Q:'OCXDF D
|
---|
83 | ...N OCXCON,OCXFREC S OCXCON=$P($G(^OCXS(860.3,OCXEL,0)),U,2)
|
---|
84 | ...I $D(^TMP("OCXCMP",$J,"DATA FIELD",OCXDF,OCXDLK)) M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",OCXDF,OCXDLK)
|
---|
85 | ...E D
|
---|
86 | ....I '$G(OCXAUTO) D
|
---|
87 | .....W !
|
---|
88 | .....W !,"Database Lookup Method not defined for:"
|
---|
89 | .....W !," '"_$P($G(^OCXS(860.3,+OCXEL,0)),U,1)_"'"
|
---|
90 | .....W !," ( "_(+OCXDF)_" ) "_$P($G(^OCXS(860.4,+OCXDF,0)),U,1)
|
---|
91 | ....M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",OCXDF,OCXCON)
|
---|
92 | ...I '$L($G(OCXFREC("G"))) D WARN^OCXOCMPV("CMP2 Get data code not defined for '"_$P($G(^OCXS(860.4,+OCXDF,0)),U,1)_"' ( "_(+OCXDF)_" )",2,OCXEL,$P($T(+1)," ",1)) Q
|
---|
93 | ...S OCXDFL(OCXDF)=+$G(^TMP("OCXCMP",$J,"ELEMENT",OCXEL,"DATA",OCXDF))
|
---|
94 | ...S OCXD2=0 F S OCXD2=$O(OCXFREC(OCXD2)) Q:'OCXD2 I $L($G(OCXFREC(OCXD2))) D
|
---|
95 | ....D FILECODE(OCXFREC(OCXD2),$G(OCXFREC(OCXD2,"OPLIST")))
|
---|
96 | ..;
|
---|
97 | ..; FILE ELEMENT-EVENT IN ACTIVE PATIENT DATA FILE
|
---|
98 | ..;
|
---|
99 | ..S OCXDFL="",OCXDF=0 F S OCXDF=$O(OCXDFL(OCXDF)) Q:'OCXDF S:$L(OCXDFL) OCXDFL=OCXDFL_"," S OCXDFL=OCXDFL_OCXDF_$S(OCXDFL(OCXDF):"X",1:"")
|
---|
100 | ..;
|
---|
101 | ..D FILECODE("S OCXRES("_(+OCXEL)_")=11","S")
|
---|
102 | ..D FILECODE("M ^TMP(""OCXCHK"",$J,|PATIENT IEN|,"_(+OCXEL)_")=OCXRES("_(+OCXEL)_")","M")
|
---|
103 | ..D FILECODE("Q +OCXRES("_(+OCXEL)_")","Y")
|
---|
104 | .;
|
---|
105 | .; RESOLVE EXTRINSIC FUNCTON RUNTIME PARAMETERS
|
---|
106 | .;
|
---|
107 | .F D Q:'OCXSCAN Q:OCXWARN
|
---|
108 | ..S (OCXSCAN,OCXD2)=0 F S OCXD2=$O(OCXFCODE(OCXD2)) Q:'OCXD2 I $L(OCXFCODE(OCXD2)),(OCXFCODE(OCXD2)["|") D
|
---|
109 | ...N OCXPIEC,DFNAM,DFNUM,DFCODE
|
---|
110 | ...S DFCODE=OCXFCODE(OCXD2)
|
---|
111 | ...F OCXPIEC=2:2:$L(DFCODE,"|") S DFNAM=$P($P(DFCODE,"|",OCXPIEC),"|",1) I $L(DFNAM),'(DFNAM["""") S DFNAM(DFNAM)=""
|
---|
112 | ...S DFNAM="" F S DFNAM=$O(DFNAM(DFNAM)) Q:'$L(DFNAM) D
|
---|
113 | ....N DFBNAM,DFNUM,OCXFREC,OCXD3
|
---|
114 | ....S DFBNAM="|"_DFNAM_"|",OCXSCAN=1
|
---|
115 | ....S DFNUM=+$O(^OCXS(860.4,"B",DFNAM,0))
|
---|
116 | ....I 'DFNUM S DFNUM=+$O(^OCXS(860.4,"C",DFNAM,0))
|
---|
117 | ....I 'DFNUM D WARN^OCXOCMPV("Data field argument '"_DFNAM_"' not defined in Data Field file...",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
118 | ....I $D(^TMP("OCXCMP",$J,"DATA FIELD",DFNUM,OCXCON)) M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",DFNUM,OCXCON)
|
---|
119 | ....E I $D(^TMP("OCXCMP",$J,"DATA FIELD",DFNUM,OCXDLK)) M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",DFNUM,OCXDLK)
|
---|
120 | ....E S OCXD3=0 F S OCXD3=$O(^TMP("OCXCMP",$J,"DATA FIELD",DFNUM,OCXD3)) Q:'OCXD3 I $G(^(OCXD3,"DA MODE")) M OCXFREC=^TMP("OCXCMP",$J,"DATA FIELD",DFNUM,OCXD3) Q
|
---|
121 | ....I '$D(OCXFREC) D WARN^OCXOCMPV("Data field '"_DFNAM_"' get code not defined for '"_OCXCONN_" context...",3,OCXEL,$P($T(+1)," ",1)) Q
|
---|
122 | ....S OCXFREC($O(OCXFREC(99999),-1)+1)="I $L(OCXDF("_(+DFNUM)_"))"
|
---|
123 | ....S OCXD3=0 F S OCXD3=$O(OCXFREC(OCXD3)) Q:'OCXD3 D FILECODE($G(OCXFREC(OCXD3)),$G(OCXFREC(OCXD3,"OPLIST")),OCXD2)
|
---|
124 | ....F Q:'(DFCODE[DFBNAM) S DFCODE=$P(DFCODE,DFBNAM,1)_"OCXDF("_(+DFNUM)_")"_$P(DFCODE,DFBNAM,2,999)
|
---|
125 | ...S OCXFCODE(OCXD2)=DFCODE
|
---|
126 | ..;
|
---|
127 | ..; PURGE REDUNDANT CODE
|
---|
128 | ..;
|
---|
129 | ..S OCXD2=0 F S OCXD2=$O(OCXFCODE(OCXD2)) Q:'OCXD2 D
|
---|
130 | ...I (OCXFCODE(OCXD2)="||NOOP||") K OCXFCODE(OCXD2) Q
|
---|
131 | ...I '$D(OCXFCODE(OCXD2,"OPLIST")) D
|
---|
132 | ....I '(OCXFCODE(OCXD2)["OCXTRACE") S OCXFCODE(OCXD2,"OPLIST")=$E(OCXFCODE(OCXD2),1)
|
---|
133 | ....E S OCXFCODE(OCXD2,"OPLIST")="Y"
|
---|
134 | ...S OCXD3=OCXD2 F S OCXD3=$O(OCXFCODE(OCXD3)) Q:'OCXD3 D
|
---|
135 | ....Q:(OCXFCODE(OCXD2)["OCXBOOLV")
|
---|
136 | ....I (OCXFCODE(OCXD2)=OCXFCODE(OCXD3)) K OCXFCODE(OCXD3)
|
---|
137 | ..D REINDEX(.OCXFCODE,0)
|
---|
138 | .;
|
---|
139 | .; SAVE CODE IN ^TMP GLOBAL
|
---|
140 | .;
|
---|
141 | .D MC^OCXOCMPN(.OCXFCODE,OCXEL)
|
---|
142 | .;
|
---|
143 | .D REINDEX(.OCXFCODE,2)
|
---|
144 | .S OCXCOD0="MCE"_OCXEL
|
---|
145 | .S OCXD2=0 F S OCXD2=$O(OCXFCODE(OCXD2)) Q:'OCXD2 D
|
---|
146 | ..K OCXFCODE(OCXD2,"OPLIST")
|
---|
147 | ..S OCXFCODE(OCXD2)=" "_OCXFCODE(OCXD2)
|
---|
148 | .S OCXFCODE(1)=OCXCOD0_"() ; Verify Event/Element: "_$P($G(^OCXS(860.3,+OCXEL,0)),U,1)
|
---|
149 | .S OCXFCODE(2)=" ;"
|
---|
150 | .S OCXFCODE($O(OCXFCODE(" "),-1)+1)=" ;"
|
---|
151 | .S OCXD2=0 F S OCXD2=$O(OCXFCODE(OCXD2)) Q:'OCXD2 D
|
---|
152 | ..N TEMP
|
---|
153 | ..S TEMP=OCXFCODE(OCXD2)
|
---|
154 | ..K OCXFCODE(OCXD2)
|
---|
155 | ..S OCXFCODE(OCXD2,0)=TEMP
|
---|
156 | .M ^TMP("OCXCMP",$J,"INCLUDE",OCXCOD0)=OCXFCODE
|
---|
157 | ;
|
---|
158 | Q OCXWARN
|
---|
159 | ;
|
---|
160 | GETIEN(FILE,KEY) ;
|
---|
161 | ;
|
---|
162 | N IEN1,IEN2,LEN,SHORT
|
---|
163 | F LEN=$L(KEY):-1:0 I LEN Q:$D(@FILE@("B",$E(KEY,1,LEN)))
|
---|
164 | Q:'LEN 0 S SHORT=$E(KEY,1,LEN)
|
---|
165 | S IEN1=0 F S IEN1=$O(@FILE@("B",SHORT,IEN1)) Q:'IEN1 Q:($P($G(@FILE@(IEN1,0)),U,1)=KEY)
|
---|
166 | S IEN2=IEN1 F S IEN2=$O(@FILE@("B",SHORT,IEN2)) Q:'IEN2 Q:($P($G(@FILE@(IEN2,0)),U,1)=KEY)
|
---|
167 | ;
|
---|
168 | I IEN1,IEN2 Q -1
|
---|
169 | Q IEN1
|
---|
170 | ;
|
---|
171 | REINDEX(ARRAY,NDX2) ;
|
---|
172 | ;
|
---|
173 | N TEMP,NDX1 M TEMP=ARRAY K ARRAY
|
---|
174 | S NDX1="" F S NDX1=$O(TEMP(NDX1)) Q:'$L(NDX1) D
|
---|
175 | .I $L(TEMP(NDX1)) S NDX2=NDX2+1 M ARRAY(NDX2)=TEMP(NDX1)
|
---|
176 | Q
|
---|
177 | ;
|
---|
178 | FILECODE(CODE,OPLIST,INDEX) ;
|
---|
179 | ;
|
---|
180 | N OCXNDX
|
---|
181 | I $G(INDEX) D
|
---|
182 | .N PREV,HALF
|
---|
183 | .S PREV=$O(OCXFCODE(INDEX),-1),HALF=INDEX-PREV/2
|
---|
184 | .S OCXNDX=INDEX-HALF
|
---|
185 | E S OCXNDX=$O(OCXFCODE(""),-1)+1
|
---|
186 | S OCXFCODE(OCXNDX)=CODE
|
---|
187 | S:$L($G(OPLIST)) OCXFCODE(OCXNDX,"OPLIST")=OPLIST
|
---|
188 | Q
|
---|
189 | ;
|
---|