Changeset 623 for WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMMST.m
- Timestamp:
- Dec 4, 2009, 12:11:15 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMMST.m
r613 r623 1 PXRMMST ; SLC/PKR - Routines for dealing with MST. ;03/29/20072 ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123 3 4 5 GSYINFO(TYPE) 6 7 8 9 10 11 12 13 14 15 QUE 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 STATUS(DFN,TEST,DATE,VALUE,TEXT) 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 STCODE(TERM) 68 69 70 71 72 73 SYNCH 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 SYNREP 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 UPDATE(DFN,VISIT,SOURCE,STCODE,TYPE) 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 UPDPAT(DFN,VISIT,VFL) 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 UPDSTAT(NUMUPD,START) 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 . D EVALPL^PXRMTERL(.FINDPA,.TERMARR,INDEX)234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 1 PXRMMST ; SLC/PKR - Routines for dealing with MST. ;07/17/2006 2 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21 3 ;Use of DGMSTAPI supported by DBIA #2716. 4 ;==================================================== 5 GSYINFO(TYPE) ;Return the Clinical Reminders MST synchronization date 6 ;and the number of updates made. The format is an up-arrow delimited 7 ;string. The first piece is the date and the second is the number 8 ;of updates. If TYPE is "I" then the data for the initial 9 ;synchronization is returned. For any other value the data for the 10 ;last daily synchronization is returned. 11 I $G(TYPE)="I" Q $P($G(^PXRM(800,1,"MST")),U,1,2) Q 12 Q $P($G(^PXRM(800,1,"MST")),U,3,4) 13 ; 14 ;==================================================== 15 QUE ;Queue the MST synchronization job. 16 N DIR,DIROUT,DIRUT,DTOUT,DUOUT,MINDT,SDTIME,STIME,X,Y 17 S MINDT=$$NOW^XLFDT 18 W !,"Queue the Clinical Reminders MST synchronization." 19 S DIR("A",1)="Enter the date and time you want the job to start." 20 S DIR("A",2)="It must be after "_$$FMTE^XLFDT(MINDT,"5Z") 21 S DIR("A")="Start the task at: " 22 S DIR(0)="DAU"_U_MINDT_"::RSX" 23 D ^DIR 24 I $D(DIROUT)!$D(DIRUT) Q 25 I $D(DTOUT)!$D(DUOUT) Q 26 S SDTIME=Y 27 K DIR 28 S DIR(0)="YA" 29 S DIR("A")="Do you want to run the MST synchronization at the same time every day? " 30 S DIR("B")="Y" 31 D ^DIR 32 I $D(DIROUT)!$D(DIRUT) Q 33 I $D(DTOUT)!$D(DUOUT) Q 34 S STIME=$S(Y:"1."_$P(SDTIME,".",2),1:-1) 35 ; 36 ;Put the task into the queue. 37 K ZTSAVE 38 S ZTSAVE("STIME")=STIME 39 S ZTRTN="SYNCH^PXRMMST" 40 S ZTDESC="Clinical Reminders MST synchronization job" 41 S ZTDTH=SDTIME 42 S ZTIO="" 43 D ^%ZTLOAD 44 W !,"Task number ",ZTSK," queued." 45 Q 46 ; 47 ;==================================================== 48 STATUS(DFN,TEST,DATE,VALUE,TEXT) ;Computed finding for checking a 49 ;patient's MST status. 50 N IEN,TEMP 51 S TEMP=$$GETSTAT^DGMSTAPI(DFN) 52 S IEN=$P(TEMP,U,1) 53 I IEN=-1 D Q 54 . S TEST=0,VALUE="",DATE=$$NOW^PXRMDATE 55 I IEN=0 D Q 56 . S TEST=0 57 . S VALUE=$P(TEMP,U,2) 58 . S DATE=$P(TEMP,U,3) 59 . S TEXT="No MST status found" 60 ;If we get to here then a valid entry was found. 61 S TEST=1 62 S VALUE=$P(TEMP,U,2) 63 S DATE=$P(TEMP,U,3) 64 Q 65 ; 66 ;==================================================== 67 STCODE(TERM) ;Return the MST status code based on the term name. 68 N STCODE 69 S STCODE=$S(TERM="VA-MST DECLINES REPORT":"D",TERM="VA-MST NEGATIVE REPORT":"N",TERM="VA-MST POSITIVE REPORT":"Y",1:"U") 70 Q STCODE 71 ; 72 ;==================================================== 73 SYNCH ;Synchronize the MST history file. 74 N INID,LTIME,NUMUPD,START,TEMP 75 ;STIME is passed from QUE via ZTSAVE. 76 D UPDSTAT(.NUMUPD,.START) 77 ;If the initial sync data has been stored then update the daily 78 ;data. 79 S INID=+$P($G(^PXRM(800,1,"MST")),U,1) 80 I INID>0 D 81 . S $P(^PXRM(800,1,"MST"),U,3)=$$NOW^XLFDT 82 . S $P(^PXRM(800,1,"MST"),U,4)=NUMUPD 83 . S $P(^PXRM(800,1,"MST"),U,6)=START 84 E D 85 . S $P(^PXRM(800,1,"MST"),U,1)=$$NOW^XLFDT 86 . S $P(^PXRM(800,1,"MST"),U,2)=NUMUPD 87 . S $P(^PXRM(800,1,"MST"),U,5)=START 88 ; 89 ;Cleanup the task stuff. 90 I STIME=-1 S ZTREQ="@" Q 91 E D 92 . S TEMP=$G(^PXRM(800,1,"MST")) 93 . S LTIME=+$P(TEMP,U,3) 94 . I LTIME=0 S LTIME=+$P(TEMP,U,1) 95 .;Adding STIME sets the new starting time at exactly one day following 96 .;the previous starting time. 97 . S $P(ZTREQ,U,1)=$P(LTIME,".",1)+STIME 98 Q 99 ; 100 ;==================================================== 101 SYNREP ;Provide a report of the synchronization data. 102 N EDTIME,EITIME,IDATE,LDATE,NIUPD,NLUPD,TEMP 103 S TEMP=$G(^PXRM(800,1,"MST")) 104 S IDATE=$$FMTE^XLFDT($P(TEMP,U,1)) 105 I IDATE=0 S IDATE="none" 106 S NIUPD=$P(TEMP,U,2) 107 S EITIME=$$FMDIFF^XLFDT($P(TEMP,U,1),$P(TEMP,U,5),2) 108 S LDATE=$$FMTE^XLFDT($P(TEMP,U,3)) 109 I LDATE=0 S LDATE="none" 110 S NLUPD=$P(TEMP,U,4) 111 S EDTIME=$$FMDIFF^XLFDT($P(TEMP,U,3),$P(TEMP,U,6),2) 112 W !!,"Clinical Reminders MST Synchronization Report" 113 W !,"---------------------------------------------" 114 W !,"Initial synchronization date: ",IDATE 115 W !,"Number of updates made: ",NIUPD 116 I EITIME>60 D 117 . S EITIME=$$FMDIFF^XLFDT($P(TEMP,U,1),$P(TEMP,U,5),3) 118 . W !,"Elapsed time: ",EITIME 119 E W !,"Elapsed time: ",EITIME," secs" 120 W !!,"Last daily synchronization date: ",LDATE 121 W !,"Number of updates made: ",NLUPD 122 I EDTIME>60 D 123 . S EDTIME=$$FMDIFF^XLFDT($P(TEMP,U,3),$P(TEMP,U,6),3) 124 . W !,"Elapsed time: ",EDTIME 125 E W !,"Elapsed time: ",EDTIME," secs" 126 Q 127 ; 128 ;==================================================== 129 UPDATE(DFN,VISIT,SOURCE,STCODE,TYPE) ;Make an update to the MST History file. 130 N DATE,MSTDATE,PROV,STAT,TEMP,UPDSTAT,VPRVIEN 131 S UPDSTAT=-1 132 ;If the update is because of a protocol event use NOW for the 133 ;date/time. If it is being done as part of a synchronization use 134 ;the date the visit was created. 135 S DATE=$S(TYPE="PROTOCOL":$$NOW^XLFDT,1:$P($G(^AUPNVSIT(VISIT,0)),U,2)) 136 ;If the date does not contain the time use noon. 137 I DATE'["." S DATE=DATE_".12" 138 S STAT=$$GETSTAT^DGMSTAPI(DFN) 139 S MSTDATE=$S($P(STAT,U,1)>0:$P(STAT,U,3),1:0) 140 I DATE>MSTDATE D 141 .;Determine the provider. 142 . S TEMP=$P(SOURCE,";",2)_$P(SOURCE,";",1)_",12)" 143 . S PROV=$P($G(@TEMP),U,4) 144 . I PROV="" D 145 ..;DBIA #2316 146 .. S VPRVIEN=+$O(^AUPNVPRV("AD",VISIT,"")) 147 .. I VPRVIEN>0 S PROV=$P(^AUPNVPRV(VPRVIEN,0),U,1) 148 . S UPDSTAT=$$NEWSTAT^DGMSTAPI(DFN,STCODE,DATE,PROV) 149 . I +UPDSTAT=-1 D 150 .. N FN,GBL,IEN,NAME,TARGET,XMSUB,VADM 151 .. K ^TMP("PXRMXMZ",$J) 152 .. S XMSUB="CLINICAL REMINDER MST UPDATE PROBLEM" 153 .. S ^TMP("PXRMXMZ",$J,1,0)="NEWSTAT^DGMSTAPI returned the following error:" 154 .. S ^TMP("PXRMXMZ",$J,2,0)=$P(UPDSTAT,U,2) 155 .. S ^TMP("PXRMXMZ",$J,3,0)="The following data was passed to NEWSTAT^DGMSTAPI" 156 .. S ^TMP("PXRMXMZ",$J,4,0)="DFN = "_DFN 157 .. S ^TMP("PXRMXMZ",$J,5,0)="Status code = "_STCODE 158 .. S ^TMP("PXRMXMZ",$J,6,0)="Date = "_DATE 159 .. S ^TMP("PXRMXMZ",$J,7,0)="Provider = "_PROV 160 .. S ^TMP("PXRMXMZ",$J,8,0)="Data source = "_SOURCE 161 .. S ^TMP("PXRMXMZ",$J,9,0)="This corresponds to the following:" 162 .. D DEM^VADPT 163 .. S ^TMP("PXRMXMZ",$J,10,0)="Patient = "_VADM(1) 164 .. S ^TMP("PXRMXMZ",$J,11,0)="SSN = "_$P(VADM(2),U,2) 165 .. S ^TMP("PXRMXMZ",$J,12,0)="MST Status = "_$$EXTERNAL^DILFD(29.11,3,"",STCODE) 166 .. S ^TMP("PXRMXMZ",$J,13,0)="Date = "_$$FMTE^XLFDT(DATE,"5Z") 167 .. S TEMP=$S(PROV="":"Unknown",1:TEMP=$$GET1^DIQ(200,PROV,.01,"","","")) 168 .. I TEMP="" S TEMP="Unknown" 169 .. S ^TMP("PXRMXMZ",$J,14,0)="Provider = "_TEMP 170 .. S GBL=$P($P(SOURCE,";",2),"(",1) 171 .. S TEMP=GBL_"(0)" 172 .. S FN=+$P(@TEMP,U,2) 173 .. S TEMP=GBL_"("_$P(SOURCE,";",1)_",0)" 174 .. S TEMP=$G(@TEMP) 175 .. S IEN=$P(TEMP,U,1) 176 .. D FIELD^DID(FN,.01,"N","POINTER","TARGET") 177 .. S GBL="^"_$P(TARGET("POINTER"),"(",1) 178 .. S TEMP=GBL_"(0)" 179 .. S FN=$P(@TEMP,U,1) 180 .. S TEMP=GBL_"("_IEN_",0)" 181 .. S NAME=$P(@TEMP,U,1) 182 .. S ^TMP("PXRMXMZ",$J,14,0)="Data type = "_FN 183 .. S ^TMP("PXRMXMZ",$J,15,0)="Name = "_NAME 184 .. D SEND^PXRMMSG(XMSUB) 185 Q UPDSTAT 186 ; 187 ;==================================================== 188 UPDPAT(DFN,VISIT,VFL) ;Update the MST history file for a single patient 189 ;using term mappings. Called from DATACHG^PXRMPINF which is invoked 190 ;by the protocol PXK VISIT DATA EVENT. 191 N AFTER,BEFORE,DGBL,SP,STCODE,SIEN,SOURCE 192 N TEMP,TERM,TERMIEN,VF 193 ;Search all the MST terms to build patient lists. 194 F TERM="VA-MST DECLINES REPORT","VA-MST NEGATIVE REPORT","VA-MST POSITIVE REPORT" D 195 . S TERMIEN=$O(^PXRMD(811.5,"B",TERM,"")) 196 . S VF="" 197 . F S VF=$O(VFL(VF)) Q:VF="" D 198 .. I VFL(VF)=U Q 199 .. S DGBL=$P(VFL(VF),U,1) 200 .. I '$D(^PXRMD(811.5,TERMIEN,20,"E",DGBL)) Q 201 .. S SIEN="" 202 .. F S SIEN=$O(^TMP("PXKCO",$J,VISIT,VF,SIEN)) Q:SIEN="" D 203 ... S AFTER=$G(^TMP("PXKCO",$J,VISIT,VF,SIEN,0,"AFTER")) 204 ... S BEFORE=$G(^TMP("PXKCO",$J,VISIT,VF,SIEN,0,"BEFORE")) 205 ... I AFTER=BEFORE Q 206 ... S SP=$P(AFTER,U,1) 207 ... I SP="" Q 208 ... I '$D(^PXRMD(811.5,TERMIEN,20,"E",DGBL,SP)) Q 209 ... S SOURCE=SIEN_";^"_$P(VFL(VF),U,2) 210 ...;The status code depends on the term name. 211 ... S STCODE=$$STCODE(TERM) 212 ... S TEMP=$$UPDATE(DFN,VISIT,SOURCE,STCODE,"PROTOCOL") 213 Q 214 ; 215 ;==================================================== 216 UPDSTAT(NUMUPD,START) ;Update the MST history file using term mappings. 217 N DAS,DATA,DFN,FILENUM,FINDPA,INDEX,ITEM,NOCC,STCODE,SOURCE 218 N TEMP,TERM,TERMARR,TERMIEN,UPDSTAT,VDATE,VISIT 219 S FINDPA="" 220 ;Set the start time for the synchronization. 221 S START=$$NOW^XLFDT 222 S INDEX="PXRM_MST_LIST" 223 S NUMUPD=0 224 ;Search all the MST terms to build patient lists. Only V file data 225 ;is used for the update. 226 F TERM="VA-MST DECLINES REPORT","VA-MST NEGATIVE REPORT","VA-MST POSITIVE REPORT" D 227 . K TERMARR,^TMP($J,INDEX) 228 .;The status code depends on the term name. 229 . S STCODE=$$STCODE(TERM) 230 . S TERMIEN=$O(^PXRMD(811.5,"B",TERM,"")) 231 . I TERMIEN="" Q 232 . D TERM^PXRMLDR(TERMIEN,.TERMARR) 233 . D EVALPL^PXRMTERM(.FINDPA,.TERMARR,INDEX) 234 . S DFN=0 235 . F S DFN=+$O(^TMP($J,INDEX,1,DFN)) Q:DFN=0 D 236 .. S ITEM="" 237 .. F S ITEM=$O(^TMP($J,INDEX,1,DFN,ITEM)) Q:ITEM="" D 238 ... S NOCC=0 239 ... F S NOCC=$O(^TMP($J,INDEX,1,DFN,ITEM,NOCC)) Q:NOCC="" D 240 .... S FILENUM="" 241 .... F S FILENUM=$O(^TMP($J,INDEX,1,DFN,ITEM,NOCC,FILENUM)) Q:FILENUM="" D 242 ..... S TEMP=^TMP($J,INDEX,1,DFN,ITEM,NOCC,FILENUM) 243 ..... S DAS=$P(TEMP,U,1) 244 ..... K DATA 245 ..... D GETDATA^PXRMDATA(FILENUM,DAS,.DATA) 246 ..... S VISIT=$G(DATA("VISIT")) 247 ..... I VISIT="" Q 248 ..... S SOURCE=DAS_";"_^PXRMINDX(FILENUM,"GLOBAL NAME") 249 ..... S UPDSTAT=$$UPDATE(DFN,VISIT,SOURCE,STCODE,"SYNCH") 250 ..... I UPDSTAT'=-1 S NUMUPD=NUMUPD+1 251 K ^TMP($J,INDEX) 252 Q 253 ;
Note:
See TracChangeset
for help on using the changeset viewer.