1 | PXRMEXPR ; SLC/PKR/PJH - Routines to create packed reminder definitions. ;02/25/2004
|
---|
2 | ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
|
---|
3 | ;===============================================================
|
---|
4 | ADDFILE(FLIST,ROOT,FILENAME) ;Add a file to the list of finding files.
|
---|
5 | N DIC,DO,FILENUM
|
---|
6 | S DIC="^"_ROOT
|
---|
7 | K DO
|
---|
8 | D DO^DIC1
|
---|
9 | S FILENUM=+DO(2)
|
---|
10 | S FILENAME=$P(DO,U,1)
|
---|
11 | S FLIST(FILENAME)=FILENUM
|
---|
12 | Q
|
---|
13 | ;
|
---|
14 | ;===============================================================
|
---|
15 | ADDFIND(FLIST,FILENAME,IEN) ;Add a finding to the list of findings.
|
---|
16 | S FLIST(FILENAME,"F",IEN)=""
|
---|
17 | ;Make sure categories are included for any health factors and they
|
---|
18 | ;come first in the list of health factors.
|
---|
19 | I FILENAME="HEALTH FACTORS" D
|
---|
20 | . N CAT
|
---|
21 | . S CAT=$P(^AUTTHF(IEN,0),U,3)
|
---|
22 | . S FLIST(FILENAME,"C",CAT)=""
|
---|
23 | Q
|
---|
24 | ;
|
---|
25 | ;===============================================================
|
---|
26 | BLDSPON(RIEN,FINDLIST,SPONLIST) ;Build the sponsor list.
|
---|
27 | N DIEN,IEN,IND,IND0
|
---|
28 | ;Start with the definition.
|
---|
29 | D GETSPON(811.9,RIEN,.SPONLIST)
|
---|
30 | ;If there is a dialog add it.
|
---|
31 | S DIEN=+$P($G(^PXD(811.9,RIEN,51)),U,1)
|
---|
32 | I DIEN>0 D GETSPON(801.41,DIEN,.SPONLIST)
|
---|
33 | ;Go through the finding list to find additional sponsors.
|
---|
34 | S IND=""
|
---|
35 | F S IND=$O(FINDLIST(IND)) Q:IND="" D
|
---|
36 | . S FILENUM=FINDLIST(IND)
|
---|
37 | . I (FILENUM'<800)&(FILENUM'>811.9) D
|
---|
38 | .. S IND0=""
|
---|
39 | .. F S IND0=$O(FINDLIST(IND,IND0)) Q:IND0="" D
|
---|
40 | ... S IEN=""
|
---|
41 | ... F S IEN=+$O(FINDLIST(IND,IND0,IEN)) Q:IEN=0 D
|
---|
42 | .... D GETSPON(FILENUM,IEN,.SPONLIST)
|
---|
43 | ;Add any associated sponsors to the begining of the list.
|
---|
44 | S IND=""
|
---|
45 | F S IND=$O(SPONLIST("S",IND)) Q:IND="" D
|
---|
46 | . S IND0=0
|
---|
47 | . F S IND0=+$O(^PXRMD(811.6,IND,2,IND0)) Q:IND0=0 D
|
---|
48 | .. S IEN=+^PXRMD(811.6,IND,2,IND0,0)
|
---|
49 | .. S SPONLIST("A",IEN)=""
|
---|
50 | Q
|
---|
51 | ;
|
---|
52 | ;===============================================================
|
---|
53 | BLDTEXT(TMPIND) ;Combine the source information and the user's input into the
|
---|
54 | ;"TEXT" array.
|
---|
55 | N IC,IND
|
---|
56 | S (IC,IND)=0
|
---|
57 | F S IC=$O(^TMP(TMPIND,$J,"SRC",IC)) Q:+IC=0 D
|
---|
58 | . S IND=IND+1
|
---|
59 | . S ^TMP(TMPIND,$J,"TEXT",1,IND)=^TMP(TMPIND,$J,"SRC",IC)
|
---|
60 | ;
|
---|
61 | S IC=0
|
---|
62 | F S IC=$O(^TMP(TMPIND,$J,"TXT",1,IC)) Q:+IC=0 D
|
---|
63 | . S IND=IND+1
|
---|
64 | . S ^TMP(TMPIND,$J,"TEXT",1,IND)=^TMP(TMPIND,$J,"TXT",1,IC,0)
|
---|
65 | Q
|
---|
66 | ;
|
---|
67 | ;===============================================================
|
---|
68 | GETDFIND(RIEN,FLIST) ;Build the list of definition findings.
|
---|
69 | ;FLIST has the format FLIST(FILENAME)=file number, and for each
|
---|
70 | ;finding from the file FLIST(FILENAME,"F",IEN)="". For Health Factors
|
---|
71 | ;category entries are FLIST(FILENAME,"C",IEN)="".
|
---|
72 | N FILENAME,IEN,ROOT
|
---|
73 | S ROOT=""
|
---|
74 | F S ROOT=$O(^PXD(811.9,RIEN,20,"E",ROOT)) Q:ROOT="" D
|
---|
75 | . D ADDFILE(.FLIST,ROOT,.FILENAME)
|
---|
76 | . S IEN=0
|
---|
77 | . F S IEN=$O(^PXD(811.9,RIEN,20,"E",ROOT,IEN)) Q:+IEN=0 D
|
---|
78 | .. D ADDFIND(.FLIST,FILENAME,IEN)
|
---|
79 | Q
|
---|
80 | ;
|
---|
81 | ;===============================================================
|
---|
82 | GETSPON(FILENUM,IEN,SPONLIST) ;Add sponsors to the sponsor list.
|
---|
83 | N ENTRY,ROOT,SPONSOR
|
---|
84 | S ROOT=$$GET1^DID(FILENUM,"","","GLOBAL NAME")
|
---|
85 | S ENTRY=ROOT_IEN_",100)"
|
---|
86 | S ENTRY=$G(@ENTRY)
|
---|
87 | S SPONSOR=$P(ENTRY,U,2)
|
---|
88 | I SPONSOR'="" S SPONLIST("S",SPONSOR)=""
|
---|
89 | Q
|
---|
90 | ;
|
---|
91 | ;===============================================================
|
---|
92 | GETTFIND(FLIST) ;If there are any terms in the list of findings go through
|
---|
93 | ;them and add the mapped findings to the list of findings.
|
---|
94 | I '$D(FLIST("REMINDER TERM")) Q
|
---|
95 | N FILENAME,ROOT,TIEN
|
---|
96 | S TIEN=0
|
---|
97 | F S TIEN=$O(FLIST("REMINDER TERM","F",TIEN)) Q:+TIEN=0 D
|
---|
98 | . S ROOT=""
|
---|
99 | . F S ROOT=$O(^PXRMD(811.5,TIEN,20,"E",ROOT)) Q:ROOT="" D
|
---|
100 | .. D ADDFILE(.FLIST,ROOT,.FILENAME)
|
---|
101 | .. S IEN=0
|
---|
102 | .. F S IEN=$O(^PXRMD(811.5,TIEN,20,"E",ROOT,IEN)) Q:+IEN=0 D
|
---|
103 | ... D ADDFIND(.FLIST,FILENAME,IEN)
|
---|
104 | Q
|
---|
105 | ;
|
---|
106 | ;===============================================================
|
---|
107 | GETTEXT(RIEN,TMPIND,INDEX) ;Let the user input some text.
|
---|
108 | N DIC,DWLW,DWPK
|
---|
109 | ;If this is the description text, load the reminder description as
|
---|
110 | ;the default.
|
---|
111 | S RIEN=+RIEN
|
---|
112 | I RIEN>0 M ^TMP(TMPIND,$J,INDEX,1)=^PXD(811.9,RIEN,1)
|
---|
113 | S DIC="^TMP(TMPIND,$J,"""_INDEX_""",1,"
|
---|
114 | S DWLW=72
|
---|
115 | S DWPK=1
|
---|
116 | D EN^DIWE
|
---|
117 | Q
|
---|
118 | ;
|
---|
119 | ;===============================================================
|
---|
120 | PACK(RTP,TMPIND) ;Create the packed reminder, store it in
|
---|
121 | ;^TMP(TMPIND,$J). TMPIND should be namespaced and set by the caller.
|
---|
122 | ;Save the source information
|
---|
123 | I +RTP'>0 Q
|
---|
124 | K ^TMP(TMPIND,$J)
|
---|
125 | D PUTSRC(RTP,TMPIND)
|
---|
126 | ;
|
---|
127 | ;Have the user input text that describes the reminder.
|
---|
128 | W !,"Enter a description of the reminder you are packing." H 3
|
---|
129 | D GETTEXT(RTP,TMPIND,"DESC")
|
---|
130 | ;
|
---|
131 | ;Have the user input keywords for indexing the reminder.
|
---|
132 | W !,"Enter keywords or phrases to help index the reminder you are packing."
|
---|
133 | W !,"Separate the keywords or phrases on each line with commas." H 3
|
---|
134 | D GETTEXT(0,TMPIND,"KEYWORD")
|
---|
135 | ;
|
---|
136 | ;Combine the source and input text into the "TEXT" array.
|
---|
137 | D BLDTEXT(TMPIND)
|
---|
138 | ;
|
---|
139 | W !,"Packing the reminder ... "
|
---|
140 | ;Build lists of the various reminder components.
|
---|
141 | N CF,IEN,IND0,FINDLIST,FILELIST,FILENAME,FILENUM,DLGLIST
|
---|
142 | N NUMF,NUMR,OBJLIST,RIEN,ROUTINE,RTNLIST
|
---|
143 | N SERROR,SPONLIST,TEMLIST
|
---|
144 | S RIEN=$P(RTP,U,1)
|
---|
145 | ;
|
---|
146 | ;Get the list of definition findings and start the sponsor list.
|
---|
147 | D GETDFIND(RIEN,.FINDLIST)
|
---|
148 | ;
|
---|
149 | ;Add term findings to the list.
|
---|
150 | D GETTFIND(.FINDLIST)
|
---|
151 | ;
|
---|
152 | ;If a dialog exists for this reminder add it and its findings to the
|
---|
153 | ;list. Also collect any embedded TIU objects or templates
|
---|
154 | D DIALOG^PXRMEXDG(RIEN,.DLGLIST,.FINDLIST,.OBJLIST,.TEMLIST)
|
---|
155 | ;
|
---|
156 | ;If there were education topics make sure subtopics are included.
|
---|
157 | D SUB^PXRMEXED(.FINDLIST)
|
---|
158 | ;
|
---|
159 | ;The finding list is complete, search the definition, dialog and
|
---|
160 | ;all the findings for sponsors.
|
---|
161 | D BLDSPON(RIEN,.FINDLIST,.SPONLIST)
|
---|
162 | ;
|
---|
163 | ;Put sponsors first on the file list.
|
---|
164 | S NUMF=0
|
---|
165 | S IND0=0
|
---|
166 | F S IND0=$O(SPONLIST(IND0)) Q:IND0="" D
|
---|
167 | . S IEN=0
|
---|
168 | . F S IEN=$O(SPONLIST(IND0,IEN)) Q:IEN="" D
|
---|
169 | .. S NUMF=NUMF+1
|
---|
170 | .. S FILELIST(NUMF)="REMINDER SPONSOR"_U_811.6_U_IEN
|
---|
171 | ;
|
---|
172 | ;Look for any computed findings and put the associated routines
|
---|
173 | ;on the routine list.
|
---|
174 | S (IEN,NUMR)=0
|
---|
175 | F S IEN=$O(FINDLIST("REMINDER COMPUTED FINDINGS","F",IEN)) Q:IEN="" D
|
---|
176 | . S ROUTINE=$P(^PXRMD(811.4,IEN,0),U,2)
|
---|
177 | . S NUMR=NUMR+1
|
---|
178 | . S RTNLIST(NUMR)=ROUTINE
|
---|
179 | ;
|
---|
180 | ;Go through the finding list and create the file list in the same
|
---|
181 | ;order as the finding list.
|
---|
182 | S FILENAME=""
|
---|
183 | F S FILENAME=$O(FINDLIST(FILENAME)) Q:FILENAME="" D
|
---|
184 | . S FILENUM=FINDLIST(FILENAME)
|
---|
185 | . S IND0=""
|
---|
186 | . F S IND0=$O(FINDLIST(FILENAME,IND0)) Q:IND0="" D
|
---|
187 | .. S IEN=0
|
---|
188 | .. F S IEN=$O(FINDLIST(FILENAME,IND0,IEN)) Q:IEN="" D
|
---|
189 | ... S NUMF=NUMF+1
|
---|
190 | ... S FILELIST(NUMF)=FILENAME_U_FILENUM_U_IEN
|
---|
191 | ;
|
---|
192 | ;Add TIU templates to the file list.
|
---|
193 | S IND0=0
|
---|
194 | F S IND0=$O(TEMLIST(IND0)) Q:IND0="" D
|
---|
195 | . S IEN=$$EXISTS^PXRMEXIU(8927.1,TEMLIST(IND0))
|
---|
196 | . S NUMF=NUMF+1
|
---|
197 | . S FILELIST(NUMF)="TIU TEMPLATE FIELD"_U_8927.1_U_IEN
|
---|
198 | ;
|
---|
199 | ;Put the reminder at next to last.
|
---|
200 | S NUMF=NUMF+1
|
---|
201 | S FILELIST(NUMF)="REMINDER DEFINITION"_U_811.9_U_RIEN
|
---|
202 | ;
|
---|
203 | ;Put dialogs last on the file list.
|
---|
204 | S FILENUM=$G(DLGLIST("DIALOG"))
|
---|
205 | S IND0=""
|
---|
206 | F S IND0=$O(DLGLIST("DIALOG",IND0)) Q:IND0="" D
|
---|
207 | . S IEN=""
|
---|
208 | . F S IEN=$O(DLGLIST("DIALOG",IND0,IEN)) Q:IEN="" D
|
---|
209 | .. S NUMF=NUMF+1
|
---|
210 | .. S FILELIST(NUMF)="REMINDER DIALOG"_U_FILENUM_U_IEN
|
---|
211 | ;
|
---|
212 | S SERROR=0
|
---|
213 | ;Put any routines into the ^TMP array.
|
---|
214 | D GRTN^PXRMEXPU(.RTNLIST,NUMR,TMPIND,.SERROR)
|
---|
215 | ;Put the GETS^DIQ extracts of the findings, dialogs, and
|
---|
216 | ;reminder definition into the ^TMP array.
|
---|
217 | D GDIQF^PXRMEXPU(.FILELIST,NUMF,TMPIND,.SERROR)
|
---|
218 | ;
|
---|
219 | ;If there were any errors saving the data kill the ^TMP array.
|
---|
220 | I SERROR K ^TMP(TMPIND,$J)
|
---|
221 | Q
|
---|
222 | ;
|
---|
223 | ;===============================================================
|
---|
224 | PUTSRC(RTP,TMPIND) ;Save the source information
|
---|
225 | N LOC
|
---|
226 | S LOC=$$SITE^VASITE
|
---|
227 | S ^TMP(TMPIND,$J,"SRC","REMINDER")=$P(RTP,U,2)
|
---|
228 | ;S ^TMP(TMPIND,$J,"SRC","USER")=$P(^VA(200,DUZ,0),U,1)
|
---|
229 | S ^TMP(TMPIND,$J,"SRC","USER")=$$GET1^DIQ(200,DUZ,.01)
|
---|
230 | S ^TMP(TMPIND,$J,"SRC","SITE")=$P(LOC,U,2)
|
---|
231 | S ^TMP(TMPIND,$J,"SRC","DATE")=$$FMTE^XLFDT($$NOW^XLFDT,"5Z")
|
---|
232 | Q
|
---|
233 | ;
|
---|