Ignore:
Timestamp:
Dec 4, 2009, 12:11:15 AM (14 years ago)
Author:
George Lilly
Message:

revised back to 6/30/08 version

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/2007
    2         ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123
    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^PXRMTERL(.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         ;
     1PXRMMST ; 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 ;====================================================
     5GSYINFO(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 ;====================================================
     15QUE ;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 ;====================================================
     48STATUS(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 ;====================================================
     67STCODE(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 ;====================================================
     73SYNCH ;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 ;====================================================
     101SYNREP ;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 ;====================================================
     129UPDATE(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 ;====================================================
     188UPDPAT(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 ;====================================================
     216UPDSTAT(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.