| 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
 | 
|---|