1 | VAQPAR11 ;ALB/JRP - MESSAGE PARSING;10-MAY-93
|
---|
2 | ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
|
---|
3 | DATA10(ARRAY,BLOCK,BLOCKNUM) ;PARSE DATA BLOCKS FOR 1.0 MESSAGE
|
---|
4 | ;INPUT : ARRAY - Array containing pre-parsed version 1.0 transmission
|
---|
5 | ; (full global reference)
|
---|
6 | ; BLOCK - Version 1.0 block name (MIN,MAS,PHA)
|
---|
7 | ; BLOCKNUM - Block sequence number (defaults to 1)
|
---|
8 | ; (As defined by MailMan)
|
---|
9 | ; XMFROM, XMREC, XMZ
|
---|
10 | ; (Declared in SERVER^VAQADM2)
|
---|
11 | ; XMER, XMRG, XMPOS
|
---|
12 | ;OUTPUT : XMER - Exit condition
|
---|
13 | ; 0 = Success
|
---|
14 | ; -1^Error_Text = Error
|
---|
15 | ; Parsed array will be same as parsed array for version
|
---|
16 | ; 1.5 message and have the format:
|
---|
17 | ; ARRAY(2,"DATA",BLOCKNUM,Line)
|
---|
18 | ;
|
---|
19 | ;CHECK INPUT
|
---|
20 | I ($G(ARRAY)="") S XMER="-1^Did not pass reference to parsing array" Q
|
---|
21 | I ('$D(@ARRAY@(1))) S XMER="-1^Parsing array did not contain pre-parsed transmission" Q
|
---|
22 | I ($G(BLOCK)="") S XMER="-1^Did not pass data block name" Q
|
---|
23 | I ((BLOCK'="MIN")&(BLOCK'="MAS")&(BLOCK'="PHA")) S XMER="-1^Did not pass valid version 1.0 data block name" Q
|
---|
24 | S:($G(BLOCKNUM)="") BLOCKNUM=1
|
---|
25 | ;DECLARE VARIABLES
|
---|
26 | N LINE,X,Y,TMP,OFFSET,FILE,FIELD,FIELDS,VALUES,SEQ,TMPARR
|
---|
27 | N FLDCNT,VALCNT,LOOP1,LOOP2,REPCNT,ID,PATNAME,RXNUM,VALUE
|
---|
28 | ;GET PATIENT'S NAME
|
---|
29 | S PATNAME=$G(@ARRAY@(2,"PATIENT",1,3))
|
---|
30 | I (PATNAME="") S XMER="-1^Patient's name was not contained in the transmission" Q
|
---|
31 | ;SET UP TEMPORARY PARSING ARRAY
|
---|
32 | S TMP=$P(ARRAY,"(",1)
|
---|
33 | S X=$P(ARRAY,"(",2)
|
---|
34 | S Y=$P(X,")",1)
|
---|
35 | S:(Y="") TMPARR=TMP_"("_3_")"
|
---|
36 | S:(Y'="") TMPARR=TMP_"("_Y_","_3_")"
|
---|
37 | K @TMPARR
|
---|
38 | S XMER=0
|
---|
39 | ;LINE 1
|
---|
40 | S @ARRAY@(2,"DATA",BLOCKNUM,1)="$DATA"
|
---|
41 | S X="PDX*"_BLOCK
|
---|
42 | S:(BLOCK="PHA") X="PDX*MPL"
|
---|
43 | S @ARRAY@(2,"DATA",BLOCKNUM,2)=X
|
---|
44 | ;PRE-PARSE DATA BLOCK
|
---|
45 | S OFFSET=""
|
---|
46 | F S OFFSET=$O(@ARRAY@(1,BLOCK,OFFSET)) Q:(OFFSET="") D
|
---|
47 | .S TMP=$G(@ARRAY@(1,BLOCK,OFFSET))
|
---|
48 | .Q:(TMP="")
|
---|
49 | .S FILE=$P(TMP,"^",1)
|
---|
50 | .S FIELDS=$P(TMP,"^",2)
|
---|
51 | .S VALUES=$P(TMP,"^",3,($L(TMP,"^")))
|
---|
52 | .S RXNUM=""
|
---|
53 | .I (FILE=52.1) D
|
---|
54 | ..S RXNUM=$P(FIELDS,"~",2)
|
---|
55 | ..S FIELDS=$P(FIELDS,"~",1)
|
---|
56 | .I ((FILE=52)&($P(FIELDS,";",1)=.01)) D
|
---|
57 | ..S RXNUM=$P(VALUES,"^",1)
|
---|
58 | .S FLDCNT=$L(FIELDS,";")
|
---|
59 | .S VALCNT=$L(VALUES,"^")
|
---|
60 | .S REPCNT=(VALCNT\FLDCNT)-1
|
---|
61 | .S:(REPCNT<0) REPCNT=0
|
---|
62 | .F LOOP1=0:1:REPCNT D
|
---|
63 | ..F LOOP2=1:1:FLDCNT D
|
---|
64 | ...S FIELD=$P(FIELDS,";",LOOP2)
|
---|
65 | ...S VALUE=$P(VALUES,"^",((LOOP1*FLDCNT)+LOOP2))
|
---|
66 | ...;CONVERT DATES
|
---|
67 | ...S:($P($G(^DD(FILE,FIELD,0)),"^",2)["D") VALUE=$$DOBFMT^VAQUTL99(VALUE,1)
|
---|
68 | ...;CONVERT STATES
|
---|
69 | ...I ((+$P($P($G(^DD(FILE,FIELD,0)),"^",2),"P",2))=5) D
|
---|
70 | ....Q:(VALUE="")
|
---|
71 | ....S X=$O(^DIC(5,"C",VALUE,""))
|
---|
72 | ....I (X="") S VALUE="" Q
|
---|
73 | ....S VALUE=$P($G(^DIC(5,X,0)),"^",1)
|
---|
74 | ...S SEQ=""
|
---|
75 | ...F Q:($O(@TMPARR@("VALUE",FILE,FIELD,SEQ))="") S SEQ=$O(@TMPARR@("VALUE",FILE,FIELD,SEQ)) Q:((FILE=52)&(FIELD=.01)&($G(@TMPARR@("VALUE",FILE,FIELD,SEQ))=VALUE))
|
---|
76 | ...S SEQ=$S((SEQ=""):0,((FILE=52)&(FIELD=.01)&($G(@TMPARR@("VALUE",FILE,FIELD,SEQ))=VALUE)):SEQ,1:SEQ+1)
|
---|
77 | ...S @TMPARR@("VALUE",FILE,FIELD,SEQ)=VALUE
|
---|
78 | ...I (BLOCK="MIN") S ID=PATNAME
|
---|
79 | ...I (BLOCK="PHA") D
|
---|
80 | ....I (FILE=52) S ID=$S((FIELD=.01):PATNAME,1:RXNUM) Q
|
---|
81 | ....I (FILE=52.1) S ID=RXNUM Q
|
---|
82 | ....I ((FILE=2)!(FILE=55)) S ID=PATNAME Q
|
---|
83 | ....I (FIELD=.01) S ID=PATNAME Q
|
---|
84 | ....S ID=$G(@TMPARR@("VALUE",FILE,.01,SEQ))
|
---|
85 | ...I (BLOCK="MAS") D
|
---|
86 | ....I (FILE=2) S ID=PATNAME Q
|
---|
87 | ....I (FILE=2.98) S ID=$S((FIELD=.001):PATNAME,1:$G(@TMPARR@("VALUE",2.98,.001,SEQ))) Q
|
---|
88 | ....I (FIELD=.01) S ID=PATNAME Q
|
---|
89 | ....I (FILE=36) S ID=$G(@TMPARR@("VALUE",2.312,.01,SEQ)) Q
|
---|
90 | ....S ID=$G(@TMPARR@("VALUE",FILE,.01,SEQ))
|
---|
91 | ...S @TMPARR@("ID",FILE,FIELD,SEQ)=ID
|
---|
92 | ;STORE INTO PARSE ARRAY
|
---|
93 | S LINE=3
|
---|
94 | S FILE=""
|
---|
95 | F S FILE=$O(@TMPARR@("VALUE",FILE)) Q:(FILE="") D
|
---|
96 | .S FIELD=""
|
---|
97 | .F S FIELD=$O(@TMPARR@("VALUE",FILE,FIELD)) Q:(FIELD="") D
|
---|
98 | ..S VALUES=0
|
---|
99 | ..F Q:($O(@TMPARR@("VALUE",FILE,FIELD,VALUES))="") S VALUES=$O(@TMPARR@("VALUE",FILE,FIELD,VALUES))
|
---|
100 | ..S VALUES=VALUES+1
|
---|
101 | ..S @ARRAY@(2,"DATA",BLOCKNUM,LINE)=0_"^"_FILE_"^"_FIELD_"^"_VALUES
|
---|
102 | ..S LINE=LINE+1
|
---|
103 | ..S SEQ=""
|
---|
104 | ..F S SEQ=$O(@TMPARR@("VALUE",FILE,FIELD,SEQ)) Q:(SEQ="") D
|
---|
105 | ...S VALUE=$G(@TMPARR@("VALUE",FILE,FIELD,SEQ))
|
---|
106 | ...S @ARRAY@(2,"DATA",BLOCKNUM,LINE)=VALUE
|
---|
107 | ...S LINE=LINE+1
|
---|
108 | ...S ID=$G(@TMPARR@("ID",FILE,FIELD,SEQ))
|
---|
109 | ...S @ARRAY@(2,"DATA",BLOCKNUM,LINE)=ID
|
---|
110 | ...S LINE=LINE+1
|
---|
111 | ;DONE
|
---|
112 | S @ARRAY@(2,"DATA",BLOCKNUM,LINE)="$$DATA"
|
---|
113 | K @TMPARR
|
---|
114 | Q
|
---|