PXRMEXIC ;SLC/PKR,PJH - Routines to install repository entry components. ;09/27/2018
;;2.0;CLINICAL REMINDERS;**6,12,17,16,18,22,24,26,47,45**;Feb 04, 2005;Build 566
;=================================================
FILE(PXRMRIEN,SITEIEN,IND120,JND120,ACTION,ATTR,NAMECHG) ;Read and process a
;file entry in repository entry PXRMRIEN. IND120 and JND120 are the
;indexes for the component list. ACTION is one of the possible actions.
I ACTION="S" Q
N DATA,DUZ0S,EDULIST,FDA,FDAEND,FDASTART,FIELD,FILENUM
N IEN,IENS,IENREND,IENROOT,IENRSTR,IENUSED,IND,INDICES
N LINE,MSG,NAME,NEW01,PXNAT,PXRMEDOK,PXRMEXCH
N SRCIEN,START,TEMP,TEXT,TFDA,TIENROOT,TIUFPRIV,TNAME,TOPFNUM,VERSN
N WPLCNT,WPTMP,XUMF
;I $G(PXRMIGDS) S DUZ0S=DUZ(0),DUZ(0)="^",XUMF=1
;Set PXRMEDOK so files pointing to sponsors can be installed.
;Set PXRMEXCH so national entries can be installed and prevent
;execution of the input transform for custom logic fields.
;Set PXNAT to allow installation of national PCE data types.
S (PXNAT,PXRMEDOK,PXRMEXCH)=1
S TEMP=^PXD(811.8,PXRMRIEN,120,IND120,1,JND120,0)
S FDASTART=+$P(TEMP,U,2)
S FDAEND=+$P(TEMP,U,3)
S IENRSTR=+$P(TEMP,U,4)
S IENREND=+$P(TEMP,U,5)
F IND=FDASTART:1:FDAEND D
. S LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
. S INDICES=$P(LINE,"~",1)
. S DATA=$P(LINE,"~",2)
. S FILENUM=$P(INDICES,";",1)
. S IENS=$P(INDICES,";",2)
. I IND=FDASTART S SRCIEN=+IENS
. S FIELD=$P(INDICES,";",3)
. I LINE["WP-start" D
.. S DATA="WPTMP("_IND_","_+FIELD_")"
.. S WPLCNT=$P(LINE,"~",3)
.. D WORDPROC(PXRMRIEN,.WPTMP,IND,+FIELD,.IND,WPLCNT)
. I (IND=FDASTART)&((FIELD=.01)!(FIELD=.001)) D
..;Save the top level file number.
.. S TOPFNUM=FILENUM
..;If the action is copy put it in the first open spot.
.. I ACTION="C" S IENROOT(SRCIEN)=$$LOIEN^PXRMEXU5(TOPFNUM,0)
..;
..;If the entry does not exist and the action is not copy set the
..;action to install.
.. I SITEIEN=0 S ACTION="I"
..;
..;If the action is install try to install at the source IEN. If
..;an entry already exists at the source IEN put it in the first
..;open spot.
.. I ACTION="I" D
... S IENUSED=+$$FIND1^DIC(FILENUM,"","QU","`"_SRCIEN)
... S IENROOT(SRCIEN)=$S(IENUSED=0:SRCIEN,1:$$LOIEN^PXRMEXU5(FILENUM))
..;
..;If the action is merge, overwrite,or update install at the site's
..;IEN.
.. I (ACTION="M")!(ACTION="O")!(ACTION="U") S IENROOT(SRCIEN)=SITEIEN
.;
.;This line is use to convert pre-patch 12 disable text to the new
.;value of 1 for disable
. I FILENUM=801.41,FIELD=3,DATA'="",$L(DATA)>2 D
..I DATA="DISABLE AND DO NOT SEND MESSAGE" Q
..S DATA="DISABLE AND SEND MESSAGE"
.;
. S FDA(FILENUM,IENS,FIELD)=DATA
;
;Initialize the edit history.
D INIEH(TOPFNUM,IENS,.FDA,.WPTMP)
;Build the IENROOT
F IND=IENRSTR:1:IENREND D
. I IND=0 Q
. S TEMP=^PXD(811.8,PXRMRIEN,100,IND,0)
. S IENROOT($P(TEMP,U,1))=$P(TEMP,U,2)
;Check for name changes, i.e., the copy action.
D NAMECHG(.FDA,.NAMECHG,TOPFNUM)
;
;Special handling for file 142.
I TOPFNUM=142 D Q:'$D(FDA)
. D SFMVPI^PXRMEXIU(.FDA,.NAMECHG,142.14)
;
;Special handling for file 801
I TOPFNUM=801 D Q:PXRMDONE
. D SFMVPI^PXRMEXIU(.FDA,.NAMECHG,801.015)
. D ROC^PXRMEXU5(.FDA,.IENROOT)
;
;Special handling for file 801.1
I TOPFNUM=801.1 D Q:PXRMDONE
. D ROCR^PXRMEXU5(.FDA)
;
I TOPFNUM=801.48 D DLINKSAV^PXRMEXU5(.FDA) Q:PXRMDONE
;Special handling for file 801.41
I TOPFNUM=801.41 D Q:PXRMDONE
. I ACTION="M" D MOU^PXRMEXU5(801.41,SITEIEN,"18*",.FDA,.IENROOT,ACTION,.WPTMP)
. D DLG^PXRMEXU4(.FDA,.NAMECHG)
;
;Special handling for file 810.9
I TOPFNUM=810.9 D LOC^PXRMEXU0(.FDA)
;
;Special handling for file 811.2
I TOPFNUM=811.2 D TAX^PXRMEXU0(.FDA,"CFR")
;
I TOPFNUM=801.46 D DIALOGGF^PXRMEXU5(.FDA,.IENROOT)
;
;If the file number is 811.4 the user must have programmer
;access to install it.
I (TOPFNUM=811.4)&(DUZ(0)'="@") D Q
. W !,"Only programmers can install Reminder Computed Findings."
;
;Special handling for file 811.5.
I TOPFNUM=811.5 D Q:'$D(FDA)
.;If the site has any findings already mapped merge them in.
. I (ACTION="M")!(ACTION="U") D MOU^PXRMEXU5(811.5,SITEIEN,"20*",.FDA,.IENROOT,ACTION,.WPTMP)
. D SFMVPI^PXRMEXIU(.FDA,.NAMECHG,811.52)
;
;Special handling for file 811.9.
I TOPFNUM=811.9 D
.;Don't execute the input transform for custom logic fields.
. S PXRMEXCH=1
. D DEF^PXRMEXIU(.FDA,.NAMECHG)
;
;Special handling for file 8925.1
I TOPFNUM=8925.1 D
. S TIUFPRIV=1
. D TIUOBJ^PXRMEXIU(.FDA)
;
;Special handling for file 9999999.09: Education Topics.
I TOPFNUM=9999999.09 D EDU^PXRMEXIU(.FDA,.EDULIST)
;
;Special handling for file 9999999.15: Exams.
I TOPFNUM=9999999.15 D EXAM^PXRMEXIU(.FDA)
;
;Special handling for file 9999999.64: Health Factors.
I TOPFNUM=9999999.64 D HF^PXRMEXIU(.FDA)
;
;
;If FDA is not defined at this point the user has opted to abort
;the install.
I '$D(FDA) Q
;
;If the action is merge, overwrite, or update do a test install
;before deleting the original entry.
I (ACTION="M")!(ACTION="O")!(ACTION="U") D
.;Make the .01 unique for the test install.
. S IENS=$O(FDA(TOPFNUM,""))
.;Get the length of the .01 field
. D FIELD^DID(TOPFNUM,.01,"","FIELD LENGTH","ATTR")
. S TNAME="tmp"_$E(FDA(TOPFNUM,IENS,.01),1,ATTR("FIELD LENGTH")-3)
.;Make sure the test entry does not already exist.
. D DELALL^PXRMEXFI(TOPFNUM,TNAME)
. M TFDA=FDA
. S TFDA(TOPFNUM,IENS,.01)=TNAME
. K TIENROOT M TIENROOT=IENROOT
. S TIENROOT(SRCIEN)=$$LOIEN^PXRMEXU5(TOPFNUM)
. D UPDATE^DIE("E","TFDA","TIENROOT","MSG")
. I $D(MSG) D Q
.. S TEXT(1)=ATTR("FILE NAME")_" entry "_$G(ATTR("PT01"))_" did not get installed!"
.. S TEXT(2)="Examine the following error message for the reason."
.. S TEXT(3)=""
.. S TEXT(4)="The test update failed, UPDATE^DIE returned the following error message:"
.. D MES^XPDUTL(.TEXT)
.. D AWRITE^PXRMUTIL("MSG")
.. H 2
.;Delete the test entry.
. D DELALL^PXRMEXFI(TOPFNUM,TNAME)
.;If the original update worked put the entry at its original ien.
.;Delete the existing entry.
. D DELETE^PXRMEXFI(TOPFNUM,SITEIEN)
D UPDATE^DIE("ES","FDA","IENROOT","MSG")
I '$D(MSG),ATTR("FILE NUMBER")=9999999.64 D
. ;Build a list of health factor categories that need the [C] appended
. N IENS
. S IENS=$O(FDA(9999999.64,""))
. I FDA(9999999.64,IENS,.1)'="CATEGORY" Q
. N L3C,LEN,NAME
. S NAME=ATTR("NAME")
. S LEN=$L(NAME),L3C=$E(NAME,(LEN-2),LEN)
. I L3C'="[C]" S ^TMP($J,"HFCAT",NAME)=""
I $D(MSG) D
. S TEXT(1)=ATTR("FILE NAME")_" entry "_$G(ATTR("PT01"))_" did not get installed!"
. S TEXT(2)="Examine the following error message for the reason."
. S TEXT(3)=""
. S TEXT(4)="The update failed, UPDATE^DIE returned the following error message:"
. D MES^XPDUTL(.TEXT)
. D AWRITE^PXRMUTIL("MSG")
. W !
. H 2
;
I TOPFNUM=811.2 D
.;Finish conversion from pointer based structure to Lexicon based.
. N IEN,PDS
. S IEN=+$O(^PXD(811.2,"B",ATTR("NAME"),""))
. I IEN=0 Q
. D EXCH^PXRMTXCR(IEN,"CFR")
. S PDS=$P(^PXD(811.2,IEN,0),U,4)
. I PDS="" D SPDS^PXRMPDS(IEN,PDS)
.;If there are codes marked Use In Dialog build the 30 node.
. D BLD30N^PXRMTAXD(IEN)
;
S VERSN=$$GETTAGV^PXRMEXU3(^PXD(811.8,PXRMRIEN,100,3,0),"<PACKAGE_VERSION>")
I TOPFNUM=811.9,VERSN=1.5 D
. N IEN,PXRMEXCH,X
. S IEN=+$O(^PXD(811.9,"B",ATTR("PT01"),""))
. I IEN=0 Q
.;For reminder definitions build the found/not found text counts.
. D SFNFTC^PXRMEXU0(IEN)
.;Build the internal logic and finding strings.
. S X=$G(^PXD(811.9,IEN,30))
. I X'="" D CPPCLS^PXRMLOGX(IEN,X)
. S X=$G(^PXD(811.9,IEN,34))
. I X'="" D CPRESLS^PXRMLOGX(IEN,X)
. D BLDALL^PXRMLOGX(IEN,"","")
;If there are national education topics rename them so they start
;with VA-
I $D(EDULIST),$G(PXRMNAT) D
.;Get the length of the .01 field
. D FIELD^DID(TOPFNUM,.01,"","FIELD LENGTH","ATTR")
. S NAME=""
. F S NAME=$O(EDULIST(NAME)) Q:NAME="" D
.. I $E(NAME,1,3)="VA-" Q
.. S TNAME="VA-"_$E(ATTR("FIELD LENGTH")-3)
.. D RENAME^PXRMUTIL(TOPFNUM,NAME,TNAME)
;I $G(PXRMIGDS) S DUZ(0)=DUZ0S
Q
;
;=================================================
INIEH(FILENUM,IENS,FDA,WPTMP) ;If the file is a clinical reminder file and
;it has an edit history initialize the history.
I (FILENUM<800)!(FILENUM>811.9) Q
N IENS,SFN,TARGET,WP
D FIELD^DID(FILENUM,"CHANGE LOG","","SPECIFIER","TARGET")
S SFN=+$G(TARGET("SPECIFIER"))
I SFN=0 D FIELD^DID(FILENUM,"EDIT HISTORY","","SPECIFIER","TARGET")
S SFN=+$G(TARGET("SPECIFIER"))
I SFN=0 Q
S IENS=$O(FDA(SFN,""))
I IENS="" Q
S FDA(SFN,IENS,.01)=$$FMTE^XLFDT($$NOW^XLFDT,"5Z")
S FDA(SFN,IENS,1)="`"_DUZ
;The word-processing field is set when the packing is done.
S WP=FDA(SFN,IENS,2)
K @WP
S @WP@(1)="Exchange Install"
Q
;
;=================================================
NAMECHG(FDA,NAMECHG,FILENUM) ;If this component has been copied to a new
;name make the change.
N CLASS,IENS,PT01
S IENS=$O(FDA(FILENUM,""))
S PT01=FDA(FILENUM,IENS,.01)
I $D(NAMECHG(FILENUM,PT01)) D
. S FDA(FILENUM,IENS,.01)=NAMECHG(FILENUM,PT01)
. I (FILENUM<801.41)!(FILENUM>811.9) Q
.;Once a component has been copied CLASS can no longer be national.
. S CLASS=$G(FDA(FILENUM,IENS,100))
. I CLASS["N" S FDA(FILENUM,IENS,100)="LOCAL"
.;The Sponsor is also removed.
. K FDA(FILENUM,IENS,101)
Q
;
;=================================================
RTNLD(PXRMRIEN,START,END,ATTR,RTN) ;Load a routine from the repository into
;the array RTN.
N IND,LINE,LN,ROUTINE
S LINE=^PXD(811.8,PXRMRIEN,100,START,0)
S ROUTINE=$P(LINE,";",1)
S ROUTINE=$TR(ROUTINE," ","")
S ATTR("FILE NUMBER")=0
S ATTR("NAME")=$P(LINE,";",1)
S ATTR("NAME")=$TR(ATTR("NAME")," ","")
S ATTR("MIN FIELD LENGTH")=3
S ATTR("FIELD LENGTH")=8
S LN=0
F IND=START:1:END D
. S LN=LN+1
. S LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
. S RTN(LN,0)=LINE
Q
;
;=================================================
RTNSAVE(RTN,NAME) ;Save the routine loaded in RTN to the name
;found in NAMECHG.
N DIE,XCN
;%ZOSF("SAVE") requires a global.
K ^TMP($J,"PXRMRTN")
S DIE="^TMP($J,""PXRMRTN"","
M ^TMP($J,"PXRMRTN")=RTN
S XCN=0
S X=NAME
X ^%ZOSF("SAVE")
K ^TMP($J,"PXRMRTN")
Q
;
;=================================================
WORDPROC(PXRMRIEN,WPTMP,I1,I2,IND,WPLCNT) ;Load WPTMP with the word
;processing field.
N I3
F I3=1:1:WPLCNT D
. S IND=IND+1
. S WPTMP(I1,I2,I3)=$G(^PXD(811.8,PXRMRIEN,100,IND,0))
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPXRMEXIC 10635 printed Dec 13, 2024@01:44:57 Page 2
PXRMEXIC ;SLC/PKR,PJH - Routines to install repository entry components. ;09/27/2018
+1 ;;2.0;CLINICAL REMINDERS;**6,12,17,16,18,22,24,26,47,45**;Feb 04, 2005;Build 566
+2 ;=================================================
FILE(PXRMRIEN,SITEIEN,IND120,JND120,ACTION,ATTR,NAMECHG) ;Read and process a
+1 ;file entry in repository entry PXRMRIEN. IND120 and JND120 are the
+2 ;indexes for the component list. ACTION is one of the possible actions.
+3 IF ACTION="S"
QUIT
+4 NEW DATA,DUZ0S,EDULIST,FDA,FDAEND,FDASTART,FIELD,FILENUM
+5 NEW IEN,IENS,IENREND,IENROOT,IENRSTR,IENUSED,IND,INDICES
+6 NEW LINE,MSG,NAME,NEW01,PXNAT,PXRMEDOK,PXRMEXCH
+7 NEW SRCIEN,START,TEMP,TEXT,TFDA,TIENROOT,TIUFPRIV,TNAME,TOPFNUM,VERSN
+8 NEW WPLCNT,WPTMP,XUMF
+9 ;I $G(PXRMIGDS) S DUZ0S=DUZ(0),DUZ(0)="^",XUMF=1
+10 ;Set PXRMEDOK so files pointing to sponsors can be installed.
+11 ;Set PXRMEXCH so national entries can be installed and prevent
+12 ;execution of the input transform for custom logic fields.
+13 ;Set PXNAT to allow installation of national PCE data types.
+14 SET (PXNAT,PXRMEDOK,PXRMEXCH)=1
+15 SET TEMP=^PXD(811.8,PXRMRIEN,120,IND120,1,JND120,0)
+16 SET FDASTART=+$PIECE(TEMP,U,2)
+17 SET FDAEND=+$PIECE(TEMP,U,3)
+18 SET IENRSTR=+$PIECE(TEMP,U,4)
+19 SET IENREND=+$PIECE(TEMP,U,5)
+20 FOR IND=FDASTART:1:FDAEND
Begin DoDot:1
+21 SET LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
+22 SET INDICES=$PIECE(LINE,"~",1)
+23 SET DATA=$PIECE(LINE,"~",2)
+24 SET FILENUM=$PIECE(INDICES,";",1)
+25 SET IENS=$PIECE(INDICES,";",2)
+26 IF IND=FDASTART
SET SRCIEN=+IENS
+27 SET FIELD=$PIECE(INDICES,";",3)
+28 IF LINE["WP-start"
Begin DoDot:2
+29 SET DATA="WPTMP("_IND_","_+FIELD_")"
+30 SET WPLCNT=$PIECE(LINE,"~",3)
+31 DO WORDPROC(PXRMRIEN,.WPTMP,IND,+FIELD,.IND,WPLCNT)
End DoDot:2
+32 IF (IND=FDASTART)&((FIELD=.01)!(FIELD=.001))
Begin DoDot:2
+33 ;Save the top level file number.
+34 SET TOPFNUM=FILENUM
+35 ;If the action is copy put it in the first open spot.
+36 IF ACTION="C"
SET IENROOT(SRCIEN)=$$LOIEN^PXRMEXU5(TOPFNUM,0)
+37 ;
+38 ;If the entry does not exist and the action is not copy set the
+39 ;action to install.
+40 IF SITEIEN=0
SET ACTION="I"
+41 ;
+42 ;If the action is install try to install at the source IEN. If
+43 ;an entry already exists at the source IEN put it in the first
+44 ;open spot.
+45 IF ACTION="I"
Begin DoDot:3
+46 SET IENUSED=+$$FIND1^DIC(FILENUM,"","QU","`"_SRCIEN)
+47 SET IENROOT(SRCIEN)=$SELECT(IENUSED=0:SRCIEN,1:$$LOIEN^PXRMEXU5(FILENUM))
End DoDot:3
+48 ;
+49 ;If the action is merge, overwrite,or update install at the site's
+50 ;IEN.
+51 IF (ACTION="M")!(ACTION="O")!(ACTION="U")
SET IENROOT(SRCIEN)=SITEIEN
End DoDot:2
+52 ;
+53 ;This line is use to convert pre-patch 12 disable text to the new
+54 ;value of 1 for disable
+55 IF FILENUM=801.41
IF FIELD=3
IF DATA'=""
IF $LENGTH(DATA)>2
Begin DoDot:2
+56 IF DATA="DISABLE AND DO NOT SEND MESSAGE"
QUIT
+57 SET DATA="DISABLE AND SEND MESSAGE"
End DoDot:2
+58 ;
+59 SET FDA(FILENUM,IENS,FIELD)=DATA
End DoDot:1
+60 ;
+61 ;Initialize the edit history.
+62 DO INIEH(TOPFNUM,IENS,.FDA,.WPTMP)
+63 ;Build the IENROOT
+64 FOR IND=IENRSTR:1:IENREND
Begin DoDot:1
+65 IF IND=0
QUIT
+66 SET TEMP=^PXD(811.8,PXRMRIEN,100,IND,0)
+67 SET IENROOT($PIECE(TEMP,U,1))=$PIECE(TEMP,U,2)
End DoDot:1
+68 ;Check for name changes, i.e., the copy action.
+69 DO NAMECHG(.FDA,.NAMECHG,TOPFNUM)
+70 ;
+71 ;Special handling for file 142.
+72 IF TOPFNUM=142
Begin DoDot:1
+73 DO SFMVPI^PXRMEXIU(.FDA,.NAMECHG,142.14)
End DoDot:1
if '$DATA(FDA)
QUIT
+74 ;
+75 ;Special handling for file 801
+76 IF TOPFNUM=801
Begin DoDot:1
+77 DO SFMVPI^PXRMEXIU(.FDA,.NAMECHG,801.015)
+78 DO ROC^PXRMEXU5(.FDA,.IENROOT)
End DoDot:1
if PXRMDONE
QUIT
+79 ;
+80 ;Special handling for file 801.1
+81 IF TOPFNUM=801.1
Begin DoDot:1
+82 DO ROCR^PXRMEXU5(.FDA)
End DoDot:1
if PXRMDONE
QUIT
+83 ;
+84 IF TOPFNUM=801.48
DO DLINKSAV^PXRMEXU5(.FDA)
if PXRMDONE
QUIT
+85 ;Special handling for file 801.41
+86 IF TOPFNUM=801.41
Begin DoDot:1
+87 IF ACTION="M"
DO MOU^PXRMEXU5(801.41,SITEIEN,"18*",.FDA,.IENROOT,ACTION,.WPTMP)
+88 DO DLG^PXRMEXU4(.FDA,.NAMECHG)
End DoDot:1
if PXRMDONE
QUIT
+89 ;
+90 ;Special handling for file 810.9
+91 IF TOPFNUM=810.9
DO LOC^PXRMEXU0(.FDA)
+92 ;
+93 ;Special handling for file 811.2
+94 IF TOPFNUM=811.2
DO TAX^PXRMEXU0(.FDA,"CFR")
+95 ;
+96 IF TOPFNUM=801.46
DO DIALOGGF^PXRMEXU5(.FDA,.IENROOT)
+97 ;
+98 ;If the file number is 811.4 the user must have programmer
+99 ;access to install it.
+100 IF (TOPFNUM=811.4)&(DUZ(0)'="@")
Begin DoDot:1
+101 WRITE !,"Only programmers can install Reminder Computed Findings."
End DoDot:1
QUIT
+102 ;
+103 ;Special handling for file 811.5.
+104 IF TOPFNUM=811.5
Begin DoDot:1
+105 ;If the site has any findings already mapped merge them in.
+106 IF (ACTION="M")!(ACTION="U")
DO MOU^PXRMEXU5(811.5,SITEIEN,"20*",.FDA,.IENROOT,ACTION,.WPTMP)
+107 DO SFMVPI^PXRMEXIU(.FDA,.NAMECHG,811.52)
End DoDot:1
if '$DATA(FDA)
QUIT
+108 ;
+109 ;Special handling for file 811.9.
+110 IF TOPFNUM=811.9
Begin DoDot:1
+111 ;Don't execute the input transform for custom logic fields.
+112 SET PXRMEXCH=1
+113 DO DEF^PXRMEXIU(.FDA,.NAMECHG)
End DoDot:1
+114 ;
+115 ;Special handling for file 8925.1
+116 IF TOPFNUM=8925.1
Begin DoDot:1
+117 SET TIUFPRIV=1
+118 DO TIUOBJ^PXRMEXIU(.FDA)
End DoDot:1
+119 ;
+120 ;Special handling for file 9999999.09: Education Topics.
+121 IF TOPFNUM=9999999.09
DO EDU^PXRMEXIU(.FDA,.EDULIST)
+122 ;
+123 ;Special handling for file 9999999.15: Exams.
+124 IF TOPFNUM=9999999.15
DO EXAM^PXRMEXIU(.FDA)
+125 ;
+126 ;Special handling for file 9999999.64: Health Factors.
+127 IF TOPFNUM=9999999.64
DO HF^PXRMEXIU(.FDA)
+128 ;
+129 ;
+130 ;If FDA is not defined at this point the user has opted to abort
+131 ;the install.
+132 IF '$DATA(FDA)
QUIT
+133 ;
+134 ;If the action is merge, overwrite, or update do a test install
+135 ;before deleting the original entry.
+136 IF (ACTION="M")!(ACTION="O")!(ACTION="U")
Begin DoDot:1
+137 ;Make the .01 unique for the test install.
+138 SET IENS=$ORDER(FDA(TOPFNUM,""))
+139 ;Get the length of the .01 field
+140 DO FIELD^DID(TOPFNUM,.01,"","FIELD LENGTH","ATTR")
+141 SET TNAME="tmp"_$EXTRACT(FDA(TOPFNUM,IENS,.01),1,ATTR("FIELD LENGTH")-3)
+142 ;Make sure the test entry does not already exist.
+143 DO DELALL^PXRMEXFI(TOPFNUM,TNAME)
+144 MERGE TFDA=FDA
+145 SET TFDA(TOPFNUM,IENS,.01)=TNAME
+146 KILL TIENROOT
MERGE TIENROOT=IENROOT
+147 SET TIENROOT(SRCIEN)=$$LOIEN^PXRMEXU5(TOPFNUM)
+148 DO UPDATE^DIE("E","TFDA","TIENROOT","MSG")
+149 IF $DATA(MSG)
Begin DoDot:2
+150 SET TEXT(1)=ATTR("FILE NAME")_" entry "_$GET(ATTR("PT01"))_" did not get installed!"
+151 SET TEXT(2)="Examine the following error message for the reason."
+152 SET TEXT(3)=""
+153 SET TEXT(4)="The test update failed, UPDATE^DIE returned the following error message:"
+154 DO MES^XPDUTL(.TEXT)
+155 DO AWRITE^PXRMUTIL("MSG")
+156 HANG 2
End DoDot:2
QUIT
+157 ;Delete the test entry.
+158 DO DELALL^PXRMEXFI(TOPFNUM,TNAME)
+159 ;If the original update worked put the entry at its original ien.
+160 ;Delete the existing entry.
+161 DO DELETE^PXRMEXFI(TOPFNUM,SITEIEN)
End DoDot:1
+162 DO UPDATE^DIE("ES","FDA","IENROOT","MSG")
+163 IF '$DATA(MSG)
IF ATTR("FILE NUMBER")=9999999.64
Begin DoDot:1
+164 ;Build a list of health factor categories that need the [C] appended
+165 NEW IENS
+166 SET IENS=$ORDER(FDA(9999999.64,""))
+167 IF FDA(9999999.64,IENS,.1)'="CATEGORY"
QUIT
+168 NEW L3C,LEN,NAME
+169 SET NAME=ATTR("NAME")
+170 SET LEN=$LENGTH(NAME)
SET L3C=$EXTRACT(NAME,(LEN-2),LEN)
+171 IF L3C'="[C]"
SET ^TMP($JOB,"HFCAT",NAME)=""
End DoDot:1
+172 IF $DATA(MSG)
Begin DoDot:1
+173 SET TEXT(1)=ATTR("FILE NAME")_" entry "_$GET(ATTR("PT01"))_" did not get installed!"
+174 SET TEXT(2)="Examine the following error message for the reason."
+175 SET TEXT(3)=""
+176 SET TEXT(4)="The update failed, UPDATE^DIE returned the following error message:"
+177 DO MES^XPDUTL(.TEXT)
+178 DO AWRITE^PXRMUTIL("MSG")
+179 WRITE !
+180 HANG 2
End DoDot:1
+181 ;
+182 IF TOPFNUM=811.2
Begin DoDot:1
+183 ;Finish conversion from pointer based structure to Lexicon based.
+184 NEW IEN,PDS
+185 SET IEN=+$ORDER(^PXD(811.2,"B",ATTR("NAME"),""))
+186 IF IEN=0
QUIT
+187 DO EXCH^PXRMTXCR(IEN,"CFR")
+188 SET PDS=$PIECE(^PXD(811.2,IEN,0),U,4)
+189 IF PDS=""
DO SPDS^PXRMPDS(IEN,PDS)
+190 ;If there are codes marked Use In Dialog build the 30 node.
+191 DO BLD30N^PXRMTAXD(IEN)
End DoDot:1
+192 ;
+193 SET VERSN=$$GETTAGV^PXRMEXU3(^PXD(811.8,PXRMRIEN,100,3,0),"<PACKAGE_VERSION>")
+194 IF TOPFNUM=811.9
IF VERSN=1.5
Begin DoDot:1
+195 NEW IEN,PXRMEXCH,X
+196 SET IEN=+$ORDER(^PXD(811.9,"B",ATTR("PT01"),""))
+197 IF IEN=0
QUIT
+198 ;For reminder definitions build the found/not found text counts.
+199 DO SFNFTC^PXRMEXU0(IEN)
+200 ;Build the internal logic and finding strings.
+201 SET X=$GET(^PXD(811.9,IEN,30))
+202 IF X'=""
DO CPPCLS^PXRMLOGX(IEN,X)
+203 SET X=$GET(^PXD(811.9,IEN,34))
+204 IF X'=""
DO CPRESLS^PXRMLOGX(IEN,X)
+205 DO BLDALL^PXRMLOGX(IEN,"","")
End DoDot:1
+206 ;If there are national education topics rename them so they start
+207 ;with VA-
+208 IF $DATA(EDULIST)
IF $GET(PXRMNAT)
Begin DoDot:1
+209 ;Get the length of the .01 field
+210 DO FIELD^DID(TOPFNUM,.01,"","FIELD LENGTH","ATTR")
+211 SET NAME=""
+212 FOR
SET NAME=$ORDER(EDULIST(NAME))
if NAME=""
QUIT
Begin DoDot:2
+213 IF $EXTRACT(NAME,1,3)="VA-"
QUIT
+214 SET TNAME="VA-"_$EXTRACT(ATTR("FIELD LENGTH")-3)
+215 DO RENAME^PXRMUTIL(TOPFNUM,NAME,TNAME)
End DoDot:2
End DoDot:1
+216 ;I $G(PXRMIGDS) S DUZ(0)=DUZ0S
+217 QUIT
+218 ;
+219 ;=================================================
INIEH(FILENUM,IENS,FDA,WPTMP) ;If the file is a clinical reminder file and
+1 ;it has an edit history initialize the history.
+2 IF (FILENUM<800)!(FILENUM>811.9)
QUIT
+3 NEW IENS,SFN,TARGET,WP
+4 DO FIELD^DID(FILENUM,"CHANGE LOG","","SPECIFIER","TARGET")
+5 SET SFN=+$GET(TARGET("SPECIFIER"))
+6 IF SFN=0
DO FIELD^DID(FILENUM,"EDIT HISTORY","","SPECIFIER","TARGET")
+7 SET SFN=+$GET(TARGET("SPECIFIER"))
+8 IF SFN=0
QUIT
+9 SET IENS=$ORDER(FDA(SFN,""))
+10 IF IENS=""
QUIT
+11 SET FDA(SFN,IENS,.01)=$$FMTE^XLFDT($$NOW^XLFDT,"5Z")
+12 SET FDA(SFN,IENS,1)="`"_DUZ
+13 ;The word-processing field is set when the packing is done.
+14 SET WP=FDA(SFN,IENS,2)
+15 KILL @WP
+16 SET @WP@(1)="Exchange Install"
+17 QUIT
+18 ;
+19 ;=================================================
NAMECHG(FDA,NAMECHG,FILENUM) ;If this component has been copied to a new
+1 ;name make the change.
+2 NEW CLASS,IENS,PT01
+3 SET IENS=$ORDER(FDA(FILENUM,""))
+4 SET PT01=FDA(FILENUM,IENS,.01)
+5 IF $DATA(NAMECHG(FILENUM,PT01))
Begin DoDot:1
+6 SET FDA(FILENUM,IENS,.01)=NAMECHG(FILENUM,PT01)
+7 IF (FILENUM<801.41)!(FILENUM>811.9)
QUIT
+8 ;Once a component has been copied CLASS can no longer be national.
+9 SET CLASS=$GET(FDA(FILENUM,IENS,100))
+10 IF CLASS["N"
SET FDA(FILENUM,IENS,100)="LOCAL"
+11 ;The Sponsor is also removed.
+12 KILL FDA(FILENUM,IENS,101)
End DoDot:1
+13 QUIT
+14 ;
+15 ;=================================================
RTNLD(PXRMRIEN,START,END,ATTR,RTN) ;Load a routine from the repository into
+1 ;the array RTN.
+2 NEW IND,LINE,LN,ROUTINE
+3 SET LINE=^PXD(811.8,PXRMRIEN,100,START,0)
+4 SET ROUTINE=$PIECE(LINE,";",1)
+5 SET ROUTINE=$TRANSLATE(ROUTINE," ","")
+6 SET ATTR("FILE NUMBER")=0
+7 SET ATTR("NAME")=$PIECE(LINE,";",1)
+8 SET ATTR("NAME")=$TRANSLATE(ATTR("NAME")," ","")
+9 SET ATTR("MIN FIELD LENGTH")=3
+10 SET ATTR("FIELD LENGTH")=8
+11 SET LN=0
+12 FOR IND=START:1:END
Begin DoDot:1
+13 SET LN=LN+1
+14 SET LINE=^PXD(811.8,PXRMRIEN,100,IND,0)
+15 SET RTN(LN,0)=LINE
End DoDot:1
+16 QUIT
+17 ;
+18 ;=================================================
RTNSAVE(RTN,NAME) ;Save the routine loaded in RTN to the name
+1 ;found in NAMECHG.
+2 NEW DIE,XCN
+3 ;%ZOSF("SAVE") requires a global.
+4 KILL ^TMP($JOB,"PXRMRTN")
+5 SET DIE="^TMP($J,""PXRMRTN"","
+6 MERGE ^TMP($JOB,"PXRMRTN")=RTN
+7 SET XCN=0
+8 SET X=NAME
+9 XECUTE ^%ZOSF("SAVE")
+10 KILL ^TMP($JOB,"PXRMRTN")
+11 QUIT
+12 ;
+13 ;=================================================
WORDPROC(PXRMRIEN,WPTMP,I1,I2,IND,WPLCNT) ;Load WPTMP with the word
+1 ;processing field.
+2 NEW I3
+3 FOR I3=1:1:WPLCNT
Begin DoDot:1
+4 SET IND=IND+1
+5 SET WPTMP(I1,I2,I3)=$GET(^PXD(811.8,PXRMRIEN,100,IND,0))
End DoDot:1
+6 QUIT
+7 ;