1 | PXRMEXLB ;SLC/PJH - Reminder Dialog Exchange. ;05/16/2007
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
|
---|
3 | ;
|
---|
4 | ;=====================================================================
|
---|
5 | ;
|
---|
6 | ;Build list of dialog components - called once from PXRMEXLC
|
---|
7 | ;-------------------------------
|
---|
8 | DBUILD(IND,NITEMS,FILENUM) ;
|
---|
9 | N DARRAY,DDATA,DDLG,DEND,DLOC,DMAP,DNAM,DNODE,DSEQ,DSTRT,DSUB,FILE,JND
|
---|
10 | N REPCNT,RESGRP,TEMPRESL,CNT
|
---|
11 | ;
|
---|
12 | K ^TMP("PXRMEXTMP",$J),^TMP("PXRMEXFND",$J)
|
---|
13 | ;
|
---|
14 | ;Scan dialog components in 120 and save name and type
|
---|
15 | S JND=0
|
---|
16 | F S JND=$O(^PXD(811.8,IEN,120,IND,1,JND)) Q:'JND D
|
---|
17 | .S DDATA=$G(^PXD(811.8,IEN,120,IND,1,JND,0)) Q:DDATA=""
|
---|
18 | .S DNAM=$P(DDATA,U),DSTRT=$P(DDATA,U,2),DEND=$P(DDATA,U,3)
|
---|
19 | .;Extract dialog type and text and findings from exchange file
|
---|
20 | .D DPARSE
|
---|
21 | ;Scan dialog components in 120 and save dialog links
|
---|
22 | S JND="B",REPCNT=0
|
---|
23 | F S JND=$O(^PXD(811.8,IEN,120,IND,1,JND),-1) Q:'JND D
|
---|
24 | .S DDATA=$G(^PXD(811.8,IEN,120,IND,1,JND,0)) Q:DDATA=""
|
---|
25 | .S DSTRT=$P(DDATA,U,2),DEND=$P(DDATA,U,3)
|
---|
26 | .S DDLG=$P(DDATA,U),DSUB=DSTRT+2
|
---|
27 | .I JND=NITEMS D
|
---|
28 | ..S ^TMP("PXRMEXTMP",$J,"PXRMDNAM")=DDLG
|
---|
29 | ..I $P($G(^PXD(811.8,IEN,100,DSUB,0)),";",3)'["100~NATIONAL" Q
|
---|
30 | ..S ^TMP("PXRMEXTMP",$J,"PXRMDNAT")=""
|
---|
31 | .F S DSUB=$O(^PXD(811.8,IEN,100,DSUB)) Q:DSUB>DEND D
|
---|
32 | ..S DNODE=$G(^PXD(811.8,IEN,100,DSUB,0))
|
---|
33 | ..I ($P(DNODE,";")'="801.412")&($P(DNODE,";")'="801.41121")&($P(DNODE,";",3)'["118~") Q
|
---|
34 | ..S FILE=$P(DNODE,";")
|
---|
35 | ..S DNODE=$P(DNODE,";",3)
|
---|
36 | ..;;Modified Exchange to handle dialogs with replacement dialogs
|
---|
37 | ..I $E(DNODE,1,4)="118~" D
|
---|
38 | ...S DNAM=$P(DNODE,"~",2) Q:DNAM=""
|
---|
39 | ...S DLOC=$G(^TMP("PXRMEXTMP",$J,"DLOC",DNAM))
|
---|
40 | ...S REPCNT=REPCNT+1,^TMP("PXRMEXTMP",$J,"DREPL",REPCNT,DDLG)=DNAM_U_DLOC
|
---|
41 | ..I $E(DNODE,1,4)'=".01~" Q
|
---|
42 | ..S DSEQ=$P(DNODE,"~",2) Q:DSEQ=""
|
---|
43 | ..I FILE="801.41121" D Q
|
---|
44 | ...S DNAM=$P(DNODE,"~",2) Q:DNAM=""
|
---|
45 | ...S DLOC=$G(^TMP("PXRMEXTMP",$J,"DLOC",DNAM))
|
---|
46 | ...S CNT=0
|
---|
47 | ...I $D(^TMP("PXRMEXTMP",$J,"DMAP",DDLG))>0 S CNT=$O(^TMP("PXRMEXTMP",$J,"DMAP",DDLG,""),-1)
|
---|
48 | ...S ^TMP("PXRMEXTMP",$J,"DMAP",DDLG,CNT+1)=DNAM_U_DLOC
|
---|
49 | ..S DNODE=$G(^PXD(811.8,IEN,100,DSUB+1,0))
|
---|
50 | ..I ($P(DNODE,";")'="801.412") Q
|
---|
51 | ..S DNODE=$P(DNODE,";",3) I $E(DNODE,1,2)'="2~" Q
|
---|
52 | ..S DNAM=$P(DNODE,"~",2) Q:DNAM=""
|
---|
53 | ..S DLOC=$G(^TMP("PXRMEXTMP",$J,"DLOC",DNAM))
|
---|
54 | ..S ^TMP("PXRMEXTMP",$J,"DMAP",DDLG,DSEQ)=DNAM_U_DLOC
|
---|
55 | ;
|
---|
56 | ;Build index of dialog findings by name
|
---|
57 | N FDATA,FILENAM,FILENUM,FNAME
|
---|
58 | S IND=0
|
---|
59 | F S IND=$O(^PXD(811.8,IEN,120,IND)) Q:'IND D
|
---|
60 | .S FDATA=$G(^PXD(811.8,IEN,120,IND,0)) Q:FDATA=""
|
---|
61 | .S FILENAM=$P(FDATA,U),FILENUM=$P(FDATA,U,2) Q:FILENAM="" Q:'FILENUM
|
---|
62 | .;Ignore reminder dialogs
|
---|
63 | .I FILENAM="REMINDER DIALOG" Q
|
---|
64 | .;Ignore reminder terms
|
---|
65 | .I FILENAM="REMINDER TERM" Q
|
---|
66 | .;Strip off trailing S in finding file name
|
---|
67 | .I $E(FILENAM,$L(FILENAM))="S" S $E(FILENAM,$L(FILENAM))=""
|
---|
68 | .S JND=0
|
---|
69 | .F S JND=$O(^PXD(811.8,IEN,120,IND,1,JND)) Q:'JND D
|
---|
70 | ..S FNAME=$P($G(^PXD(811.8,IEN,120,IND,1,JND,0)),U) Q:FNAME=""
|
---|
71 | ..;Save entry
|
---|
72 | ..S ^TMP("PXRMEXFND",$J,FNAME)=FILENUM_U_FILENAM_U_IND
|
---|
73 | I $D(TEMPRESL)>0 D
|
---|
74 | .S DDLG="" F S DDLG=$O(TEMPRESL(DDLG)) Q:DDLG="" D
|
---|
75 | ..;S ^TMP("PXRMEXTMP",$J,"RESULT",DDLG,TEMPRESL(DDLG))=""
|
---|
76 | ..S DSEQ=$O(^TMP("PXRMEXTMP",$J,"DMAP",DDLG,""),-1)
|
---|
77 | ..S ^TMP("PXRMEXTMP",$J,"DMAP",DDLG,DSEQ+1)=TEMPRESL(DDLG)_U_RESGRP(TEMPRESL(DDLG))
|
---|
78 | Q
|
---|
79 | ;
|
---|
80 | ;Scan exchange file to get dialog fields
|
---|
81 | ;---------------------------------------
|
---|
82 | DPARSE N DCNT,DFIND,DFIAD,DFNAM,DFQUIT,DLCT,DLINES,DSUB,DTEXT,DTXT,DTYP
|
---|
83 | ;
|
---|
84 | ;Find where all the field numbers are kept
|
---|
85 | N DARRAY,DDATA,DFNUM,DRAW,DSTRING,RESNAM
|
---|
86 | S DSUB=DSTRT-1,DSTRING=";.01;4;5;15;24;25;55;"
|
---|
87 | ;S DSUB=DSTRT,DSTRING=";4;5;15;24;25;"
|
---|
88 | F S DSUB=$O(^PXD(811.8,IEN,100,DSUB)) Q:'DSUB D Q:DSUB>DEND
|
---|
89 | .S DDATA=$G(^PXD(811.8,IEN,100,DSUB,0)) Q:DDATA=""
|
---|
90 | .I $P(DDATA,";")'=801.41 Q
|
---|
91 | .S DFNUM=$P(DDATA,";",3),DFNUM=$P(DFNUM,"~") Q:DFNUM=""
|
---|
92 | .I DSTRING[(";"_DFNUM_";") S DARRAY(DFNUM)=DSUB
|
---|
93 | .I $P(DDATA,";")="801.41121" S DARRAY(55)=DSUB
|
---|
94 | ;
|
---|
95 | ;Determine dialog component type
|
---|
96 | S DSUB=DARRAY(4) Q:'DSUB
|
---|
97 | S DTYP=$P($G(^PXD(811.8,IEN,100,DSUB,0)),"~",2)
|
---|
98 | I DTYP'["result" S:DTYP[" " DTYP=$P(DTYP," ",2) S:DTYP="value" DTYP="forced"
|
---|
99 | ;
|
---|
100 | ;Initialise text and finding fields
|
---|
101 | S DTXT="*NONE*",DFIND=""
|
---|
102 | ;Get text appropriate for the type of component
|
---|
103 | I ((DTYP="element")!(DTYP="group"))&(DTYP'["result") D
|
---|
104 | .;search for WP text
|
---|
105 | .S DSUB=$G(DARRAY(25)) D:DSUB
|
---|
106 | ..S DTEXT=$P($G(^PXD(811.8,IEN,100,DSUB,0)),";",3) Q:DTEXT=""
|
---|
107 | ..;Get the line count
|
---|
108 | ..S DLINES=$P(DTEXT,"~",3),DCNT=0
|
---|
109 | ..;Get the wp text lines
|
---|
110 | ..F DLCT=DSUB+1:1:DSUB+DLINES D
|
---|
111 | ...S DTEXT=$G(^PXD(811.8,IEN,100,DLCT,0))
|
---|
112 | ...S DCNT=DCNT+1,DTXT(DCNT)=DTEXT
|
---|
113 | ...;Check for embedded TIU templates
|
---|
114 | ...D DTIU(DNAM,DTEXT)
|
---|
115 | ..;Reformat text to 50 characters
|
---|
116 | ..D DWP(.DTXT)
|
---|
117 | ..;Search for Result Group/Element
|
---|
118 | ..S DSUB=$G(DARRAY(55)) I DSUB>0 D
|
---|
119 | ...S RESNAME=$P($P($G(^PXD(811.8,IEN,100,DSUB,0)),";",3),"~",2)
|
---|
120 | ...S TEMPRESL(DNAM)=RESNAME
|
---|
121 | .;Search for finding item
|
---|
122 | .S DSUB=$G(DARRAY(15)) D:DSUB
|
---|
123 | ..S DFIND=$P($G(^PXD(811.8,IEN,100,DSUB,0)),";",3) Q:DFIND=""
|
---|
124 | ..;Finding name
|
---|
125 | ..S DFIND=$P(DFIND,"~",2) Q:DFIND=""
|
---|
126 | ..I $P(DFIND,".")="ICD9" S DFIND=$P(DFIND," ")
|
---|
127 | .;
|
---|
128 | .;Search for additional finding - start after WP text
|
---|
129 | .S DSUB=+$G(DARRAY(25)) D:DSUB
|
---|
130 | ..S DCNT=0,DFQUIT=0
|
---|
131 | ..F DLCT=DSUB+1+DLINES:1 D Q:DFQUIT Q:DLCT>DEND
|
---|
132 | ...S DTEXT=$G(^PXD(811.8,IEN,100,DLCT,0))
|
---|
133 | ...;Ignore line if this is not an additional finding
|
---|
134 | ...I $P(DTEXT,";")'=801.4118 S:$P(DTEXT,";")>801.4118 DFQUIT=1 Q
|
---|
135 | ...S DFNAM=$P(DTEXT,"~",2) Q:DFNAM=""
|
---|
136 | ...I $P(DFNAM,".")="ICD9" S DFNAM=$P(DFNAM," ")
|
---|
137 | ...S DCNT=DCNT+1,DFIAD(DCNT)=DFNAM
|
---|
138 | ;
|
---|
139 | I DTYP["result" D
|
---|
140 | .S DSUB=$G(DARRAY(.01)) Q:'DSUB
|
---|
141 | .S DTEXT=$P($G(^PXD(811.8,IEN,100,DSUB,0)),";",3) Q:DTEXT=""
|
---|
142 | .S DTXT=$P(DTEXT,"~",2)
|
---|
143 | .S RESGRP(DNAM)=DSTRT_U_DEND_U_IND_U_JND
|
---|
144 | ;
|
---|
145 | I DTYP="prompt" D
|
---|
146 | .;search for prompt caption
|
---|
147 | .S DSUB=$G(DARRAY(24)) Q:'DSUB
|
---|
148 | .S DTEXT=$P($G(^PXD(811.8,IEN,100,DSUB,0)),";",3) Q:DTEXT=""
|
---|
149 | .S DTXT=$P(DTEXT,"~",2)
|
---|
150 | ;
|
---|
151 | I DTYP="group" D
|
---|
152 | .;search for group caption
|
---|
153 | .S DSUB=$G(DARRAY(5)) Q:'DSUB
|
---|
154 | .S DTEXT=$P($G(^PXD(811.8,IEN,100,DSUB,0)),";",3) Q:DTEXT=""
|
---|
155 | .S DTXT=$P(DTEXT,"~",2)
|
---|
156 | .Q
|
---|
157 | ;
|
---|
158 | ;Save dialog type
|
---|
159 | S ^TMP("PXRMEXTMP",$J,"DTYP",DNAM)=DTYP
|
---|
160 | ;Save dialog component text (first line only)
|
---|
161 | S ^TMP("PXRMEXTMP",$J,"DTXT",DNAM)=DTXT
|
---|
162 | ;
|
---|
163 | ;Save main finding
|
---|
164 | I DFIND]"" S ^TMP("PXRMEXTMP",$J,"DFND",DNAM,1)=$P(DFIND,".",2,99)
|
---|
165 | ;Save additional findings
|
---|
166 | S DSUB=0
|
---|
167 | F S DSUB=$O(DFIAD(DSUB)) Q:'DSUB D
|
---|
168 | .S ^TMP("PXRMEXTMP",$J,"DFND",DNAM,DSUB+1)=$P(DFIAD(DSUB),".",2,99)
|
---|
169 | ;
|
---|
170 | ;Save additional WP text lines
|
---|
171 | S DSUB=0
|
---|
172 | F S DSUB=$O(DTXT(DSUB)) Q:'DSUB D
|
---|
173 | .S ^TMP("PXRMEXTMP",$J,"DTXT",DNAM,DSUB)=DTXT(DSUB)
|
---|
174 | ;
|
---|
175 | ;Save dialog's position in exchange file
|
---|
176 | S ^TMP("PXRMEXTMP",$J,"DLOC",DNAM)=DSTRT_U_DEND_U_IND_U_JND
|
---|
177 | Q
|
---|
178 | ;
|
---|
179 | ;Extract any TIU templates
|
---|
180 | ;-------------------------
|
---|
181 | DTIU(DNAM,TEXT) ;
|
---|
182 | N IC,TCNT,TLIST,TNAM
|
---|
183 | ;Templates are in format {FLD:fldname}
|
---|
184 | S TCNT=0 D TIUXTR^PXRMEXDG("{FLD:","}",TEXT,.TLIST,.TCNT) Q:'TCNT
|
---|
185 | ;
|
---|
186 | F IC=1:1:TCNT D
|
---|
187 | .S TNAM=$G(TLIST(TCNT)) Q:TNAM=""
|
---|
188 | .S ^TMP("PXRMEXTMP",$J,"DTIU",DNAM,TNAM)=""
|
---|
189 | Q
|
---|
190 | ;
|
---|
191 | ;Process WP fields
|
---|
192 | ;-----------------
|
---|
193 | DWP(TEXT) ;
|
---|
194 | N DIWF,DIWL,DIWR,IC,X
|
---|
195 | S DIWF="C50",DIWL=0,DIWR=50
|
---|
196 | ;
|
---|
197 | K ^UTILITY($J,"W")
|
---|
198 | S IC=""
|
---|
199 | F S IC=$O(TEXT(IC)) Q:IC="" D
|
---|
200 | .S X=TEXT(IC)
|
---|
201 | .D ^DIWP
|
---|
202 | ;
|
---|
203 | K TEXT
|
---|
204 | S IC=0
|
---|
205 | F S IC=$O(^UTILITY($J,"W",0,IC)) Q:IC="" D
|
---|
206 | .S DTEXT=$G(^UTILITY($J,"W",0,IC,0))
|
---|
207 | .I IC=1 S TEXT=DTEXT Q
|
---|
208 | .S TEXT(IC-1)=DTEXT
|
---|
209 | ;
|
---|
210 | K ^UTILITY($J,"W")
|
---|
211 | Q
|
---|