1 | VAQFIL18 ;ALB/JRP - MESSAGE FILING;18-MAY-93
|
---|
2 | ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
|
---|
3 | DATA(MESSNUM,PARSARR,TRANPTR) ;FILE ALL DATA BLOCKS
|
---|
4 | ;INPUT : MESSNUM - Message number in transmission (not XMZ)
|
---|
5 | ; (defaults to 1)
|
---|
6 | ; PARSARR - Parsing array (full global reference)
|
---|
7 | ; TRANPTR - Pointer to VAQ - TRANSACTION file
|
---|
8 | ; (As defined by MailMan)
|
---|
9 | ; XMFROM, XMREC,XMZ
|
---|
10 | ;OUTPUT : 0 - Success
|
---|
11 | ; -1^Error_Text - Error
|
---|
12 | ;NOTES : It is the responsibility of the calling program to correct
|
---|
13 | ; the transaction being updated if an error occurs.
|
---|
14 | ; : If the displayable segment can not be added, it will delete
|
---|
15 | ; the entry that is created for it in VAQ - DATA file.
|
---|
16 | ;
|
---|
17 | ;CHECK INPUT
|
---|
18 | S:($G(MESSNUM)="") MESSNUM=1
|
---|
19 | Q:($G(PARSARR)="") "-1^Did not pass reference to parsing array"
|
---|
20 | Q:('$D(@PARSARR@(MESSNUM))) "-1^Did not pass valid message number"
|
---|
21 | Q:('$D(@PARSARR@(MESSNUM,"DATA"))) 0
|
---|
22 | S TRANPTR=+$G(TRANPTR)
|
---|
23 | Q:(('TRANPTR)!('$D(^VAT(394.61,TRANPTR)))) "-1^Did not pass a valid transaction"
|
---|
24 | ;DECLARE VARIABLES
|
---|
25 | N BLOCKSEQ,TMP,TYPE,SEQ,ERR,OFFSET,DATAPTR,SEGABB,FILE,FIELD,TMPARR
|
---|
26 | N DECRYPT,KEY1,KEY2,STRING,DECSTR,DECMTHD,ENCRYPT,VALUE,ID,SEQCNT
|
---|
27 | S TMPARR="^TMP(""VAQ-TMP"","_$J_")"
|
---|
28 | K @TMPARR
|
---|
29 | ;GET MESSAGE TYPE
|
---|
30 | S TMP=$$STATYPE^VAQFIL11(MESSNUM,PARSARR)
|
---|
31 | Q:($P(TMP,"^",1)="-1") "-1^Could not determine message type"
|
---|
32 | S TYPE=$P(TMP,"^",2)
|
---|
33 | ;ACK & RETRANSMIT & REQUEST DON'T HAVE DATA BLOCKS
|
---|
34 | Q:((TYPE="ACK")!(TYPE="RET")!(TYPE="REQ")) "-1^Message type does not require display block"
|
---|
35 | ;GET DECRYPTION METHOD & KEYS
|
---|
36 | S DECMTHD=$$DECMTHD^VAQFIL11(MESSNUM,PARSARR,2)
|
---|
37 | S KEY1=$$KEY^VAQFIL13(MESSNUM,PARSARR,1)
|
---|
38 | S KEY2=$$KEY^VAQFIL13(MESSNUM,PARSARR,0)
|
---|
39 | ;LOOP THROUGH EACH DATA BLOCK
|
---|
40 | S BLOCKSEQ=""
|
---|
41 | F S BLOCKSEQ=$O(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ)) Q:(BLOCKSEQ="") D
|
---|
42 | .;MAKE SURE IT'S A DATA BLOCK
|
---|
43 | .S TMP=$G(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,1))
|
---|
44 | .S:(TMP=" ") TMP=""
|
---|
45 | .Q:((TMP="")!(TMP'="$DATA"))
|
---|
46 | .;GET SEGMENT ABBREVIATION
|
---|
47 | .S SEGABB=$G(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,2))
|
---|
48 | .S:(SEGABB=" ") SEGABB=""
|
---|
49 | .Q:((SEGABB="")!(SEGABB="$$DATA"))
|
---|
50 | .;CREATE EXTRACTION ARRAY FOR DATA BLOCK
|
---|
51 | .K @TMPARR
|
---|
52 | .S OFFSET=2
|
---|
53 | .F S OFFSET=$O(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,OFFSET)) Q:(OFFSET="") D Q:(OFFSET="")
|
---|
54 | ..;READ DESCRIPTION BLOCK
|
---|
55 | ..S TMP=$G(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,OFFSET))
|
---|
56 | ..S:(TMP=" ") TMP=""
|
---|
57 | ..Q:((TMP="")!(TMP="$$DATA"))
|
---|
58 | ..S ENCRYPT=+$P(TMP,"^",1)
|
---|
59 | ..S FILE=+$P(TMP,"^",2)
|
---|
60 | ..S FIELD=+$P(TMP,"^",3)
|
---|
61 | ..S SEQCNT=+$P(TMP,"^",4)
|
---|
62 | ..Q:(('FILE)!('FIELD)!('SEQCNT))
|
---|
63 | ..;READ EACH VALUE & ID
|
---|
64 | ..S SEQCNT=SEQCNT-1
|
---|
65 | ..F SEQ=0:1:SEQCNT D Q:(OFFSET="")
|
---|
66 | ...S OFFSET=$O(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,OFFSET))
|
---|
67 | ...Q:(OFFSET="")
|
---|
68 | ...S VALUE=$G(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,OFFSET))
|
---|
69 | ...S:(VALUE=" ") VALUE=""
|
---|
70 | ...S OFFSET=$O(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,OFFSET))
|
---|
71 | ...Q:(OFFSET="")
|
---|
72 | ...S ID=$G(@PARSARR@(MESSNUM,"DATA",BLOCKSEQ,OFFSET))
|
---|
73 | ...S:(ID=" ") ID=""
|
---|
74 | ...;SET UP FOR DECRYPTION
|
---|
75 | ...Q:((ENCRYPT)&(DECMTHD=""))
|
---|
76 | ...S:(ENCRYPT) DECRYPT=("S DECSTR="_DECMTHD)
|
---|
77 | ...S:('ENCRYPT) DECRYPT="S DECSTR=STRING"
|
---|
78 | ...Q:((ENCRYPT)&((KEY1="")!(KEY2="")))
|
---|
79 | ...;DECRYPT VALUE
|
---|
80 | ...S STRING=VALUE
|
---|
81 | ...X DECRYPT
|
---|
82 | ...S VALUE=DECSTR
|
---|
83 | ...;REBUILD EXTRACTION ARRAY (REMEMBER IF VALUE WAS DECRYPTED)
|
---|
84 | ...S @TMPARR@("VALUE",FILE,FIELD,SEQ)=VALUE
|
---|
85 | ...S @TMPARR@("ID",FILE,FIELD,SEQ)=ID
|
---|
86 | ...I (STRING'="") S:(STRING'=DECSTR) @TMPARR@("DECRYPT",STRING)=DECSTR
|
---|
87 | ..Q:(OFFSET="")
|
---|
88 | .;STORE INFORMATION
|
---|
89 | .S FILE=""
|
---|
90 | .F S FILE=$O(@TMPARR@("VALUE",FILE)) Q:(FILE="") D
|
---|
91 | ..S FIELD=""
|
---|
92 | ..F S FIELD=$O(@TMPARR@("VALUE",FILE,FIELD)) Q:(FIELD="") D
|
---|
93 | ...S SEQ=""
|
---|
94 | ...F S SEQ=$O(@TMPARR@("VALUE",FILE,FIELD,SEQ)) Q:(SEQ="") D
|
---|
95 | ....S VALUE=$G(@TMPARR@("VALUE",FILE,FIELD,SEQ))
|
---|
96 | ....S ID=$G(@TMPARR@("ID",FILE,FIELD,SEQ))
|
---|
97 | ....;SEE IF ID SHOULD BE DECRYPTED
|
---|
98 | ....I (ID'="") S:($D(@TMPARR@("DECRYPT",ID))) ID=$G(@TMPARR@("DECRYPT",ID))
|
---|
99 | ....;MAKE STUB ENTRY IN DATA FILE
|
---|
100 | ....S DATAPTR=$$STUBDATA^VAQFILE1(SEGABB,TRANPTR)
|
---|
101 | ....Q:(DATAPTR<0)
|
---|
102 | ....;STORE DATA
|
---|
103 | ....S TMP=$$FILEINFO^VAQFILE(394.62,DATAPTR,.03,FILE)
|
---|
104 | ....I (TMP) S TMP=$$DELDATA^VAQFILE1(DATAPTR) Q
|
---|
105 | ....S TMP=$$FILEINFO^VAQFILE(394.62,DATAPTR,.04,FIELD)
|
---|
106 | ....I (TMP) S TMP=$$DELDATA^VAQFILE1(DATAPTR) Q
|
---|
107 | ....S TMP=$$FILEINFO^VAQFILE(394.62,DATAPTR,10,VALUE)
|
---|
108 | ....I (TMP) S TMP=$$DELDATA^VAQFILE1(DATAPTR) Q
|
---|
109 | ....S TMP=$$FILEINFO^VAQFILE(394.62,DATAPTR,20,ID)
|
---|
110 | ....I (TMP) S TMP=$$DELDATA^VAQFILE1(DATAPTR) Q
|
---|
111 | ....S TMP=$$FILEINFO^VAQFILE(394.62,DATAPTR,30,SEQ)
|
---|
112 | ....I (TMP) S TMP=$$DELDATA^VAQFILE1(DATAPTR) Q
|
---|
113 | .K @TMPARR
|
---|
114 | K @TMPARR
|
---|
115 | Q 0
|
---|