[623] | 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 | ;
|
---|