| 1 | PXRMEXIC ; SLC/PKR/PJH - Routines to install repository entry components. ;09/21/2004
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005
 | 
|---|
| 3 |  ;=================================================
 | 
|---|
| 4 | FILE(PXRMRIEN,EXISTS,IND120,JND120,ACTION,ATTR,NAMECHG) ;Read and process a
 | 
|---|
| 5 |  ;file entry in repository entry PXRMRIEN. IND120 and JND120 are the
 | 
|---|
| 6 |  ;indexes for the component list. ACTION is one of the possible actions.
 | 
|---|
| 7 |  I ACTION="S" Q
 | 
|---|
| 8 |  N DATA,FDA,FDAEND,FDASTART,FIELD,FILENUM
 | 
|---|
| 9 |  N IEN,IENS,IENREND,IENROOT,IENRSTR,IND,INDICES
 | 
|---|
| 10 |  N LINE,MSG,NEW01,PXNAT,PXRMEDOK,PXRMEXCH
 | 
|---|
| 11 |  N SITEIEN,SRCIEN,TEMP,TFDA,TNAME,TOPFNUM,VERSN
 | 
|---|
| 12 |  N WPLCNT,WPTMP
 | 
|---|
| 13 |  ;Set PXRMEDOK so files pointing to sponsors can be installed.
 | 
|---|
| 14 |  ;Set PXRMEXCH so national entries can be installed and prevent
 | 
|---|
| 15 |  ;execution of the input transform for custom logic fields.
 | 
|---|
| 16 |  ;Set PXNAT to allow installation of national (those starting with VA-)
 | 
|---|
| 17 |  ;PCE items.
 | 
|---|
| 18 |  S (PXNAT,PXRMEDOK,PXRMEXCH)=1
 | 
|---|
| 19 |  S TEMP=^PXD(811.8,PXRMRIEN,120,IND120,1,JND120,0)
 | 
|---|
| 20 |  S FDASTART=+$P(TEMP,U,2)
 | 
|---|
| 21 |  S FDAEND=+$P(TEMP,U,3)
 | 
|---|
| 22 |  S IENRSTR=+$P(TEMP,U,4)
 | 
|---|
| 23 |  S IENREND=+$P(TEMP,U,5)
 | 
|---|
| 24 |  F IND=FDASTART:1:FDAEND D
 | 
|---|
| 25 |  . S LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
 | 
|---|
| 26 |  . S INDICES=$P(LINE,"~",1)
 | 
|---|
| 27 |  . S DATA=$P(LINE,"~",2)
 | 
|---|
| 28 |  . S FILENUM=$P(INDICES,";",1)
 | 
|---|
| 29 |  . S IENS=$P(INDICES,";",2)
 | 
|---|
| 30 |  . I IND=START S SRCIEN=+IENS
 | 
|---|
| 31 |  . S FIELD=$P(INDICES,";",3)
 | 
