source: FOIAVistA/trunk/r/ADVERSE_REACTION_TRACKING-GMRA-GMA/GMRAY40.m@ 1328

Last change on this file since 1328 was 628, checked in by George Lilly, 15 years ago

initial load of FOIAVistA 6/30/08 version

File size: 8.4 KB
Line 
1GMRAY40 ;SLC/DAN Installation Utilities ;7/10/07 12:38
2 ;;4.0;Adverse Reaction Tracking;**40**;Mar 29, 1996;Build 2
3 ;
4 ;DBIA SECTION
5 ;3744 - $$TESTPAT^VADPT
6 ;10061 - VADPT
7 ;10013 - DIK
8 ;2056 - DIQ
9 ;10018 - DIE
10 ;10070 - XMD
11 ;10103 - XLFDT
12 ;2051 - DIC
13 ;
14PRETRAN ;Load conversion table into KIDS build
15 M @XPDGREF@("GMRAFIX40")=^XTMP("GMRAFIX40")
16 Q
17 ;
18POST ;Post installation processes
19 K ^XTMP("GMRAFIX40")
20 M ^XTMP("GMRAFIX40")=@XPDGREF@("GMRAFIX40")
21 I '$D(^XTMP("GMRAFIX40")) W !,"Conversion table not loaded - INSTALLATION ABORTED" S XPDQUIT=2 Q
22 D Q Q ;Queue clean up to background
23 ;
24Q ;
25 N ZTRTN,ZTDESC,ZTIO,ZTDTH,ZTSK
26 S ZTRTN="DQ^GMRAY40",ZTDESC="GMRA*4*40 POST INSTALL ROUTINE",ZTIO="",ZTDTH=$H
27 D ^%ZTLOAD I '$G(ZTSK) D BMES^XPDUTL("POST INSTALL NOT QUEUED - RUN DQ^GMRAY40 AFTER INSTALL FINISHES") Q
28 D BMES^XPDUTL("Post-install queued as task # "_$G(ZTSK))
29 Q
30 ;
31DQ ;Process begins here
32 N ERR,TU,TE,TF
33 D FIXB
34 D FIXALG
35 D MAIL
36 S ^XTMP("GMRAFIX40",0)=$$FMADD^XLFDT(DT,30)_"^"_DT_"^Patch GMRA*4*40 conversion table"
37 K ^XTMP("GMRAFX","FREE") ;Kill free text list so it forces rebuild
38 Q
39 ;
40FIXB ;Kill and reset "B" xref on file 120.8 to be sure it's correct
41 N DIK
42 K ^GMR(120.8,"B")
43 S DIK="^GMR(120.8,"
44 S DIK(1)=".01^B"
45 D ENALL^DIK ;Resets B xref
46 Q
47 ;
48FIXALG ;Loop through 120.8 update existing free text entries
49 N GMRAI,FREE,REACTANT,ENTRY,GMRAR
50 S GMRAI=0 F S GMRAI=$O(^GMR(120.8,GMRAI)) Q:'+GMRAI D
51 .I '$D(^GMR(120.8,GMRAI,0))!($L($G(^GMR(120.8,GMRAI,0)),"^")=1) D DEL Q
52 .Q:+$G(^GMR(120.8,GMRAI,"ER"))!($$TESTPAT^VADPT($P(^GMR(120.8,GMRAI,0),U)))!($$DECEASED^GMRAFX($P(^GMR(120.8,GMRAI,0),U))) ;stop if entered in error, test patient or deceased patient
53 .S REACTANT=$P(^GMR(120.8,GMRAI,0),U,2)
54 .I REACTANT["ANGIOTEN"&(REACTANT["( FREE TEXT )") D Q
55 ..S GMRAR=$$UP^XLFSTR($E($P(REACTANT," ( FREE TEXT )"),1,30)) ;Get just term
56 ..S ENTRY=$G(^XTMP("GMRAFIX40",GMRAR)) ;Is entry in the table
57 ..I ENTRY="" Q ;Entry not found or designated free text - leave alone
58 ..D UPDATE ;Update entry from table
59 .I REACTANT="ACE INHIBITORS" S GMRAR=REACTANT I $$CHANGED(.GMRAR) D
60 ..S GMRAR=$E(GMRAR,1,30) ;Get 1st 30 chars of term
61 ..S ENTRY=$G(^XTMP("GMRAFIX40",GMRAR))
62 ..I ENTRY="",$D(^XTMP("GMRAFIX40",GMRAR)) S REACTANT=GMRAR D UPDATEF Q ;Convert term to FREE TEXT as it should have been
63 ..I $D(^XTMP("GMRAFIX40",GMRAR)) D UPDATE
64 Q
65 ;
66DEL ;No zero node, remove entry
67 N DIK,DA,GMRADONT
68 S GMRADONT=1 ;Stop HDR from receiving update as it's not needed
69 S DIK="^GMR(120.8,",DA=GMRAI
70 D ^DIK
71 Q
72 ;
73UPDATEF ;Update reactant to say free text so users know it isn't a standardized entry
74 N FDA,COM,FREE
75 S FREE=$O(^GMRD(120.82,"B","OTHER ALLERGY/ADVERSE REACTION",0)),FREE=FREE_";GMRD(120.82,"
76 Q:$G(REACTANT)["FREE TEXT" ;Already updated to free text, can skip.
77 S REACTANT=REACTANT_" ( FREE TEXT )"
78 S FDA(120.8,(GMRAI_","),.02)=REACTANT
79 S FDA(120.8,(GMRAI_","),1)=FREE
80 D FILE^DIE(,"FDA")
81 S TF=$G(TF)+1 ;Increment total free text updated counter
82 S COM="Updated using the auto clean up process from GMRA*4*40. Changed reactant from ACE INIHIBITORS (file - 50.605) to "_REACTANT
83 D ADCOM^GMRAFX(GMRAI,"O",COM)
84 Q
85 ;
86UPDATEE ;Mark as entered in error, check for NKA
87 N DIE,DA,DR,DFN,USER,TIME
88 S DFN=$P(^GMR(120.8,GMRAI,0),U) ;Patient's IEN
89 S USER=$P(^GMR(120.8,GMRAI,0),U,5),TIME=$P(^(0),U,4)
90 S DIE="^GMR(120.8,",DA=GMRAI,DR="22///1;23///NOW;24////"_$G(DUZ,.5)
91 D ^DIE ;Entry is now entered in error
92 D ADCOM^GMRAFX(GMRAI,"E","Marked entered in error by auto-update in patch GMRA*4*40") ;Adds comment to allergy record
93 I $$NKASCR^GMRANKA(DFN) D
94 .I $P(ENTRY,U,2)="NKDA" S DA=DFN,DIE="^GMR(120.86,",DR="1////0;2////"_$G(USER,DUZ)_";3////"_$G(TIME,$$NOW^XLFDT) D ^DIE Q ;Set assessment to NKA
95 .D CLN^GMRANKA ;Delete assessment
96 S TE=$G(TE)+1 ;Increment total entered in error counter
97 Q
98 ;
99UPDATE ;Update free text entry to data found in table
100 N DFN,DIE,DA,DR,AIFN,COM,SIEN,FILE,NAME,IEN,GMRAAR,GMRAPA,GMRASCR,ERRCODE
101 S DFN=$P(^GMR(120.8,GMRAI,0),U)
102 S GMRAPA=GMRAI
103 S FILE=$P(ENTRY,U),NAME=$P(ENTRY,U,2)
104 S IEN=$$FIND1^DIC(FILE,"",$S(FILE=120.82:"X",1:"MX"),NAME,$S(FILE=120.82:"B",1:""),,"ERRCODE")
105 I '+IEN S IEN=$$FIND1^DIC(FILE,"","MX",NAME_" ","",,"ERRCODE")
106 I '+IEN,NAME="ANTIMUSCARINICS/ANTISPASMODICS" S IEN=$$FIND1^DIC(FILE,"","MX","GA801","",,"ERRCODE")
107 I '+IEN,$L($T(SCREEN^XTID)) S GMRASCR="I '$$SCREEN^XTID(FILE,,Y_"","")" S IEN=$$FIND1^DIC(FILE,"","MX",NAME,"",$G(GMRASCR),"ERRCODE")
108 I '+IEN S ERR(2,DFN,REACTANT)=ENTRY D UPDATEF Q
109 S GMRAAR=IEN_";"_$S(FILE=50:"PSDRUG(",FILE=50.416:"PS(50.416,",FILE=50.605:"PS(50.605,",FILE=120.82:"GMRD(120.82,",1:"PSNDF(50.6,")
110 S GMRAAR(0)=NAME
111 S GMRAAR("O")=$S(FILE=120.82:$P(^GMRD(120.82,IEN,0),U,2),1:"D")
112 I $$DUP^GMRAFX3 S ERR(3,DFN,REACTANT)=ENTRY D UPDATEF Q ;Would create a duplicate if update occur
113 ;Update reactant, allergy and signed off fields
114 S DIE="^GMR(120.8,",DA=GMRAPA,DR=".02////"_GMRAAR(0)_";1////^S X=GMRAAR"_";3.1////"_GMRAAR("O")_";15///1" D ^DIE
115 I $D(^GMR(120.85,"C",GMRAPA)) D ;Observed reaction, need to update data
116 .S AIFN=0
117 .F S AIFN=$O(^GMR(120.85,"C",GMRAPA,AIFN)) Q:'+AIFN D
118 ..S SIEN=$O(^GMR(120.85,AIFN,3,"B",REACTANT,0)) Q:'+SIEN ;Was previous reactant stored as "suspected agent"
119 ..S DA(1)=AIFN,DA=SIEN
120 ..S DIE="^GMR(120.85,DA(1),3,",DR=".01////^S X=GMRAAR(0)" D ^DIE ;Update suspected agent to new value
121 D DELMUL^GMRAFX3(2),DELMUL^GMRAFX3(3) ;Delete drug ingredient/drug classes multiples
122 I GMRAAR("O")["D" D UPDATE^GMRAPES1 K LIST ;If reactant type is Drug then add appropriate ingredients and classes
123 S COM="Updated using auto clean up process from GMRA*4*40. Changed reactant from ACE INHIBITORS (file - 50.605) to "_GMRAAR(0)_" (file - "_$P(GMRAAR,";",2)_")"
124 D ADCOM^GMRAFX(GMRAPA,"O",COM) ;Add a comment for this update
125 S TU=$G(TU)+1 ;Increment total updated counter
126 Q
127 ;
128MAIL ;Send message indicating post install is finished
129 N XMSUB,XMTEXT,XMDUZ,XMY,XMZ,GMRATXT,CNT,VADM,DFN,REACTANT,LOOP,DIFROM,EXTRA
130 S XMDUZ="PATCH GMRA*4*40 POST-INSTALL"
131 S XMY("DAVID.NABER@VA.GOV")="",XMY("CATHERINE.HOANG2@VA.GOV")=""
132 S XMY("HULET.LEE_ANN@FORUM.VA.GOV")="",XMY("KEN.BARLOW@VA.GOV")=""
133 S EXTRA=($D(ERR(2))!($D(ERR(3))))
134 I 'EXTRA S XMY(.5)="" S:$G(DUZ) XMY(DUZ)=""
135 S CNT=1
136 S GMRATXT(CNT)="The post-install routine for patch GMRA*4*40",CNT=CNT+1
137 S GMRATXT(CNT)="finished on "_$$FMTE^XLFDT($$NOW^XLFDT)_".",CNT=CNT+1
138 S GMRATXT(CNT)="",CNT=CNT+1
139 I $G(ERR)=1 D
140 .S GMRATXT(CNT)="**NOTE: There was a problem with the installation!",CNT=CNT+1
141 .S GMRATXT(CNT)="Required entry missing from file 120.82 - CONVERSION ABORTED.",CNT=CNT+1
142 .S GMRATXT(CNT)="Contact the National Help Desk for Immediate assistance.",CNT=CNT+1
143 I $G(TU)!($G(TE))!($G(TF)) D
144 .S GMRATXT(CNT)="Here are the results of the update:",CNT=CNT+1
145 .S GMRATXT(CNT)="",CNT=CNT+1
146 .F LOOP="TU","TF","TE" D
147 ..S GMRATXT(CNT)=$S(+$G(@LOOP)=0:"No entries were",$G(@LOOP)=1:"One entry was",1:$G(@LOOP)_" entries were")_" "
148 ..S GMRATXT(CNT)=GMRATXT(CNT)_$S(LOOP="TU":"updated to new terms",LOOP="TF":"updated to have (FREE TEXT) appended to the term",1:"marked entered in error")_".",CNT=CNT+1
149 .S GMRATXT(CNT)="",CNT=CNT+1
150 S XMTEXT="GMRATXT(",XMSUB="PATCH GMRA*4*40 Post Install COMPLETED"
151 D ^XMD ;Send totals to OI reps, include local if no problems
152 F LOOP=2,3 D
153 .I $D(ERR(LOOP)) D
154 ..S GMRATXT(CNT)="The following patients have allergies that couldn't be converted",CNT=CNT+1
155 ..S GMRATXT(CNT)=$S(LOOP=2:"because the term to update them to couldn't be found in the local files.",1:"because it would create a duplicate entry."),CNT=CNT+1
156 ..S GMRATXT(CNT)="",CNT=CNT+1
157 ..S DFN=0 F S DFN=$O(ERR(LOOP,DFN)) Q:'+DFN D
158 ...K VADM D DEM^VADPT
159 ...S GMRATXT(CNT)="PATIENT: "_VADM(1)_" ("_$E(VADM(2),6,9)_")",CNT=CNT+1
160 ...S REACTANT="" F S REACTANT=$O(ERR(LOOP,DFN,REACTANT)) Q:REACTANT="" D
161 ....S GMRATXT(CNT)="Can't convert "_REACTANT_" to "_$P(ERR(LOOP,DFN,REACTANT),U,2)_" (file: "_$P(ERR(LOOP,DFN,REACTANT),U)_")",CNT=CNT+1
162 ...S GMRATXT(CNT)="",CNT=CNT+1
163 ..S $P(GMRATXT(CNT),"*",70)="*",CNT=CNT+1,GMRATXT(CNT)="",CNT=CNT+1
164 I EXTRA D
165 .K XMY S XMY(.5)="" S:$G(DUZ) XMY(DUZ)="" ;Send full report to local site only
166 .S XMTEXT="GMRATXT(",XMSUB="PATCH GMRA*4*40 Post Install COMPLETED"
167 .D ^XMD
168 Q
169 ;
170CHANGED(GMRAR) ;Was entry changed by patch 29?
171 N CHANGED,SUB
172 S CHANGED=0
173 S SUB=0 F S SUB=$O(^GMR(120.8,GMRAI,26,SUB)) Q:'+SUB!(CHANGED) D
174 .I $G(^GMR(120.8,GMRAI,26,SUB,2,1,0))["GMRA*4*29" S GMRAR=$$UP^XLFSTR($P($P(^GMR(120.8,GMRAI,26,SUB,2,1,0),"reactant from ",2)," (free text)",1)) ;get term and upper case it
175 .I $G(^GMR(120.8,GMRAI,26,SUB,2,1,0))["GMRA*4*29",$G(GMRAR)["ANGIOTEN" S CHANGED=1
176 Q CHANGED
Note: See TracBrowser for help on using the repository browser.