| 1 | KMPDHUA ;OAK/RAK - Remote Synchronous HL7 Protocol ;3/15/04  07:48
 | 
|---|
| 2 |  ;;2.0;CAPACITY MANAGEMENT TOOLS;;Mar 22, 2002
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | EN ;-entry point
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  N DIC,I,KMPDATE,KMPDNMSP,KMPDPROT,KMPDSRCH,POP,X,Y
 | 
|---|
| 7 |  N ZTDESC,ZTRTN,ZTSAVE,ZTSK,%ZIS
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ; option header
 | 
|---|
| 10 |  D HDR^KMPDUTL4(" Synchronous Remote Protocol Distribution ") W !!
 | 
|---|
| 11 |  ; select protocol
 | 
|---|
| 12 |  S DIC=101,DIC(0)="AELMQZ",DIC("A")="Select Protocol: "
 | 
|---|
| 13 |  D ^DIC Q:(+Y)<0  S KMPDPROT=Y
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; select namespace (package file)
 | 
|---|
| 16 |  D NMSPARRY(.KMPDNMSP) Q:'$D(KMPDNMSP)
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 |  ; select date range
 | 
|---|
| 19 |  D DATERNG^KMPDUTL2(.KMPDATE) Q:'KMPDATE
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ; element to rate protocols
 | 
|---|
| 22 |  K DIR
 | 
|---|
| 23 |  S DIR(0)="SO^1:Message Size;2:Character Transmission Rate;3:Message Transmission Rate"
 | 
|---|
| 24 |  S DIR("B")=1
 | 
|---|
| 25 |  D ^DIR Q:$G(Y)=""!($G(Y)="^")
 | 
|---|
| 26 |  S KMPDSRCH=$S(Y:Y_"^"_$G(Y(0)),1:Y)
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ; select output device.
 | 
|---|
| 29 |  S %ZIS="Q",%ZIS("A")="Device: ",%ZIS("B")="HOME"
 | 
|---|
| 30 |  W ! D ^%ZIS I POP W !,"No action taken." Q
 | 
|---|
| 31 |  ; if queued.
 | 
|---|
| 32 |  I $D(IO("Q")) K IO("Q") D  Q
 | 
|---|
| 33 |  .S ZTDESC="Synchronous Distribution Report"
 | 
|---|
| 34 |  .S ZTRTN="EN1^KMPDHUA"
 | 
|---|
| 35 |  .F I="KMPDATE","KMPDNMSP","KMPDPROT","KMPDSRCH" S ZTSAVE(I)=""
 | 
|---|
| 36 |  .D ^%ZTLOAD W:$G(ZTSK) !,"Task #",ZTSK
 | 
|---|
| 37 |  .D EXIT
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  D EN1
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 |  Q
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | EN1 ;-- entry point from taskman
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  Q:'$G(KMPDATE)
 | 
|---|
| 46 |  Q:'$D(KMPDNMSP)
 | 
|---|
| 47 |  Q:'$G(KMPDSRCH)
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  N END,ERROR,STR,X
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  S STR=$P(KMPDATE,U),END=$P(KMPDATE,U,2)
 | 
|---|
| 52 |  Q:'STR!('END)
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ; get data from hl7 api
 | 
|---|
| 55 |  W:'$D(ZTQUEUED) !,"Gathering HL7 data..."
 | 
|---|
| 56 |  K ^TMP("KMPDH",$J),^TMP("KMPDH-1",$J)
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  D DATA,PRINT,EXIT
 | 
|---|
| 59 |  ;
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | DATA ;
 | 
|---|
| 63 |  ; if 'all' namespaces
 | 
|---|
| 64 |  I $G(KMPDNMSP(0))="*" D 
 | 
|---|
| 65 |  .S X=$$CMF^HLUCM(STR,END,1,KMPDPROT,"KMPDH","EITHER",.ERROR)
 | 
