| 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
 | 
|---|