| 1 | VAQPAR1 ;ALB/JRP - MESSAGE PARSING;28-APR-93 | 
|---|
| 2 | ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993 | 
|---|
| 3 | PREPRS10(ARRAY) ;PRE-PARSE VERSION 1.0 TRANSMISSION | 
|---|
| 4 | ;INPUT  : ARRAY - Parsing array (full global reference) | 
|---|
| 5 | ;         (As defined by MailMan) | 
|---|
| 6 | ;         XMFROM, XMREC, XMZ | 
|---|
| 7 | ;         (Declared in SERVER^VAQADM2) | 
|---|
| 8 | ;         XMER, XMRG, XMPOS | 
|---|
| 9 | ;OUTPUT : XMER - Exit condition | 
|---|
| 10 | ;           0 = Success | 
|---|
| 11 | ;           -1^Error_Text = Error | 
|---|
| 12 | ;         XMPOS - Last line [number] read in transmission | 
|---|
| 13 | ;                 (if NULL end of transmission reached) | 
|---|
| 14 | ; | 
|---|
| 15 | ;NOTES  : Parsing array will have the following format | 
|---|
| 16 | ;           ARRAY(1,BlockName,LineNumber) = Value | 
|---|
| 17 | ;       : Calling routine responsible for ARRAY clean up before | 
|---|
| 18 | ;         and after call | 
|---|
| 19 | ;       : This is not a function | 
|---|
| 20 | ; | 
|---|
| 21 | ;CHECK INPUT | 
|---|
| 22 | I ($G(ARRAY)="") S XMER="-1^Did not pass reference to parsing array" Q | 
|---|
| 23 | ;DECLARE VARIABLES | 
|---|
| 24 | N LINE,ERR,BLOCK,TMP,X | 
|---|
| 25 | S XMER=0 | 
|---|
| 26 | S LINE=1 | 
|---|
| 27 | ;READ HEADER | 
|---|
| 28 | S BLOCK="HEADER" | 
|---|
| 29 | X XMREC | 
|---|
| 30 | I ((XMER<0)!(XMRG="")) S XMER="-1^Transmission did not contain any information" Q | 
|---|
| 31 | S @ARRAY@(1,BLOCK,LINE)=XMRG | 
|---|
| 32 | S LINE=LINE+1 | 
|---|
| 33 | ;QUIT IF TRANSMISSION IS AN ACK | 
|---|
| 34 | Q:($P(XMRG,"^",1)="ACK") | 
|---|
| 35 | X XMREC | 
|---|
| 36 | I ((XMER<0)!(XMRG="")) S XMER="-1^Transmission was not complete" Q | 
|---|
| 37 | S @ARRAY@(1,BLOCK,LINE)=XMRG | 
|---|
| 38 | S LINE=LINE+1 | 
|---|
| 39 | ;CHECK TRANSMISSION TYPE | 
|---|
| 40 | S TMP=+$P(@ARRAY@(1,BLOCK,1),"^",12) | 
|---|
| 41 | ;TRANSMISSION TYPE NOT SUPPORTED | 
|---|
| 42 | I ((TMP=17)!(TMP=19)!(TMP=20)) S XMER="-1^Transmission type not supported" Q | 
|---|
| 43 | F X=10:1:21 Q:(TMP=X) | 
|---|
| 44 | I (X=21) S XMER="-1^Transmission type not supported" Q | 
|---|
| 45 | ;NO DATA BLOCKS IN TRANSMISSION | 
|---|
| 46 | Q:((TMP'=15)&(TMP'=16)) | 
|---|
| 47 | ;READ DATA BLOCKS | 
|---|
| 48 | S XMER=0 | 
|---|
| 49 | F  X XMREC Q:(XMER<0)  D | 
|---|
| 50 | .;GET DATA BLOCK TYPE | 
|---|
| 51 | .S TMP=$P(XMRG,"^",1) | 
|---|
| 52 | .;NEW DATA BLOCK TYPE | 
|---|
| 53 | .S:(TMP'=BLOCK) LINE=1 | 
|---|
| 54 | .;BLOCK NOT SUPPORTED (SKIP) | 
|---|
| 55 | .Q:((TMP'="MIN")&(TMP'="MAS")&(TMP'="PHA")) | 
|---|
| 56 | .S BLOCK=TMP | 
|---|
| 57 | .S @ARRAY@(1,BLOCK,LINE)=$P(XMRG,"^",2,($L(XMRG,"^"))) | 
|---|
| 58 | .S LINE=LINE+1 | 
|---|
| 59 | S XMER=0 | 
|---|
| 60 | Q | 
|---|
| 61 | ; | 
|---|
| 62 | PARSE10(ARRAY) ;PARSE 1.0 MESSAGE | 
|---|
| 63 | ;INPUT  : ARRAY - Array containing pre-parsed version 1.0 transmission | 
|---|
| 64 | ;                 (full global reference) | 
|---|
| 65 | ;         (As defined by MailMan) | 
|---|
| 66 | ;         XMFROM, XMREC, XMZ | 
|---|
| 67 | ;         (Declared in SERVER^VAQADM2) | 
|---|
| 68 | ;         XMER, XMRG, XMPOS | 
|---|
| 69 | ;OUTPUT : XMER - Exit condition | 
|---|
| 70 | ;           0 = Success | 
|---|
| 71 | ;           -1^Error_Text = Error | 
|---|
| 72 | ;NOTES  : Pre-parsed transmsission will be deleted from ARRAY | 
|---|
| 73 | ;         and replaced with parsed array.  Parsed array will be same | 
|---|
| 74 | ;         as parsed array for version 1.5 message and have the format: | 
|---|
| 75 | ;           ARRAY(2,BlockName,BlockSeq,Line) | 
|---|
| 76 | ;       : This is not a function | 
|---|
| 77 | ; | 
|---|
| 78 | ;CHECK INPUT | 
|---|
| 79 | I ($G(ARRAY)="") S XMER="-1^Did not pass reference to parsing array" Q | 
|---|
| 80 | I ('$D(@ARRAY@(1))) S XMER="-1^Parsing array did not contain pre-parsed transmission" Q | 
|---|
| 81 | ;DECLARE VARIABLES | 
|---|
| 82 | N TMP,BLOCK,ACK,TYPE,STATUS,X,Y | 
|---|
| 83 | S XMER=0 | 
|---|
| 84 | ;DETERMINE IF MESSAGE IS AN ACKNOWLEDGMENT | 
|---|
| 85 | S TMP=$G(@ARRAY@(1,"HEADER",1)) | 
|---|
| 86 | I (TMP="") S XMER="-1^Header did not exist in pre-parsed message" Q | 
|---|
| 87 | S ACK=($P(TMP,"^",1)="ACK") | 
|---|
| 88 | ;ACK | 
|---|
| 89 | I (ACK) D | 
|---|
| 90 | .;MAKE HEADER BLOCK | 
|---|
| 91 | .S @ARRAY@(2,"HEADER",1,1)="$HEADER" | 
|---|
| 92 | .S @ARRAY@(2,"HEADER",1,2)="ACK" | 
|---|
| 93 | .S @ARRAY@(2,"HEADER",1,3)="VAQ-RQACK" | 
|---|
| 94 | .S @ARRAY@(2,"HEADER",1,4)=1.0 | 
|---|
| 95 | .S @ARRAY@(2,"HEADER",1,5)=$$NOW^VAQUTL99(0,0) | 
|---|
| 96 | .S @ARRAY@(2,"HEADER",1,6)=$G(XMZ) | 
|---|
| 97 | .S @ARRAY@(2,"HEADER",1,7)=$P($G(@ARRAY@(1,"HEADER",1)),"^",2) | 
|---|
| 98 | .S @ARRAY@(2,"HEADER",1,8)="" | 
|---|
| 99 | .S @ARRAY@(2,"HEADER",1,9)="$$HEADER" | 
|---|
| 100 | ;NOT AN ACK | 
|---|
| 101 | I ('ACK) D | 
|---|
| 102 | .;DETERMINE STATUS & TYPE | 
|---|
| 103 | .S TMP=$G(@ARRAY@(1,"HEADER",1)) | 
|---|
| 104 | .S X=$P(TMP,"^",12) | 
|---|
| 105 | .S:(X=10) STATUS="VAQ-RQST",TYPE="REQ" | 
|---|
| 106 | .S:(X=11) STATUS="VAQ-AMBIG",TYPE="RES" | 
|---|
| 107 | .S:(X=12) STATUS="VAQ-NTFND",TYPE="RES" | 
|---|
| 108 | .S:((X=13)!(X=14)!(X=18)) STATUS="VAQ-REJ",TYPE="RES" | 
|---|
| 109 | .S:(X=15) STATUS="VAQ-RSLT",TYPE="RES" | 
|---|
| 110 | .S:(X=16) STATUS="VAQ-UNSOL",TYPE="UNS" | 
|---|
| 111 | .S @ARRAY@(2,"HEADER",1,1)="$HEADER" | 
|---|
| 112 | .S @ARRAY@(2,"HEADER",1,2)=TYPE | 
|---|
| 113 | .S @ARRAY@(2,"HEADER",1,3)=STATUS | 
|---|
| 114 | .S @ARRAY@(2,"HEADER",1,4)=1.0 | 
|---|
| 115 | .S X=+$P(TMP,"^",9) | 
|---|
| 116 | .S Y=$P(X,".",2) | 
|---|
| 117 | .S Y=Y_"000000" | 
|---|
| 118 | .S $P(X,".",2)=Y | 
|---|
| 119 | .S Y=$$DOBFMT^VAQUTL99(X) | 
|---|
| 120 | .I (Y'="") D | 
|---|
| 121 | ..S X=$P(X,".",2) | 
|---|
| 122 | ..S Y=Y_"@"_$E(X,1,2)_":"_$E(X,3,4)_":"_$E(X,5,6) | 
|---|
| 123 | .S @ARRAY@(2,"HEADER",1,5)=Y | 
|---|
| 124 | .S @ARRAY@(2,"HEADER",1,6)=$G(XMZ) | 
|---|
| 125 | .S X="" | 
|---|
| 126 | .S:((TYPE="RES")!(TYPE="REQ")) X=+TMP | 
|---|
| 127 | .S @ARRAY@(2,"HEADER",1,7)=X | 
|---|
| 128 | .S @ARRAY@(2,"HEADER",1,8)="" | 
|---|
| 129 | .S @ARRAY@(2,"HEADER",1,9)="$$HEADER" | 
|---|
| 130 | ;MAKE DOMAIN BLOCK | 
|---|
| 131 | S @ARRAY@(2,"DOMAIN",1,1)="$DOMAIN" | 
|---|
| 132 | S X=$P($G(@ARRAY@(1,"HEADER",2)),"^",1) | 
|---|
| 133 | S:(X="") X=$P($G(XMFROM),"@",2) | 
|---|
| 134 | S @ARRAY@(2,"DOMAIN",1,2)=X | 
|---|
| 135 | S @ARRAY@(2,"DOMAIN",1,3)="" | 
|---|
| 136 | S @ARRAY@(2,"DOMAIN",1,4)="$$DOMAIN" | 
|---|
| 137 | ;DONE IF ACK | 
|---|
| 138 | Q:(ACK) | 
|---|
| 139 | ;GO TO CONTINUATION ROUTINE | 
|---|
| 140 | D PARCON^VAQPAR10 | 
|---|
| 141 | Q | 
|---|