|---|
| 66 |  ; if 'specific' namespaces
 | 
|---|
| 67 |  E  D 
 | 
|---|
| 68 |  .S X=$$CMF^HLUCM(STR,END,.KMPDNMSP,KMPDPROT,"KMPDH","BOTH",.ERROR)
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  ; determine search list
 | 
|---|
| 71 |  S FAC=""
 | 
|---|
| 72 |  F  S FAC=$O(^TMP("KMPDH",$J,"RFAC","LR","R",FAC)) Q:FAC=""  D 
 | 
|---|
| 73 |  .S NMSP=""
 | 
|---|
| 74 |  .F  S NMSP=$O(^TMP("KMPDH",$J,"RFAC","LR","R",FAC,NMSP)) Q:NMSP=""  S TOT=^(NMSP) D 
 | 
|---|
| 75 |  ..; 1 - message size = chr/message
 | 
|---|
| 76 |  ..; 2 - charater transmission rate - chr/sec/msg
 | 
|---|
| 77 |  ..; 3 - message transmission rate - sec/msg
 | 
|---|
| 78 |  ..S SRCH=""
 | 
|---|
| 79 |  ..I (+KMPDSRCH)=1 S SRCH=$P(TOT,U)/$P(TOT,U,2)
 | 
|---|
| 80 |  ..I (+KMPDSRCH)=2 S SRCH=($P(TOT,U)/$P(TOT,U,3))/$P(TOT,U,2)
 | 
|---|
| 81 |  ..I (+KMPDSRCH)=3 S SRCH=$P(TOT,U,3)/$P(TOT,U,2)
 | 
|---|
| 82 |  ..Q:SRCH=""
 | 
|---|
| 83 |  ..S ^TMP("KMPDH-1",$J,SRCH,FAC,NMSP)=""
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  Q
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | EXIT ;
 | 
|---|
| 88 |  S:$D(ZTQUEUED) ZTREQ="@"
 | 
|---|
| 89 |  K KMPDATE,KMPDNMSP,KMPDPROT,KMPDSRCH
 | 
|---|
| 90 |  K ^TMP("KMPDH",$J),^TMP("KMPDH-1",$J)
 | 
|---|
| 91 |  D ^%ZISC
 | 
|---|
| 92 |  Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 | PRINT ;-- print sync/facility data
 | 
|---|
| 95 |  N DATA,DATE,FAC,I,J,NMSP,PROT,RANK,SRCH
 | 
|---|
| 96 |  D HDR
 | 
|---|
| 97 |  I '$D(^TMP("KMPDH-1",$J)) W !?5," No Data to Report" Q
 | 
|---|
| 98 |  S SRCH="A",RANK=1
 | 
|---|
| 99 |  F  S SRCH=$O(^TMP("KMPDH-1",$J,SRCH),-1) Q:'SRCH  D 
 | 
|---|
| 100 |  .W !,RANK,".",?5,$J($FN(SRCH,",",$S((+KMPDSRCH)=3:2,1:0)),10)
 | 
|---|
| 101 |  .S FAC="",RANK=RANK+1
 | 
|---|
| 102 |  .F  S FAC=$O(^TMP("KMPDH-1",$J,SRCH,FAC)) Q:FAC=""  D 
 | 
|---|
| 103 |  ..W ?17,$E($P(FAC,"~",2),1,18) S NMSP=""
 | 
|---|
| 104 |  ..F  S NMSP=$O(^TMP("KMPDH-1",$J,SRCH,FAC,NMSP)) Q:NMSP=""  D 
 | 
|---|
| 105 |  ...W ?37,NMSP S DATE=0 K TOT
 | 
|---|
| 106 |  ...F  S DATE=$O(^TMP("KMPDH",$J,"RFAC","LR","R",FAC,NMSP,DATE)) Q:'DATE  D 
 | 
|---|
| 107 |  ....S PROT=""
 | 
