| [613] | 1 | LA7UTILA ;DALOI/JMC - Browse UI message ; 6/19/96 09:00 | 
|---|
|  | 2 | ;;5.2;AUTOMATED LAB INSTRUMENTS;**23,27,46,64**;Sep 27, 1994 | 
|---|
|  | 3 | ; | 
|---|
|  | 4 | EN ; Select a Universal Interface message to browse. | 
|---|
|  | 5 | D EXIT ; Housekeeping before we start. | 
|---|
|  | 6 | S DIC="^LAHM(62.49,",DIC("W")="W ""   "",$P(^(0),U,6)" | 
|---|
|  | 7 | S VAUTVB="LA7LIST",VAUTSTR="Message",VAUTNI=2,VAUTNALL=1 | 
|---|
|  | 8 | D FIRST^VAUTOMA | 
|---|
|  | 9 | I Y<1!('$O(LA7LIST(0))) D EXIT Q | 
|---|
|  | 10 | ; | 
|---|
|  | 11 | DEV ; Called from LA7UXQA - when viewing message via alert system. | 
|---|
|  | 12 | S DIR(0)="YO",DIR("A")="Parse message fields based on HL7 segments",DIR("B")="NO" | 
|---|
|  | 13 | D ^DIR K DIR | 
|---|
|  | 14 | I $D(DIRUT) D EXIT Q | 
|---|
|  | 15 | S LA7PARS=+Y ; Save flag to parse message. | 
|---|
|  | 16 | I LA7PARS D  I $D(DIRUT) D EXIT Q | 
|---|
|  | 17 | . S DIR(0)="YO",DIR("A")="Suppress blank segments",DIR("B")="YES" | 
|---|
|  | 18 | . D ^DIR K DIR Q:$D(DIRUT) | 
|---|
|  | 19 | . S $P(LA7PARS,"^",2)=+Y | 
|---|
|  | 20 | ; Ask device and task if requested. | 
|---|
|  | 21 | S %ZIS="Q" D ^%ZIS K %ZIS | 
|---|
|  | 22 | I POP D EXIT Q | 
|---|
|  | 23 | I $D(IO("Q")) D  G EXIT | 
|---|
|  | 24 | . S LA7TEST=0 ; Tasked - not a CRT. | 
|---|
|  | 25 | . S ZTRTN="DQ^LA7UTILA",ZTDESC="Print LA7 UI Messages",ZTSAVE("LA7*")="" | 
|---|
|  | 26 | . D ^%ZTLOAD | 
|---|
|  | 27 | . W !,"Request ",$S($D(ZTSK):"",1:"NOT "),"Queued" | 
|---|
|  | 28 | . K IO("Q") | 
|---|
|  | 29 | U IO(0) | 
|---|
|  | 30 | ; | 
|---|
|  | 31 | ; Flag to determine if okay to use browser (default=true). | 
|---|
|  | 32 | S LA7TEST=1 | 
|---|
|  | 33 | ; | 
|---|
|  | 34 | ; Home device not current device or using non-CRT terminal type. | 
|---|
|  | 35 | I IO'=IO(0)!($E(IOST,1,2)'="C-") S LA7TEST=0 | 
|---|
|  | 36 | ; | 
|---|
|  | 37 | ; If not queued and home device then test for browser | 
|---|
|  | 38 | I LA7TEST,'$$TEST^DDBRT D | 
|---|
|  | 39 | . S LA7TEST=0 ; Unable to use browser. | 
|---|
|  | 40 | . W !,$C(7),"This terminal does not support the needed functionality to use the Browser!" | 
|---|
|  | 41 | . W !,"Will use standard FileMan Data Display.",! | 
|---|
|  | 42 | I LA7TEST D | 
|---|
|  | 43 | . N DIR,DIRUT,DTOUT,DUOUT,X,Y | 
|---|
|  | 44 | . S DIR(0)="YO",DIR("A")="Use Browser to display message(s)",DIR("B")="YES" | 
|---|
|  | 45 | . D ^DIR | 
|---|
|  | 46 | . I $D(DIRUT) S LA7TEST=-1 Q | 
|---|
|  | 47 | . S LA7TEST=+Y | 
|---|
|  | 48 | I LA7TEST<0 D EXIT Q | 
|---|
|  | 49 | D WAIT^DICD | 
|---|
|  | 50 | ; | 
|---|
|  | 51 | DQ ; Dequeue entry point. | 
|---|
|  | 52 | U IO | 
|---|
|  | 53 | K ^TMP($J),^TMP("DDB",$J) | 
|---|
|  | 54 | S LA7IEN=0 | 
|---|
|  | 55 | F  S LA7IEN=$O(LA7LIST(LA7IEN)) Q:'LA7IEN  S LA7J=1 D BRO("LA7 UI Message Display",LA7IEN,LA7IEN) | 
|---|
|  | 56 | I LA7TEST D  Q  ; Display using browser. | 
|---|
|  | 57 | . D DOCLIST^DDBR("^TMP($J,""LIST"")","R") | 
|---|
|  | 58 | . D EXIT | 
|---|
|  | 59 | S (LA7IEN,LA7QUIT)=0 | 
|---|
|  | 60 | S HDR="" | 
|---|
|  | 61 | F  S HDR=$O(^TMP($J,"LIST",HDR)) Q:HDR=""  D  Q:LA7QUIT | 
|---|
|  | 62 | . I IOST["C-" W @IOF | 
|---|
|  | 63 | . W $$CJ^XLFSTR(HDR,IOM," "),! | 
|---|
|  | 64 | . S LA7ROOT=^TMP($J,"LIST",HDR),LA7ROOT=$E(LA7ROOT,1,$L(LA7ROOT)-1) | 
|---|
|  | 65 | . S LA7CONT=0 ; Flag to determine if line has been continue on followng line. | 
|---|
|  | 66 | . S I=0 | 
|---|
|  | 67 | . F  S I=$O(@(LA7ROOT_","_I_")"))  Q:'I  D  Q:LA7QUIT | 
|---|
|  | 68 | . . S LA7X=^(I) | 
|---|
|  | 69 | . . I LA7X="" W ! Q  ; Print blank separator line | 
|---|
|  | 70 | . . F  S LA7Y=$E(LA7X,1,IOM-1) Q:LA7Y=""  D  Q:LA7QUIT | 
|---|
|  | 71 | . . . S LA7X=$E(LA7X,IOM,$L(LA7X)) | 
|---|
|  | 72 | . . . I $L(LA7X) S LA7CONT=1,LA7X="--->"_LA7X | 
|---|
|  | 73 | . . . W !,LA7Y | 
|---|
|  | 74 | . . . I $Y+7>IOSL D EOP W @IOF Q:LA7QUIT | 
|---|
|  | 75 | . I 'LA7QUIT D EOP | 
|---|
|  | 76 | . W !! | 
|---|
|  | 77 | D EXIT | 
|---|
|  | 78 | Q | 
|---|
|  | 79 | ; | 
|---|
|  | 80 | BRO(LA7HDR,LA7DOC,LA7IEN,LA7J) ; Setup text for browser. | 
|---|
|  | 81 | ; Called from above. | 
|---|
|  | 82 | N LA7,LA7DT,LA7X,I,J,K,X,Y | 
|---|
|  | 83 | D GETS^DIQ(62.49,LA7IEN,".01:149;160;161","ENR","LA7") ; Retrieve data from file 62.49 | 
|---|
|  | 84 | S J=$G(LA7J,1) | 
|---|
|  | 85 | S ^TMP("DDB",$J,LA7DOC,J)=" ["_$$CJ^XLFSTR(" Message Statistics ",IOM-4,"*")_"]" | 
|---|
|  | 86 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" " | 
|---|
|  | 87 | S I="LA7(62.49)",K=0,J(0)=J | 
|---|
|  | 88 | F  S I=$Q(@I) Q:I=""  Q:$QS(I,1)'=62.49  D | 
|---|
|  | 89 | . S X=$QS(I,3)_": "_@I | 
|---|
|  | 90 | . I K=0,$L(X)>((IOM\2)-1) S K=1,Y="" | 
|---|
|  | 91 | . I K=0 S K=1,Y=$$LJ^XLFSTR(X,(IOM\2)+2) | 
|---|
|  | 92 | . E  S K=0,J=J+1,^TMP("DDB",$J,LA7DOC,J)=Y_$QS(I,3)_": "_@I | 
|---|
|  | 93 | I K=1 S J=J+1,^TMP("DDB",$J,LA7DOC,J)=Y | 
|---|
|  | 94 | I J(0)=J S J=J+1,^TMP("DDB",$J,LA7DOC,J)=$$CJ^XLFSTR(" [None Found]",IOM-1) | 
|---|
|  | 95 | S LA7X=$G(^LAHM(62.49,LA7IEN,0)) | 
|---|
|  | 96 | S LA7DT=$P(LA7X,"^",5) ; Date/time message received | 
|---|
|  | 97 | S LA7DT(0)=LA7DT\1 ; Date message received. | 
|---|
|  | 98 | S LA7DT(1)=LA7DT#1 ; Time message received. | 
|---|
|  | 99 | S K="LA7ERR^"_(LA7DT(0)-.1) | 
|---|
|  | 100 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" " | 
|---|
|  | 101 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" ["_$$CJ^XLFSTR(" Error Message ",IOM-4,"*")_"]" | 
|---|
|  | 102 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" " | 
|---|
|  | 103 | S J(0)=J ; Save value of "J", determine if any error message found. | 
|---|
|  | 104 | F  S K=$O(^XTMP(K)) Q:K=""!($P(K,"^")'="LA7ERR")  D | 
|---|
|  | 105 | . I LA7DT(0)=$P(K,"^",2) S I=LA7DT(1)-.00000001 ; Start looking after date/time of message. | 
|---|
|  | 106 | . E  S I=0 | 
|---|
|  | 107 | . F  S I=$O(^XTMP(K,I)) Q:'I  D | 
|---|
|  | 108 | . . S X=^XTMP(K,I) | 
|---|
|  | 109 | . . I $P(X,"^",2)=LA7IEN D | 
|---|
|  | 110 | . . . S J=J+1,^TMP("DDB",$J,LA7DOC,J)="Date: "_$$FMTE^XLFDT($P(K,"^",2)+I,1) | 
|---|
|  | 111 | . . . S J=J+1,^TMP("DDB",$J,LA7DOC,J)="Text: "_$P(X,"^",4) ; Get error message. | 
|---|
|  | 112 | . . . S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" " | 
|---|
|  | 113 | I J(0)=J S J=J+1,^TMP("DDB",$J,LA7DOC,J)=$$CJ^XLFSTR("[None Found]",IOM-1) | 
|---|
|  | 114 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" " | 
|---|
|  | 115 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" ["_$$CJ^XLFSTR(" Text of Message ",IOM-4,"*")_"]" | 
|---|
|  | 116 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" " | 
|---|
|  | 117 | ; | 
|---|
|  | 118 | ; Retrieve text of message from 62.49. | 
|---|
|  | 119 | S I=0,J(0)=J | 
|---|
|  | 120 | F  S I=$O(^LAHM(62.49,LA7IEN,150,I)) Q:'I  D | 
|---|
|  | 121 | . S J=J+1 | 
|---|
|  | 122 | . S ^TMP("DDB",$J,LA7DOC,J)=$G(^LAHM(62.49,LA7IEN,150,I,0)) | 
|---|
|  | 123 | . ; Parse each message segment. | 
|---|
|  | 124 | . I '$G(LA7PARS) Q | 
|---|
|  | 125 | . S X=$G(^LAHM(62.49,LA7IEN,150,I,0)) | 
|---|
|  | 126 | . ; Obtain field separator and encoding characters. | 
|---|
|  | 127 | . I $E(X,1,3)="MSH" S HLFS=$E(X,4),HLECH=$E(X,5,8) | 
|---|
|  | 128 | . ; Segement ID code. | 
|---|
|  | 129 | . S Y=$P(X,HLFS) | 
|---|
|  | 130 | . ; Parse fields. | 
|---|
|  | 131 | . D PF | 
|---|
|  | 132 | ; | 
|---|
|  | 133 | I J(0)=J S J=J+1,^TMP("DDB",$J,LA7DOC,J)=$$CJ^XLFSTR("[None Found]",IOM-1) | 
|---|
|  | 134 | ; | 
|---|
|  | 135 | ; If linked to another entry go pasrse that entry also | 
|---|
|  | 136 | I $P(LA7X,"^",7) D BRO("LA7 UI Message Display",LA7DOC,$P(LA7X,"^",7),J) | 
|---|
|  | 137 | ; | 
|---|
|  | 138 | ; Setup document list. | 
|---|
|  | 139 | S LA7HDR=LA7HDR_" Msg #"_LA7DOC_" - "_$P(^LAHM(62.49,LA7DOC,0),"^",6) | 
|---|
|  | 140 | S ^TMP($J,"LIST",LA7HDR)="^TMP(""DDB"",$J,"_LA7DOC_")" | 
|---|
|  | 141 | Q | 
|---|
|  | 142 | ; | 
|---|
|  | 143 | PF ; Parse message fields | 
|---|
|  | 144 | ; | 
|---|
|  | 145 | F K=$S(Y="MSH":1,1:2):1:$L(X,HLFS) D | 
|---|
|  | 146 | . S Z=$P(X,HLFS,K) | 
|---|
|  | 147 | . ; Don't display blank segments. | 
|---|
|  | 148 | . I $P(LA7PARS,"^",2),Z="" Q | 
|---|
|  | 149 | . S J=J+1 | 
|---|
|  | 150 | . I Y="MSH" S V=Y_"-"_K_" = "_$S(K=1:HLFS,1:$P(X,HLFS,K)) | 
|---|
|  | 151 | . E  S V=Y_"-"_(K-1)_" = "_$P(X,HLFS,K) | 
|---|
|  | 152 | . S ^TMP("DDB",$J,LA7DOC,J)=V | 
|---|
|  | 153 | . I Z="" Q  ; Don't parse blank segments. | 
|---|
|  | 154 | . I Y="MSH",K<3 Q  ; Don't parse MSH-1/2. | 
|---|
|  | 155 | . ; Parse components. | 
|---|
|  | 156 | . D PC | 
|---|
|  | 157 | ; Separate segments with blank line. | 
|---|
|  | 158 | S J=J+1,^TMP("DDB",$J,LA7DOC,J)=" " | 
|---|
|  | 159 | Q | 
|---|
|  | 160 | ; | 
|---|
|  | 161 | PC ; Parse field components | 
|---|
|  | 162 | ; | 
|---|
|  | 163 | F L=1:1:$L(Z,$E(HLECH,1)) D | 
|---|
|  | 164 | . S V=$P(Z,$E(HLECH,1),L) Q:V="" | 
|---|
|  | 165 | . I Z[$E(HLECH,1) D | 
|---|
|  | 166 | . . S J=J+1 | 
|---|
|  | 167 | . . S ^TMP("DDB",$J,LA7DOC,J)=Y_"-"_($S(Y="MSH":K,1:K-1))_"-"_L_" = "_V | 
|---|
|  | 168 | . I V'[$E(HLECH,2) Q | 
|---|
|  | 169 | . ; Parse repetition of components. | 
|---|
|  | 170 | . F M=1:1:$L(V,$E(HLECH,2)) D | 
|---|
|  | 171 | . . S J=J+1 | 
|---|
|  | 172 | . . S ^TMP("DDB",$J,LA7DOC,J)=Y_"-"_($S(Y="MSH":K,1:K-1))_"-"_L_"-"_M_" = "_$P(V,$E(HLECH,2),M) | 
|---|
|  | 173 | Q | 
|---|
|  | 174 | ; | 
|---|
|  | 175 | EOP ; End of page. | 
|---|
|  | 176 | I LA7CONT W !!,"NOTE: '--->' indicates continuation of previous line." S LA7CONT=0 | 
|---|
|  | 177 | I $D(ZTQUEUED)!(IOST'["C-") Q | 
|---|
|  | 178 | S DIR(0)="E" D ^DIR K DIR S:Y'=1 LA7QUIT=1 | 
|---|
|  | 179 | Q | 
|---|
|  | 180 | ; | 
|---|
|  | 181 | EXIT ; Clean up. | 
|---|
|  | 182 | W @IOF | 
|---|
|  | 183 | I $D(ZTQUEUED) S ZTREQ="@" | 
|---|
|  | 184 | E  D ^%ZISC | 
|---|
|  | 185 | K ^TMP($J),^TMP("DDB",$J) | 
|---|
|  | 186 | K LA7CONT,LA7IEN,LA7J,LA7LIST,LA7PARS,LA7QUIT,LA7ROOT,LA7TEST,LA7X,LA7Y | 
|---|
|  | 187 | K DIC,DIR,HDR,HLECH,HLFS,I,J,K,L,M,V,X,Y,Z | 
|---|
|  | 188 | K VAUTVB,VAUTNI,VAUTSTR,VAUTNALL | 
|---|
|  | 189 | Q | 
|---|
|  | 190 | ; | 
|---|
|  | 191 | ; | 
|---|
|  | 192 | FMT(LA76249) ; Perform test to determine storage format, each segment on one | 
|---|
|  | 193 | ;  node or segment has continuation nodes separated with null "" nodes. | 
|---|
|  | 194 | ; Call with LA76249 = ien of entry in file #62.49 | 
|---|
|  | 195 | ;      Returns LA7Y = 0-old format, 1-new format | 
|---|
|  | 196 | ; | 
|---|
|  | 197 | N LA7END,LA7Y,LA7ROOT | 
|---|
|  | 198 | S (LA7END,LA7Y)=0,LA7ROOT="^LAHM(62.49,LA76249,150,0)" | 
|---|
|  | 199 | F  S LA7ROOT=$Q(@LA7ROOT) Q:LA7END  D | 
|---|
|  | 200 | . I $QS(LA7ROOT,1)'="62.49"!($QS(LA7ROOT,2)'=LA76249)!($QS(LA7ROOT,3)'=150) S LA7END=1 Q | 
|---|
|  | 201 | . I @LA7ROOT="" S (LA7Y,LA7END)=1 | 
|---|
|  | 202 | Q LA7Y | 
|---|