[613] | 1 | PXRMEXDG ;SLC/PJH - Reminder Dialog Exchange index build ;05/16/2007
|
---|
| 2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
|
---|
| 3 | ;
|
---|
| 4 | ;=====================================================================
|
---|
| 5 | DIALOG(RIEN,DLIST,FLIST,OLIST,TLIST,SPONLIST) ;
|
---|
| 6 | ;
|
---|
| 7 | ;Routine to get dialog details for a given reminder
|
---|
| 8 | ;
|
---|
| 9 | ;Called as DIALOG^PXRMEXDG(RIEN,.DLIST,.FLIST)
|
---|
| 10 | ;
|
---|
| 11 | ;RIEN - Reminder IEN
|
---|
| 12 | ;DLIST - List of dialogs (components first)
|
---|
| 13 | ;FLIST - Finding list used by PXRMEXPR
|
---|
| 14 | ;OLIST - List of embedded TIU objects
|
---|
| 15 | ;TLIST - List of embedded TIU templates
|
---|
| 16 | ;
|
---|
| 17 | ;Initialize
|
---|
| 18 | K DLIST
|
---|
| 19 | N DARRAY,DCNT,DIALOG,DIEN,FCNT,FINDING,OCNT,RCNT,RESULT,TEMP
|
---|
| 20 | ;Check if reminder exists
|
---|
| 21 | Q:'$D(^PXD(811.9,RIEN,0))
|
---|
| 22 | ;Get dialog ien from reminder definition
|
---|
| 23 | S DIEN=$P($G(^PXD(811.9,RIEN,51)),U) Q:'DIEN
|
---|
| 24 | ;Check dialog pointer is valid
|
---|
| 25 | Q:'$D(^PXRMD(801.41,DIEN))
|
---|
| 26 | ;Dialog and Finding count
|
---|
| 27 | S DCNT=0,FCNT=0,RCNT=0,TCNT=0
|
---|
| 28 | ;Get details
|
---|
| 29 | D GETSPON^PXRMEXPR(801.41,DIEN,.SPONLIST)
|
---|
| 30 | D DGET(DIEN,.SPONLIST)
|
---|
| 31 | ;
|
---|
| 32 | ;Now build the dialog list (components first)
|
---|
| 33 | S DCNT="",OCNT=0
|
---|
| 34 | F S DCNT=$O(DARRAY(DCNT),-1) Q:'DCNT D
|
---|
| 35 | .;Ignore dialogs previously encountered
|
---|
| 36 | .S DIEN=DARRAY(DCNT) Q:$D(DIALOG(DIEN))
|
---|
| 37 | .;Save dialog in output array
|
---|
| 38 | .S OCNT=OCNT+1,DIALOG(DIEN)="",TEMP("DIALOG",OCNT)=DIEN
|
---|
| 39 | ;
|
---|
| 40 | ;Save the dialog and result details to DLIST
|
---|
| 41 | N CNT,COUNT,DTYP
|
---|
| 42 | S COUNT=0
|
---|
| 43 | F DTYP="RESULT ELEMENT" D
|
---|
| 44 | .S CNT=0 F S CNT=$O(TEMP(DTYP,CNT)) Q:CNT'>0 D
|
---|
| 45 | ..S DIEN=$G(TEMP(DTYP,CNT)) Q:DIEN'>0
|
---|
| 46 | ..S COUNT=COUNT+1,DLIST("DIALOG",COUNT,DIEN)=""
|
---|
| 47 | ;
|
---|
| 48 | F DTYP="RESULT" D
|
---|
| 49 | .S CNT=0 F S CNT=$O(TEMP(DTYP,CNT)) Q:CNT'>0 D
|
---|
| 50 | ..S DIEN=$G(TEMP(DTYP,CNT)) Q:DIEN'>0
|
---|
| 51 | ..S COUNT=COUNT+1,DLIST("DIALOG",COUNT,DIEN)=""
|
---|
| 52 | ;
|
---|
| 53 | ;F DTYP="RESULT","DIALOG" D
|
---|
| 54 | F DTYP="DIALOG" D
|
---|
| 55 | .F CNT=1:1 S DIEN=$G(TEMP(DTYP,CNT)) Q:'DIEN D
|
---|
| 56 | ..S COUNT=COUNT+1,DLIST("DIALOG",COUNT,DIEN)=""
|
---|
| 57 | ;
|
---|
| 58 | I COUNT>0 S DLIST("DIALOG")=801.41
|
---|
| 59 | ;
|
---|
| 60 | ;Add Dialog Findings to FLIST if not aready present
|
---|
| 61 | N DIC,DO,IEN,FNAME,FNUM,SUB
|
---|
| 62 | S SUB=0
|
---|
| 63 | F S SUB=$O(TEMP("FINDING",SUB)) Q:'SUB D
|
---|
| 64 | .S IEN=$P(TEMP("FINDING",SUB),";"),DIC=U_$P(TEMP("FINDING",SUB),";",2)
|
---|
| 65 | .K DO D DO^DIC1
|
---|
| 66 | .S FNUM=+DO(2),FNAME=$P(DO,U) I ('FNUM)!(FNAME="") Q
|
---|
| 67 | .;Check if present in FLIST
|
---|
| 68 | .I $D(FLIST(FNAME,"F",IEN)) Q
|
---|
| 69 | .;Otherwise add to list
|
---|
| 70 | .S:'$D(FLIST(FNAME)) FLIST(FNAME)=FNUM S FLIST(FNAME,"F",IEN)=""
|
---|
| 71 | .;Add the Health Factor category to FLIST
|
---|
| 72 | .I FNAME="HEALTH FACTORS" D
|
---|
| 73 | ..N HFCAT
|
---|
| 74 | ..S HFCAT=$P($G(^AUTTHF(IEN,0)),U,3) S:HFCAT FLIST(FNAME,"C",HFCAT)=""
|
---|
| 75 | ;
|
---|
| 76 | ;Store any TIU components
|
---|
| 77 | N GLOB,DIEN,CNT
|
---|
| 78 | ;Set global for search
|
---|
| 79 | S GLOB="^PXRMD(801.41,"
|
---|
| 80 | ;Search through all component dialogs
|
---|
| 81 | S CNT=0
|
---|
| 82 | F S CNT=$O(DLIST("DIALOG",CNT)) Q:'CNT D
|
---|
| 83 | .S DIEN=$O(DLIST("DIALOG",CNT,"")) Q:'DIEN
|
---|
| 84 | .;Search Dialog Text for TIU Objects and Templates
|
---|
| 85 | .D TIUSRCH(GLOB,DIEN,25,.OLIST,.TLIST)
|
---|
| 86 | .;Search P/N Text for TIU Objects and Templates
|
---|
| 87 | .D TIUSRCH(GLOB,DIEN,35,.OLIST,.TLIST)
|
---|
| 88 | ;
|
---|
| 89 | Q
|
---|
| 90 | ;
|
---|
| 91 | ;Get the dialog components
|
---|
| 92 | ;-------------------------
|
---|
| 93 | DGET(D0,SPONLIST) ;Save dialog ien
|
---|
| 94 | N D1
|
---|
| 95 | I $G(D0)=83
|
---|
| 96 | I $G(^PXRMD(801.41,D0,49))'="",$P(^PXRMD(801.41,D0,49),U,3)>0 D
|
---|
| 97 | .S D1=$P($G(^PXRMD(801.41,D0,49)),U,3) D DGET1(D0,.SPONLIST) D DGET1(D1,.SPONLIST)
|
---|
| 98 | E D DGET1(D0,.SPONLIST)
|
---|
| 99 | Q
|
---|
| 100 | DGET1(D0,SPONLIST) ;
|
---|
| 101 | S DCNT=DCNT+1,DARRAY(DCNT)=D0
|
---|
| 102 | ;And details (except for reminder dialog)
|
---|
| 103 | I DCNT>1 D
|
---|
| 104 | .D GETSPON^PXRMEXPR(801.41,D0,.SPONLIST)
|
---|
| 105 | .;Finding items
|
---|
| 106 | .D DFIND(D0)
|
---|
| 107 | .;Additional Finding Items
|
---|
| 108 | .D DFINDA(D0)
|
---|
| 109 | .;Result groups
|
---|
| 110 | .D DRESULT(D0)
|
---|
| 111 | ;
|
---|
| 112 | ;Dialog components
|
---|
| 113 | N DCOMP,DCOMP1,DDATA,DSUB
|
---|
| 114 | S DSUB=0
|
---|
| 115 | F S DSUB=$O(^PXRMD(801.41,D0,10,DSUB)) Q:'DSUB D
|
---|
| 116 | .;Get any component dialogs
|
---|
| 117 | .S DCOMP=$P($G(^PXRMD(801.41,D0,10,DSUB,0)),U,2) Q:'DCOMP
|
---|
| 118 | .;If component exists get sub-components
|
---|
| 119 | .S DDATA=$G(^PXRMD(801.41,DCOMP,0)) Q:DDATA=""
|
---|
| 120 | .;Exclude national PXRM prompts
|
---|
| 121 | .I +$G(PXRMINST)=0,$E(DDATA,1,4)="PXRM",$P($G(^PXRMD(801.41,DCOMP,100)),U)="N" Q
|
---|
| 122 | .;Sub-components
|
---|
| 123 | .D DGET(DCOMP,.SPONLIST)
|
---|
| 124 | .;I $G(DCOMP1)'="" D DGET(DCOMP1) S DCOMP1=""
|
---|
| 125 | Q
|
---|
| 126 | ;
|
---|
| 127 | ;Build list of finding items
|
---|
| 128 | ;---------------------------
|
---|
| 129 | DFIND(DIEN) ;
|
---|
| 130 | N FIND,FIEN,FGLOB,FNAM
|
---|
| 131 | ;Finding Item
|
---|
| 132 | S FIND=$P($G(^PXRMD(801.41,DIEN,1)),U,5)
|
---|
| 133 | ;If a finding item exists check and save
|
---|
| 134 | LOOP ;
|
---|
| 135 | I FIND]"" D
|
---|
| 136 | .;Finding item defined
|
---|
| 137 | .S FIEN=$P(FIND,";"),FGLOB=$P(FIND,";",2) Q:'FIEN Q:FGLOB=""
|
---|
| 138 | .;And finding item exists
|
---|
| 139 | .Q:'$D(@(U_FGLOB_FIEN_",0)"))
|
---|
| 140 | .;Finding name
|
---|
| 141 | .S FNAM=$P($G(@(U_FGLOB_FIEN_",0)")),U) S:FNAM="" FNAM="???"
|
---|
| 142 | .;And not previously saved
|
---|
| 143 | .I '$D(FINDING(FIND)) D
|
---|
| 144 | ..S FCNT=FCNT+1,FINDING(FIND)="",TEMP("FINDING",FCNT)=FIND
|
---|
| 145 | I $G(^PXRMD(801.41,DIEN,49))'="",$P(^PXRMD(801.41,DIEN,49),U)>0 D
|
---|
| 146 | .S FIND=$P(^PXRMD(801.41,DIEN,49),U)
|
---|
| 147 | .I $D(FLIST("REMINDER TERM","F",FIND)) Q
|
---|
| 148 | .I '$D(FLIST("REMINDER TERM")) S FLIST("REMINDER TERM")="811.5"
|
---|
| 149 | .S FLIST("REMINDER TERM","F",FIND)=""
|
---|
| 150 | .D GETTFIND^PXRMEXPR(.FLIST)
|
---|
| 151 | Q
|
---|
| 152 | ;
|
---|
| 153 | ;Build list of additional findings
|
---|
| 154 | ;---------------------------------
|
---|
| 155 | DFINDA(DIEN) ;
|
---|
| 156 | N FIND,FIEN,FGLOB,FNAM,FSUB
|
---|
| 157 | S FSUB=0
|
---|
| 158 | F S FSUB=$O(^PXRMD(801.41,DIEN,3,FSUB)) Q:'FSUB D
|
---|
| 159 | .;Additional Finding Item
|
---|
| 160 | .S FIND=$P($G(^PXRMD(801.41,DIEN,3,FSUB,0)),U)
|
---|
| 161 | .;If a finding item exists check and save
|
---|
| 162 | .I FIND]"" D
|
---|
| 163 | ..;Finding item defined
|
---|
| 164 | ..S FIEN=$P(FIND,";"),FGLOB=$P(FIND,";",2) Q:'FIEN Q:FGLOB=""
|
---|
| 165 | ..;And finding item exists
|
---|
| 166 | ..Q:'$D(@(U_FGLOB_FIEN_",0)"))
|
---|
| 167 | ..;Finding name
|
---|
| 168 | ..S FNAM=$P($G(@(U_FGLOB_FIEN_",0)")),U) S:FNAM="" FNAM="???"
|
---|
| 169 | ..;And not previously saved
|
---|
| 170 | ..I '$D(FINDING(FIND)) D
|
---|
| 171 | ...S FCNT=FCNT+1,FINDING(FIND)="",TEMP("FINDING",FCNT)=FIND
|
---|
| 172 | Q
|
---|
| 173 | ;
|
---|
| 174 | ;Build list of result groups
|
---|
| 175 | ;---------------------------
|
---|
| 176 | DRESULT(DIEN) ;
|
---|
| 177 | N CNT,RIEN,RECNT,RGCNT
|
---|
| 178 | ;Result Group/Element pointer
|
---|
| 179 | S RECNT=$O(TEMP("RESULT ELEMENT",""),-1)
|
---|
| 180 | S RGCNT=$O(TEMP("RESULT",""),-1)
|
---|
| 181 | S CNT=0
|
---|
| 182 | F S CNT=$O(^PXRMD(801.41,DIEN,51,CNT)) Q:CNT'>0 D
|
---|
| 183 | .S RIEN=$P($G(^PXRMD(801.41,DIEN,51,CNT,0)),U) Q:RIEN'>0
|
---|
| 184 | .;S RIEN=$P($G(^PXRMD(801.41,DIEN,0)),U,15) Q:'RIEN Q:$D(RESULT(RIEN))
|
---|
| 185 | .;Result group compoments
|
---|
| 186 | .N DSUB,REIEN
|
---|
| 187 | .S DSUB=0
|
---|
| 188 | .F S DSUB=$O(^PXRMD(801.41,RIEN,10,DSUB)) Q:'DSUB D
|
---|
| 189 | ..;Get result element
|
---|
| 190 | ..S REIEN=$P($G(^PXRMD(801.41,RIEN,10,DSUB,0)),U,2) Q:'REIEN
|
---|
| 191 | ..Q:'$D(^PXRMD(801.41,REIEN,0))
|
---|
| 192 | ..;If element exists get save it
|
---|
| 193 | ..S RECNT=RECNT+1,TEMP("RESULT ELEMENT",RECNT)=REIEN
|
---|
| 194 | ..;S RCNT=RCNT+1,OUTPUT("RESULT",RCNT)=REIEN
|
---|
| 195 | .;
|
---|
| 196 | .;Save result group
|
---|
| 197 | .S RGCNT=RGCNT+1,TEMP("RESULT",RGCNT)=RIEN
|
---|
| 198 | .;S RCNT=RCNT+1,RESULT(RIEN)="",TEMP("RESULT",RCNT)=RIEN
|
---|
| 199 | Q
|
---|
| 200 | ;
|
---|
| 201 | ;Extract TIU Objects/Templates from any WP text
|
---|
| 202 | ;----------------------------------------------
|
---|
| 203 | TIUSRCH(GLOB,IEN,NODE,OLIST,TLIST) ;
|
---|
| 204 | N OCNT,TCNT,TEXT
|
---|
| 205 | ;Add to existing arrays
|
---|
| 206 | S OCNT=+$O(OLIST(""),-1),TCNT=+$O(TLIST(""),-1),SUB=0
|
---|
| 207 | ;Scan WP fields
|
---|
| 208 | F S SUB=$O(@(GLOB_IEN_","_NODE_","_SUB_")")) Q:'SUB D
|
---|
| 209 | .;Get individual line
|
---|
| 210 | .S TEXT=$G(@(GLOB_IEN_","_NODE_","_SUB_",0)")) Q:TEXT=""
|
---|
| 211 | .;Most text lines will have no TIU link so ignore them
|
---|
| 212 | .I (TEXT'["|")&(TEXT'["{FLD:") Q
|
---|
| 213 | .;Templates are in format {FLD:fldname} (only applies to dialogs)
|
---|
| 214 | .I GLOB[801.41 D TIUXTR("{FLD:","}",TEXT,.TLIST,.TCNT)
|
---|
| 215 | .;Objects are in format |Objectname|
|
---|
| 216 | .D TIUXTR("|","|",TEXT,.OLIST,.OCNT)
|
---|
| 217 | Q
|
---|
| 218 | ;
|
---|
| 219 | TIUXTR(SRCH,SRCH1,TEXT,OUTPUT,CNT) ;
|
---|
| 220 | N EXIST,IC,TXT,ONAME
|
---|
| 221 | S TXT=TEXT
|
---|
| 222 | F D Q:TXT'[SRCH
|
---|
| 223 | .S TXT=$E(TXT,$F(TXT,SRCH),$L(TXT)) Q:TXT'[SRCH1
|
---|
| 224 | .S ONAME=$P(TXT,SRCH1) Q:ONAME=""
|
---|
| 225 | .;Check if already selected
|
---|
| 226 | .S EXIST=0,IC=0
|
---|
| 227 | .F S IC=$O(OUTPUT(IC)) Q:'IC Q:EXIST D
|
---|
| 228 | ..I $G(OUTPUT(IC))=ONAME S EXIST=1
|
---|
| 229 | .;Save array of object/template names
|
---|
| 230 | .I 'EXIST S CNT=CNT+1,OUTPUT(CNT)=ONAME
|
---|
| 231 | Q
|
---|