|---|
| 108 |  ....F  S PROT=$O(^TMP("KMPDH",$J,"RFAC","LR","R",FAC,NMSP,DATE,PROT)) Q:PROT=""  S DATA=^(PROT) D 
 | 
|---|
| 109 |  .....; tcp/mail/unknown
 | 
|---|
| 110 |  .....S DATA("T")=$G(^TMP("KMPDH",$J,"HR","TM","T",FAC,DATE,NMSP,PROT))
 | 
|---|
| 111 |  .....S DATA("M")=$G(^TMP("KMPDH",$J,"HR","TM","M",FAC,DATE,NMSP,PROT))
 | 
|---|
| 112 |  .....S DATA("TMU")=$G(^TMP("KMPDH",$J,"HR","TM","U",FAC,DATE,NMSP,PROT))
 | 
|---|
| 113 |  .....; incoming/outgoing/unknown
 | 
|---|
| 114 |  .....S DATA("I")=$G(^TMP("KMPDH",$J,"NMSP","IO","I",FAC,NMSP,DATE,PROT))
 | 
|---|
| 115 |  .....S DATA("O")=$G(^TMP("KMPDH",$J,"NMSP","IO","O",FAC,NMSP,DATE,PROT))
 | 
|---|
| 116 |  .....S DATA("IOU")=$G(^TMP("KMPDH",$J,"NMSP","IO","U",FAC,NMSP,DATE,PROT))
 | 
|---|
| 117 |  .....; calculate sub-totals
 | 
|---|
| 118 |  .....F I=1:1:3 D 
 | 
|---|
| 119 |  ......S $P(TOT,U,I)=$P($G(TOT),U,I)+$P(DATA,U,I)
 | 
|---|
| 120 |  ......S $P(TOT("T"),U,I)=$P($G(TOT("T")),U,I)+$P(DATA("T"),U,I)
 | 
|---|
| 121 |  ......S $P(TOT("M"),U,I)=$P($G(TOT("M")),U,I)+$P(DATA("M"),U,I)
 | 
|---|
| 122 |  ......S $P(TOT("TMU"),U,I)=$P($G(TOT("TMU")),U,I)+$P(DATA("TMU"),U,I)
 | 
|---|
| 123 |  ......S $P(TOT("I"),U,I)=$P($G(TOT("I")),U,I)+$P(DATA("I"),U,I)
 | 
|---|
| 124 |  ......S $P(TOT("O"),U,I)=$P($G(TOT("O")),U,I)+$P(DATA("O"),U,I)
 | 
|---|
| 125 |  ......S $P(TOT("IOU"),U,I)=$P($G(TOT("IOU")),U,I)+$P(DATA("IOU"),U,I)
 | 
|---|
| 126 |  ...;
 | 
|---|
| 127 |  ...; back to NMSP level
 | 
|---|
| 128 |  ...;
 | 
|---|
| 129 |  ...W ?45,$J($FN($P(TOT,U),",",0),9)
 | 
|---|
| 130 |  ...W ?56,$J($FN($P(TOT,U,2),",",0),9)
 | 
|---|
| 131 |  ...W ?67,$J($FN($P(TOT,U,3),",",0),9)
 | 
|---|
| 132 |  ...W !
 | 
|---|
| 133 |  ...F I="T","M","TMU","I","O","IOU" D 
 | 
|---|
| 134 |  ....W ! W:I="I"!(I="L") !
 | 
|---|
| 135 |  ....W ?21,$S(I="T":"TCP",I="M":"Mail",I="TMU":"T/M Unknown",1:"")
 | 
|---|
| 136 |  ....W ?21,$S(I="I":"Incoming",I="O":"Outgoing",I="IOU":"I/O Unknown",1:"")
 | 
|---|
| 137 |  ....F J=1:1:3 W ?$S(J=1:45,J=2:56,1:67),$J($FN($P($G(TOT(I)),U,J),",",0),9)
 | 