|---|
| 32 |  . I LINE["WP-start" D
 | 
|---|
| 33 |  .. S DATA="WPTMP("_IND_","_+FIELD_")"
 | 
|---|
| 34 |  .. S WPLCNT=$P(LINE,"~",3)
 | 
|---|
| 35 |  .. D WORDPROC(PXRMRIEN,.WPTMP,IND,+FIELD,.IND,WPLCNT)
 | 
|---|
| 36 |  . I (IND=START)&((FIELD=.01)!(FIELD=.001)) D
 | 
|---|
| 37 |  ..;Save the top level file number.
 | 
|---|
| 38 |  .. S TOPFNUM=FILENUM
 | 
|---|
| 39 |  ..;If the action is copy let FileMan determine where to put it.
 | 
|---|
| 40 |  .. I ACTION="C" S IENROOT(SRCIEN)=$S($G(PXRMLOWX)=1:$$LOIEN^PXRMEXU5(FILENUM),1:"")
 | 
|---|
| 41 |  ..;
 | 
|---|
| 42 |  ..;If the action is install try to install at the source ien. If
 | 
|---|
| 43 |  ..;an entry already exists at the source ien let FileMan determine
 | 
|---|
| 44 |  ..;where to put it.
 | 
|---|
| 45 |  .. I ACTION="I" D
 | 
|---|
| 46 |  ... S SITEIEN=+$$FIND1^DIC(FILENUM,"","Q","`"_SRCIEN)
 | 
|---|
| 47 |  ... I SITEIEN>0 S IENROOT(SRCIEN)=""
 | 
|---|
| 48 |  ... E  S IENROOT(SRCIEN)=$S($G(PXRMLOWX)=1:$$LOIEN^PXRMEXU5(FILENUM),1:SRCIEN)
 | 
|---|
| 49 |  ..;
 | 
|---|
| 50 |  ..;If the action is merge or overwrite get the existing ien.
 | 
|---|
| 51 |  .. I (ACTION="M")!(ACTION="O") D
 | 
|---|
| 52 |  ... S SITEIEN=$$EXISTS^PXRMEXIU(FILENUM,DATA)
 | 
|---|
| 53 |  ... S IENROOT(SRCIEN)=""
 | 
|---|
| 54 |  .;
 | 
|---|
| 55 |  . S FDA(FILENUM,IENS,FIELD)=DATA
 | 
|---|
| 56 |  ;
 | 
|---|
| 57 |  ;Initialize the edit history.
 | 
|---|
| 58 |  D INIEH(TOPFNUM,IENS,.FDA,.WPTMP)
 | 
|---|
| 59 |  ;Build the IENROOT
 | 
|---|
| 60 |  F IND=IENRSTR:1:IENREND D
 | 
|---|
| 61 |  . I IND=0 Q
 | 
|---|
| 62 |  . S TEMP=^PXD(811.8,PXRMRIEN,100,IND,0)
 | 
|---|
| 63 |  . S IENROOT($P(TEMP,U,1))=$P(TEMP,U,2)
 | 
|---|
| 64 |  ;Check for name changes, i.e., the copy action.
 | 
|---|
| 65 |  D NAMECHG(.FDA,.NAMECHG,TOPFNUM)
 | 
|---|
| 66 |  ;Special handling for file 801.41
 | 
|---|
| 67 |  I TOPFNUM=801.41 D  Q:PXRMDONE
 | 
|---|
| 68 |  . I ACTION="M" D MERGE^PXRMEXU5(801.41,EXISTS,"15;18*",.FDA,.IENROOT)
 | 
|---|
| 69 |  . D DLG^PXRMEXU4(.FDA,.NAMECHG)
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 |  ;Special handling for file 810.9
 | 
|---|
| 72 |  I TOPFNUM=810.9 D LOC^PXRMEXU0(.FDA)
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  ;If the file number is 811.4 the user must have programmer
 | 
|---|
| 75 |  ;access to install it.
 | 
|---|
| 76 |  I (TOPFNUM=811.4)&(DUZ(0)'="@") D  Q
 | 
|---|
| 77 |  . W !,"Only programmers can install Reminder Computed Findings."
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  ;Special handling for file 811.5.
 | 
|---|
| 80 |  I TOPFNUM=811.5 D  Q:'$D(FDA)
 | 
|---|
| 81 |  .;If the site has any findings already mapped merge them in.
 | 
|---|
| 82 |  . I ACTION="M" D MERGE^PXRMEXU5(811.5,EXISTS,"20*",.FDA,.IENROOT)
 | 
|---|
| 83 |  . D TERM^PXRMEXIU(.FDA,.NAMECHG)
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  ;Special handling for file 811.9.
 | 
|---|
| 86 |  I TOPFNUM=811.9 D
 | 
|---|
| 87 |  .;Don't execute the input transform for custom logic fields.
 | 
|---|
| 88 |  . S PXRMEXCH=1
 | 
|---|
| 89 |  . D DEF^PXRMEXIU(.FDA,.NAMECHG)
 | 
|---|
| 90 |  ;If FDA is not defined at this point the user has opted to abort
 | 
|---|
| 91 |  ;the install.
 | 
|---|
| 92 |  I '$D(FDA) Q
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  ;Special handling for file 9999999.64.
 | 
|---|
| 95 |  I TOPFNUM=9999999.64 D
 | 
|---|
| 96 |  . D HF^PXRMEXIU(.FDA,.NAMECHG)
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ;If the action is merge oroverwrite do a test install before deleting
 | 
|---|
| 99 |  ;the original entry.
 | 
|---|
| 100 |  I (ACTION="M")!(ACTION="O") D
 | 
|---|
| 101 |  .;Make the .01 unique for the test install.
 | 
|---|
| 102 |  . S IENS=$O(FDA(TOPFNUM,""))
 | 
|---|
| 103 |  .;Get the length of the .01 field
 | 
|---|
| 104 |  . D FIELD^DID(TOPFNUM,.01,"","FIELD LENGTH","ATTR")
 | 
|---|
| 105 |  . S TNAME="tmp"_$E(FDA(TOPFNUM,IENS,.01),1,ATTR("FIELD LENGTH")-3)
 | 
|---|
| 106 |  .;Make sure the test entry does not already exist.
 | 
|---|
| 107 |  . D DELALL^PXRMEXFI(TOPFNUM,TNAME)
 | 
|---|
| 108 |  . K ^TMP($J,"TFDA") M ^TMP($J,"TFDA")=FDA K FDA
 | 
|---|
| 109 |  . K TFDA M TFDA=^TMP($J,"TFDA")
 | 
|---|
| 110 |  . S TFDA(TOPFNUM,IENS,.01)=TNAME
 | 
|---|
| 111 |  . D UPDATE^DIE("E","TFDA","IENROOT","MSG")
 | 
|---|
| 112 |  . I $D(MSG) D
 | 
|---|
| 113 |  .. W !,"The update failed, UPDATE^DIE returned the following error message:"
 | 
|---|
| 114 |  .. D AWRITE^PXRMUTIL("MSG")
 | 
|---|
| 115 |  .. W !!,ATTR("FILE NAME")," entry ",$G(ATTR("PT01"))," did not get installed!"
 | 
|---|
| 116 |  .. W !,"Examine the above error message for the reason.",!
 | 
|---|
| 117 |  .. H 2
 | 
|---|
| 118 |  . I '$D(MSG) K TFDA M FDA=^TMP($J,"TFDA")
 | 
|---|
| 119 |  . K ^TMP($J,"TFDA")
 | 
|---|
| 120 |  .;Delete the test entry.
 | 
|---|
| 121 |  . D DELALL^PXRMEXFI(TOPFNUM,TNAME)
 | 
|---|
| 122 |  .;If the original update worked put the entry at its original ien.
 | 
|---|
| 123 |  ;Install the FDA.
 | 
|---|
| 124 |  I '$D(MSG) D
 | 
|---|
| 125 |  .;Delete the existing entry.
 | 
|---|
| 126 |  . I (ACTION="M")!(ACTION="O") D
 | 
|---|
| 127 |  .. D DELETE^PXRMEXFI(TOPFNUM,SITEIEN)
 | 
|---|
| 128 |  .. S IENROOT(SRCIEN)=SITEIEN
 | 
|---|
| 129 |  . I $D(PXRMCLAS) D SCLASS^PXRMEXU5(TOPFNUM,PXRMCLAS,.FDA)
 | 
|---|
| 130 |  . D UPDATE^DIE("E","FDA","IENROOT","MSG")
 | 
|---|
| 131 |  . I $D(MSG) D
 | 
|---|
| 132 |  .. W !,"The update failed, UPDATE^DIE returned the following error message:"
 | 
|---|
| 133 |  .. D AWRITE^PXRMUTIL("MSG")
 | 
|---|
| 134 |  .. W !!,ATTR("FILE NAME")," entry ",$G(ATTR("PT01"))," did not get installed!"
 | 
|---|
| 135 |  .. W !,"Examine the above error message for the reason.",!
 | 
|---|
| 136 |  .. H 2
 | 
|---|
| 137 |  S VERSN=$$GETTAGV^PXRMEXU3(^PXD(811.8,PXRMRIEN,100,3,0),"<PACKAGE_VERSION>")
 | 
|---|
| 138 |  I TOPFNUM=811.9,VERSN=1.5 D
 | 
|---|
| 139 |  . N IEN,PXRMEXCH,X
 | 
|---|
| 140 |  . S IEN=IENROOT(SRCIEN)
 | 
|---|
| 141 |  .;For reminder definitions build the found/not found text counts.
 | 
|---|
| 142 |  . D SFNFTC^PXRMEXU0(IEN)
 | 
|---|
| 143 |  .;Build the internal logic and finding strings.
 | 
|---|
| 144 |  . S X=$G(^PXD(811.9,IEN,30))
 | 
|---|
| 145 |  . I X'="" D CPPCLS^PXRMLOGX(IEN,X)
 | 
|---|
| 146 |  . S X=$G(^PXD(811.9,IEN,34))
 | 
|---|
| 147 |  . I X'="" D CPRESLS^PXRMLOGX(IEN,X)
 | 
|---|
| 148 |  . D BLDALL^PXRMLOGX(IEN,"","")
 | 
|---|
| 149 |  Q
 | 
|---|
| 150 |  ;
 | 
|---|
| 151 |  ;=================================================
 | 
|---|
| 152 | INIEH(FILENUM,IENS,FDA,WPTMP) ;If the file is a clinical reminder file and
 | 
|---|
| 153 |  ;it has an edit history initialize the history.
 | 
|---|
| 154 |  I (FILENUM<800)!(FILENUM>811.9) Q
 | 
|---|
| 155 |  ;
 | 
|---|
| 156 |  N IENS,SFN,TARGET,WP
 | 
|---|
| 157 |  D FIELD^DID(FILENUM,"EDIT HISTORY","","SPECIFIER","TARGET")
 | 
|---|
| 158 |  S SFN=+$G(TARGET("SPECIFIER"))
 | 
|---|
| 159 |  I SFN=0 Q
 | 
|---|
| 160 |  S IENS=$O(FDA(SFN,""))
 | 
|---|
| 161 |  I IENS="" Q
 | 
|---|
| 162 |  S FDA(SFN,IENS,.01)=$$FMTE^XLFDT($$NOW^XLFDT,"5Z")
 | 
|---|
| 163 |  S FDA(SFN,IENS,1)=$$GET1^DIQ(200,DUZ,.01)
 | 
|---|
| 164 |  ;The word-processing field is set when the packing is done.
 | 
|---|
| 165 |  S WP=FDA(SFN,IENS,2)
 | 
|---|
| 166 |  K @WP
 | 
|---|
| 167 |  S @WP@(1)="Exchange Install"
 | 
|---|
| 168 |  Q
 | 
|---|
| 169 |  ;
 | 
|---|
| 170 |  ;=================================================
 | 
|---|
| 171 | NAMECHG(FDA,NAMECHG,FILENUM) ;If this component has been copied to a new
 | 
|---|
| 172 |  ;name make the change.
 | 
|---|
| 173 |  N CLASS,IENS,PT01
 | 
|---|
| 174 |  S IENS=$O(FDA(FILENUM,""))
 | 
|---|
| 175 |  S PT01=FDA(FILENUM,IENS,.01)
 | 
|---|
| 176 |  I $D(NAMECHG(FILENUM,PT01)) D
 | 
|---|
| 177 |  . S FDA(FILENUM,IENS,.01)=NAMECHG(FILENUM,PT01)
 | 
|---|
| 178 |  . I (FILENUM<801.41)!(FILENUM>811.9) Q
 | 
|---|
| 179 |  .;Once a component has been copied CLASS can no longer be national.
 | 
|---|
| 180 |  . S CLASS=$G(FDA(FILENUM,IENS,100))
 | 
|---|
| 181 |  . I CLASS["N" S FDA(FILENUM,IENS,100)="LOCAL"
 | 
|---|
| 182 |  .;The Sponsor is also removed.
 | 
|---|
| 183 |  . K FDA(FILENUM,IENS,101)
 | 
|---|
| 184 |  Q
 | 
|---|
| 185 |  ;
 | 
|---|
| 186 |  ;=================================================
 | 
|---|
| 187 | RTNLD(PXRMRIEN,START,END,ATTR,RTN) ;Load a routine from the repository into
 | 
|---|
| 188 |  ;the array RTN.
 | 
|---|
| 189 |  N IND,LINE,LN,ROUTINE
 | 
|---|
| 190 |  S LINE=^PXD(811.8,PXRMRIEN,100,START,0)
 | 
|---|
| 191 |  S ROUTINE=$P(LINE,";",1)
 | 
|---|
| 192 |  S ROUTINE=$TR(ROUTINE," ","")
 | 
|---|
| 193 |  S ATTR("FILE NUMBER")=0
 | 
|---|
| 194 |  S ATTR("NAME")=$P(LINE,";",1)
 | 
|---|
| 195 |  S ATTR("NAME")=$TR(ATTR("NAME")," ","")
 | 
|---|
| 196 |  S ATTR("MIN FIELD LENGTH")=3
 | 
|---|
| 197 |  S ATTR("FIELD LENGTH")=8
 | 
|---|
| 198 |  S LN=0
 | 
|---|
| 199 |  F IND=START:1:END D
 | 
|---|
| 200 |  . S LN=LN+1
 | 
|---|
| 201 |  . S LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
 | 
|---|
| 202 |  . S RTN(LN,0)=LINE
 | 
|---|
| 203 |  Q
 | 
|---|
| 204 |  ;
 | 
|---|
| 205 |  ;=================================================
 | 
|---|
| 206 | RTNSAVE(RTN,NAME) ;Save the routine loaded in RTN to the name
 | 
|---|
| 207 |  ;found in NAMECHG.
 | 
|---|
| 208 |  N DIE,XCN
 | 
|---|
| 209 |  ;%ZOSF("SAVE") requires a global.
 | 
|---|
| 210 |  K ^TMP($J,"PXRMRTN")
 | 
|---|
| 211 |  S DIE="^TMP($J,""PXRMRTN"","
 | 
|---|
| 212 |  M ^TMP($J,"PXRMRTN")=RTN
 | 
|---|
| 213 |  S XCN=0
 | 
|---|
| 214 |  S X=NAME
 | 
|---|
| 215 |  X ^%ZOSF("SAVE")
 | 
|---|
| 216 |  K ^TMP($J,"PXRMRTN")
 | 
|---|
| 217 |  Q
 | 
|---|
| 218 |  ;
 | 
|---|
| 219 |  ;=================================================
 | 
|---|
| 220 | WORDPROC(PXRMRIEN,WPTMP,I1,I2,IND,WPLCNT) ;Load WPTMP with the word
 | 
|---|
| 221 |  ;processing field.
 | 
|---|
| 222 |  N I3
 | 
|---|
| 223 |  F I3=1:1:WPLCNT D
 | 
|---|
| 224 |  . S IND=IND+1
 | 
|---|
| 225 |  . S WPTMP(I1,I2,I3)=$G(^PXD(811.8,PXRMRIEN,100,IND,0))
 | 
|---|
| 226 |  Q
 | 
|---|
| 227 |  ;
 | 
|---|