| [613] | 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
 | 
|---|