|---|
| 138 |  ..W !
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  Q
 | 
|---|
| 141 |  ;
 | 
|---|
| 142 | HDR ;
 | 
|---|
| 143 |  S KMPDATE=$G(KMPDATE)
 | 
|---|
| 144 |  S KMPDPROT=$G(KMPDPROT)
 | 
|---|
| 145 |  S KMPDSRCH=$G(KMPDSRCH)
 | 
|---|
| 146 |  W @IOF
 | 
|---|
| 147 |  N X
 | 
|---|
| 148 |  S X=$$SITE^VASITE,X=$P(X,U,2)_" ("_$P(X,U)_")"
 | 
|---|
| 149 |  W !?(80-$L(X)\2),X,?62,"Printed: ",$$FMTE^XLFDT(DT,2)
 | 
|---|
| 150 |  W !?21,"Synchronous Remote Protocol Distribution"
 | 
|---|
| 151 |  S X="'"_$P(KMPDPROT,"^",2)_"'"
 | 
|---|
| 152 |  W !?((80-$L(X))\2),X
 | 
|---|
| 153 |  S X=$P($P(KMPDATE,U,3),"@")_": "_$P($P(KMPDATE,U,3),"@",2)
 | 
|---|
| 154 |  S X=X_" - "_$P($P(KMPDATE,U,4),"@")_": "_$P($P(KMPDATE,U,4),"@",2)
 | 
|---|
| 155 |  W !?(80-$L(X)\2),X
 | 
|---|
| 156 |  S X=$P(KMPDSRCH,U)_" - "_$P(KMPDSRCH,U,2)
 | 
|---|
| 157 |  W !?((80-$L(X))\2),X
 | 
|---|
| 158 |  S X=$S((+KMPDSRCH)=1:"  Chr/Msg",(+KMPDSRCH)=2:"Ch/Sc/Mg",(+KMPDSRCH)=3:"  Sec/Msg",1:"OTHER")
 | 
|---|
| 159 |  W !
 | 
|---|
| 160 |  W !,"Rank",?6,X,?17,"Remote Facility",?37,"Nmsp",?45,$J("Chrs",9),?56,$J("Messages",9),?67,$J("Seconds",9)
 | 
|---|
| 161 |  W !,"----",?6,"---------",?17,"------------------",?37,"----",?45,"---------",?56,"---------",?67,"---------"
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  Q
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 | NMSPARRY(KMPDNMSP) ;-- namespace arry
 | 
|---|
| 166 |  K KMPDNMSP
 | 
|---|
| 167 |  N DIC,NM1,NMSP,PKG,X,Y
 | 
|---|
| 168 |  S DIC=9.4,DIC(0)="AEMQZ",DIC("A")="Select Namespace: "
 | 
|---|
| 169 |  W ! D SELECT^KMPDUT4("KMPDNMSP",1,5)
 | 
|---|
| 170 |  Q:$G(KMPDNMSP(0))=""
 | 
|---|
| 171 |  Q:KMPDNMSP(0)'="*"&($O(KMPDNMSP(0))="")
 | 
|---|
| 172 |  I KMPDNMSP(0)'="*" K KMPDNMSP(0),NM1 D 
 | 
|---|
| 173 |  .S I="" F  S I=$O(KMPDNMSP(I)) Q:I=""  S PKG=KMPDNMSP(I) D:PKG 
 | 
|---|
| 174 |  ..S NMSP=$P($G(^DIC(9.4,PKG,0)),U,2)
 | 
|---|
| 175 |  ..S:NMSP'="" NM1(NMSP)=PKG
 | 
|---|
| 176 |  ..K KMPDNMSP(I)
 | 
|---|
| 177 |  .M KMPDNMSP=NM1
 | 
|---|
| 178 |  ;
 | 
|---|
| 179 |  Q
 | 
|---|