1 | HLUCM002 ;CIOFO-O/LJA - HL7/Capacity Mgt API ;2/27/01 10:15
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**79,88,103**;Oct 13, 1995
|
---|
3 | ;
|
---|
4 | PRINTREG ; Print data in ^TMP(SUB,...) to screen
|
---|
5 | ; SUB,JOBN -- req
|
---|
6 | N DEB,GBL,IOINHI,IOINORM,JOBN,SUB,TOT,WAY,X,XTMPGBL
|
---|
7 | ;
|
---|
8 | S X="IOINHI;IOINORM" D ENDR^%ZISS
|
---|
9 | ;
|
---|
10 | W @IOF,$$CJ^XLFSTR("Print Totals Report & Debug Data to Screen",IOM)
|
---|
11 | W !,$$REPEAT^XLFSTR("=",IOM)
|
---|
12 | ;
|
---|
13 | S XTMPGBL=""
|
---|
14 | ;
|
---|
15 | ; What is the SUB for the Totals Report...
|
---|
16 | S SUB=$$SUB
|
---|
17 | I SUB']"" W !!,"OK! No ^TMP(TOTALS,$J) totals report will be printed..."
|
---|
18 | I SUB]"" D PTOT
|
---|
19 | ;
|
---|
20 | ; Debug data...
|
---|
21 | I '$D(^TMP($J,"HLUCMSTORE")) D
|
---|
22 | . W !!,"No ^TMP($J,""HLUCMSTORE"") debug data exists..."
|
---|
23 | I $D(^TMP($J,"HLUCMSTORE")) D PSTORE
|
---|
24 | ;
|
---|
25 | I SUB']"",'$D(^TMP($J,"HLUCMSTORE")) D QUIT ;->
|
---|
26 | . S X=$$BTE^HLCSMON("Press RETURN to exit... ",1)
|
---|
27 | ;
|
---|
28 | QUIT:$$BTE^HLCSMON("Press RETURN to restart, or '^' to exit... ",1) ;->
|
---|
29 | ;
|
---|
30 | G PRINTREG ;->
|
---|
31 | ;
|
---|
32 | PSTORE ;
|
---|
33 | W !!,$$CJ^XLFSTR("----------- "_IOINHI_"Debug Data from ^TMP($J,""HLUCMSTORE"")"_IOINORM_" -----------",IOM)
|
---|
34 | R !!,"Print raw DEBUG DATA (Y/N): Yes// ",X:999 S:X="" X="Y" S DEB=$$UP^XLFSTR($E(X_" ")) Q:'$T!(DEB[U) ;->
|
---|
35 | I DEB="Y" D PRINTDBG^HLUCM090
|
---|
36 | ;
|
---|
37 | R !!,"Print filtered DEBUG DATA (Y/N): Yes// ",X:999 S:X="" X="Y" S DEB=$$UP^XLFSTR($E(X_" ")) Q:'$T!(DEB[U) ;->
|
---|
38 | I DEB="Y" D LOOPU^HLUCM004
|
---|
39 | Q
|
---|
40 | ;
|
---|
41 | PTOT ;
|
---|
42 | W !!,"You will be allowed to print report totals (from ^TMP(TOTALS,$J), and/or you"
|
---|
43 | W !,"may print the debug data (in ^TMP($J,""HLUCMSTORE"")."
|
---|
44 | W !!,$$CJ^XLFSTR("------------ "_IOINHI_"Report Totals from ^TMP("""_SUB_""",$J)"_IOINORM_" ------------",IOM)
|
---|
45 | R !!,"Print REPORT TOTALS (Y/N): Yes// ",X:999 S:X="" X="Y" S TOT=$$UP^XLFSTR($E(X_" ")) Q:'$T!(TOT[U) ;->
|
---|
46 | I TOT="Y" D
|
---|
47 | . S SUB="TOT",JOBN=$J
|
---|
48 | . I '$D(^TMP(SUB,JOBN)) S SUB="KMPDH"
|
---|
49 | . R !,"Include subtotals (Y/N): NO// ",WAY:999 QUIT:'$T!(WAY[U) ;->
|
---|
50 | . S:WAY']"" WAY="N"
|
---|
51 | . S WAY=$$UP^XLFSTR($E(WAY_" ")),WAY=$S(WAY="N":0,1:1)
|
---|
52 | . S X=$$XTMPGBL^HLUCM004(0) I X]"" S (GBL,XTMPGBL)=X W !!,"Printing from ",XTMPGBL,"..."
|
---|
53 | . D PRINT1
|
---|
54 | Q
|
---|
55 | ;
|
---|
56 | SUB() ; What subscript holds the ^TMP(SUB,$J) data?
|
---|
57 | N SUB
|
---|
58 | I $D(^TMP("KMPDH",$J)) QUIT "KMPDH" ;->
|
---|
59 | I $D(^TMP("TOT",$J)) QUIT "TOT" ;->
|
---|
60 | R !!,"Enter subscript holding the ^TMP(TOTALS,$J) data: ",SUB:999 Q:SUB[U!(SUB']"") "" ;->
|
---|
61 | Q SUB
|
---|
62 | ;
|
---|
63 | PRINT(SUB,JOBN,WAY) ; Print data in ^TMP(SUB,...) to screen
|
---|
64 | ; WAY -- 0 = No totals
|
---|
65 | ; 1 = Totals for every section
|
---|
66 | N L1,L2,L3
|
---|
67 | ;
|
---|
68 | S WAY=$S($G(WAY)'>0:0,$G(WAY)=1:1,1:0)
|
---|
69 | ;
|
---|
70 | S:$G(JOBN)'>0 JOBN=$J
|
---|
71 | I $G(SUB)']"" D QUIT ;->
|
---|
72 | . W !!,"You must pass in the initial subscript and $JOB number..."
|
---|
73 | . W !
|
---|
74 | PRINT1 D PRINT1^HLUCM090
|
---|
75 | ;
|
---|
76 | S GBL=$NA(^TMP($J,"HLUCMSTORE","T"))
|
---|
77 | S L1=0 F L2="CCX","CXC","CXX","XCC","XCX","XXC","XXX" I $D(@GBL@(L2)) S L1=1
|
---|
78 | QUIT:'L1 ;->
|
---|
79 | ;
|
---|
80 | W !!,"Some entries were not included in the totals. There are 3 possible reasons"
|
---|
81 | W !,"for entries being excluded: (1) The beginning time of a message or unit is"
|
---|
82 | W !,"before the report's start time, (2) The number of seconds to transmit the"
|
---|
83 | W !,"message is over 1799 seconds, and (3) The protocol or namespace doesn't meet"
|
---|
84 | W !,"the search criteria."
|
---|
85 | W !!,"Failure Reason",?30,"#Characters",?42,"#Msg/Units",?54,"#Seconds"
|
---|
86 | W !,$$REPEAT^XLFSTR("=",IOM)
|
---|
87 | ;
|
---|
88 | F LAST="CCX","CXC","CXX","XCC","XCX","XXC","XXX" I $G(@GBL@(LAST))]"" Q
|
---|
89 | ;
|
---|
90 | S TYP="XXX",DATA=$G(@GBL@(TYP)) I DATA]"" D
|
---|
91 | . D SHOW("Beginning time too early",DATA)
|
---|
92 | . D SHOW("Excessive xmit time")
|
---|
93 | . D SHOW("Prot/Nmsp mismatch","",1)
|
---|
94 | S TYP="XXC",DATA=$G(@GBL@("XXC")) I DATA]"" D
|
---|
95 | . D SHOW("Beginning time too early",DATA)
|
---|
96 | . D SHOW("Excessive xmit time","",1)
|
---|
97 | S TYP="XCX",DATA=$G(@GBL@("XCX")) I DATA]"" D
|
---|
98 | . D SHOW("Beginning time too early",DATA)
|
---|
99 | . D SHOW("Prot/Nmsp mismatch","",1)
|
---|
100 | S TYP="XCC",DATA=$G(@GBL@("XCC")) I DATA]"" D
|
---|
101 | . D SHOW("Beginning time too early",DATA,1)
|
---|
102 | S TYP="CXX",DATA=$G(@GBL@("CXX")) I DATA]"" D
|
---|
103 | . D SHOW("Excessive xmit time",DATA)
|
---|
104 | . D SHOW("Prot/Nmsp mismatch","",1)
|
---|
105 | S TYP="CXC",DATA=$G(@GBL@("CXC")) I DATA]"" D
|
---|
106 | . D SHOW("Excessive xmit time",DATA,1)
|
---|
107 | S TYP="CCX",DATA=$G(@GBL@("CCX")) I DATA]"" D
|
---|
108 | . D SHOW("Prot/Nmsp mismatch",DATA,1)
|
---|
109 | I L1!L2!L3 W !,$$REPEAT^XLFSTR("=",IOM),!,"Totals:",?30,$J(L1,7),?42,$J(L2,7),?54,$J(L3,7)
|
---|
110 | ;
|
---|
111 | Q
|
---|
112 | ;
|
---|
113 | SHOW(REA,DATA,LINE) ;
|
---|
114 | ; LAST,TYP -- req
|
---|
115 | S DATA=$G(DATA),LINE=$G(LINE)
|
---|
116 | W !,REA
|
---|
117 | I $G(DATA)]"" W ?30,$J($P(DATA,U),7),?42,$J($P(DATA,U,2),7),?54,$J($P(DATA,U,3),7)
|
---|
118 | I $G(LINE),TYP'=LAST W !,$$REPEAT^XLFSTR("-",IOM)
|
---|
119 | S L1=$G(L1)+$P(DATA,U),L2=$G(L2)+$P(DATA,U,2),L3=$G(L3)+$P(DATA,U,3)
|
---|
120 | QUIT
|
---|
121 | ;
|
---|
122 | ADD(TL) ; Add to TOT...
|
---|
123 | S $P(TOT,U)=$P(TOT,U)+$P(TL,U)
|
---|
124 | S $P(TOT,U,2)=$P(TOT,U,2)+$P(TL,U,2)
|
---|
125 | S $P(TOT,U,3)=$P(TOT,U,3)+$P(TL,U,3)
|
---|
126 | Q
|
---|
127 | ;
|
---|
128 | OKPAR(PAR) ; Is namespace or protocol OK?
|
---|
129 | S PAR=$G(PAR)
|
---|
130 | I PAR=1!(PAR=2) QUIT 1 ;->
|
---|
131 | I $$OK0CALL(PAR) QUIT 1 ;->
|
---|
132 | QUIT ""
|
---|
133 | ;
|
---|
134 | OK0CALL(PAR) ; Correct 0^IEN or 0^NAME call format?
|
---|
135 | I $E(PAR,1,2)="0^"&($E(PAR,3)]"") QUIT 1 ;->
|
---|
136 | QUIT ""
|
---|
137 | ;
|
---|
138 | TYPETMO(IEN772) ; Is this TCP, Mail (via TCP), or Other?
|
---|
139 | N D772,I773,MIEN
|
---|
140 | ;
|
---|
141 | ; RELATED MAILMAN MESSAGE field (0;5) in 772...
|
---|
142 | S D772=$G(^HL(772,+IEN772,0)) ; Get node
|
---|
143 | S MIEN=$P(D772,U,5) ; get Mailman IEN from field...
|
---|
144 | I MIEN QUIT "M" ;-> Mailman via TCP
|
---|
145 | ;
|
---|
146 | ; There are rare instances when RELATED MAILMAN MESSAGE field is
|
---|
147 | ; not filled in, but the LLP TYPE in 870 is Mailman. So, the next
|
---|
148 | ; check is needed...
|
---|
149 | ;
|
---|
150 | ; Get related 870 and check it's LLP TYPE...
|
---|
151 | I $P($G(^HLCS(870,+$$IEN870^HLUCM009(+IEN772),0)),U,3)=1 QUIT "M" ;->
|
---|
152 | ;
|
---|
153 | ; OK. Let's give up on proving this 772 entry a Mailman entry.
|
---|
154 | ; But, is it TCP?
|
---|
155 | ;
|
---|
156 | ; Check if TCP by 773 link...
|
---|
157 | S I773=$O(^HLMA("B",+IEN772,0))
|
---|
158 | I I773>0 QUIT "T" ;->
|
---|
159 | ;
|
---|
160 | QUIT "U" ; Other...
|
---|
161 | ;
|
---|
162 | TYPEIO(IEN772) ; Is this Input or Output or Unknown?
|
---|
163 | N D772,HLIO
|
---|
164 | S D772=$G(^HL(772,+IEN772,0))
|
---|
165 | S HLIO=$E($P(D772,U,4)_" ")
|
---|
166 | QUIT $S("IO"[HLIO:HLIO,1:"U")
|
---|
167 | ;
|
---|
168 | PROTNMSP(IEN772) ; Return PROT~NMSP value to store in ^TMP.
|
---|
169 | ; COND,IEN101,PNMSP -- req
|
---|
170 | N CT,FAIL,PCKG,CTPROT,PCKG,PROT
|
---|
171 | ;
|
---|
172 | S IEN101=$G(IEN101),PNMSP=$G(PNMSP)
|
---|
173 | ;
|
---|
174 | ; ======================== PROTOCOL ============================
|
---|
175 | ; Get actual protocol in IEN772 if not supposed to "lump"...
|
---|
176 | S PROT=$S(IEN101'=2:$$GETPROT^HLUCM050(+IEN772),1:"ZZZ")
|
---|
177 | ;
|
---|
178 | ; Don't lose count if supposed to check everything...
|
---|
179 | I IEN101=1!(IEN101=2) D
|
---|
180 | . I PROT']"" S PROT="ZZZ" QUIT ;->
|
---|
181 | . I IEN101=2 S PROT="ZZZ"
|
---|
182 | ;
|
---|
183 | ; Is the protocol countable? (Must also check namespace)
|
---|
184 | S CTPROT=$$CTPROT^HLUCM003(PROT)
|
---|
185 | ;
|
---|
186 | ; ======================== NAMESPACE ============================
|
---|
187 | ; Set package here and now...
|
---|
188 | S PCKG=$S(PNMSP'=2:$$GETNMSP^HLUCM050(+IEN772),1:"ZZZ")
|
---|
189 | ;
|
---|
190 | I PNMSP=1!(PNMSP=2) D
|
---|
191 | . I PCKG']"" S PCKG="ZZZ" QUIT ;->
|
---|
192 | . I PNMSP=2 S PCKG="ZZZ"
|
---|
193 | ;
|
---|
194 | S CTPCKG=$$CTPCKG^HLUCM003(PCKG)
|
---|
195 | ;
|
---|
196 | ;
|
---|
197 | ; Set up what should be returned...
|
---|
198 | S PROT=$S(PROT=2:"ZZZ",1:PROT),PCKG=$S(PCKG=2:"ZZZ",1:PCKG)
|
---|
199 | ; If MIXED make sure the ALL side of things is set to something
|
---|
200 | ; so the ALL side doesn't squelch a SPECIFIC match...
|
---|
201 | I $$MIXED D
|
---|
202 | . I $G(PNMSP)=1!($G(PNMSP)=2) D
|
---|
203 | . . QUIT:PROT]"" ;->
|
---|
204 | . . QUIT:'CTPROT ;-> Not to be counted anyway...
|
---|
205 | . . S PROT="ZZZ~0"
|
---|
206 | . I $G(IEN101)=1!($G(IEN101)=2) D
|
---|
207 | . . QUIT:PCKG]"" ;->
|
---|
208 | . . QUIT:'CTPCKG ;-> Not to be counted anyway...
|
---|
209 | . . S PCKG="ZZZ"
|
---|
210 | I '$$MIXED,COND="EITHER" D
|
---|
211 | . QUIT:$$ALL($G(PNMSP),$G(IEN101)) ;-> All 1s or 2s...
|
---|
212 | . I NMSPTYPE'=1 D ; Asked specifically...
|
---|
213 | . . QUIT:PROT]"" ;->
|
---|
214 | . . S PROT="ZZZ~0"
|
---|
215 | . I PROTYPE'=1 D ; Asked specifically...
|
---|
216 | . . QUIT:PCKG]"" ;->
|
---|
217 | . . S PCKG="ZZZ"
|
---|
218 | ;
|
---|
219 | ; If neither should be counted, don't...
|
---|
220 | I 'CTPROT&('CTPCKG) QUIT U ;->
|
---|
221 | ;
|
---|
222 | ; Either namespace or protocol matches, or both match...
|
---|
223 | ;
|
---|
224 | ; If BOTH namespace and protocol are required to match, don't count if one isn't a match...
|
---|
225 | I COND="BOTH" I 'CTPROT!('CTPCKG) QUIT U ;->
|
---|
226 | ;
|
---|
227 | ; If 1/2 & SPECIFIC (i.e., MIXED), then SPECIFIC trumps 1/2...
|
---|
228 | ; (If SPECIFIC not matched, it is not counted)
|
---|
229 | I $$MIXED D QUIT:FAIL U ;->
|
---|
230 | . S FAIL=1
|
---|
231 | . ; If ALL NMSPs to be counted, but specific PROT fails... BAD!
|
---|
232 | . I $G(PNMSP)=1!($G(PNMSP)=2) QUIT:'CTPROT ;->
|
---|
233 | . ; If ALL PROTs to be counted, but specific PCKG fails... BAD!
|
---|
234 | . I $G(IEN101)=1!($G(IEN101)=2) QUIT:'CTPCKG ;->
|
---|
235 | . S FAIL=0
|
---|
236 | ;
|
---|
237 | QUIT PROT_U_PCKG
|
---|
238 | ;
|
---|
239 | ALL(V1,V2) ; Are both 1 or 2?
|
---|
240 | S V1=$G(V1),V2=$G(V2)
|
---|
241 | QUIT:V1'=1&(V1'=2) "" ;->
|
---|
242 | QUIT:V2'=1&(V2'=2) "" ;->
|
---|
243 | QUIT 1
|
---|
244 | ;
|
---|
245 | MIXED() ; Is one 1/2 and the other SPECIFIC?
|
---|
246 | N V3
|
---|
247 | S V1=$G(PNMSP),V1=$S(V1]"":$S(V1=1!(V1=2):1,1:0),1:0)
|
---|
248 | S V2=$G(IEN101),V2=$S(V2]"":$S(V2=1!(V2=2):1,1:0),1:0)
|
---|
249 | S V1=$S(V1=1!(V1=2):1,1:0)
|
---|
250 | S V2=$S(V2=1!(V2=2):1,1:0)
|
---|
251 | S V3=V1+V2
|
---|
252 | QUIT $S(V3=1:1,1:"")
|
---|
253 | ;
|
---|
254 | PROT101(IEN772) ; Return 101 information...
|
---|
255 | N IEN,MIEN,NM
|
---|
256 | ;
|
---|
257 | ; Get normal protocol information
|
---|
258 | S IEN=$P($G(^HL(772,IEN772,0)),U,10)
|
---|
259 | S NM=$P($G(^ORD(101,+IEN,0)),U)
|
---|
260 | ;
|
---|
261 | ; Maybe this is a Mailman ptr only...
|
---|
262 | I NM']"",IEN'>0 D
|
---|
263 | . S MIEN=$P($G(^HL(772,+IEN772,0)),U,5) QUIT:MIEN'>0 ;->
|
---|
264 | . S NM="XMB",IEN=9999999
|
---|
265 | ;
|
---|
266 | QUIT $S(NM]""!(IEN>0):NM_"~"_IEN,1:"")
|
---|
267 | ;
|
---|
268 | EOR ; HLUCM002 - HL7/Capacity Mgt API ;2/27/01 10:15
|
---|