Ignore:
Timestamp:
Dec 4, 2009, 8:26:01 PM (14 years ago)
Author:
George Lilly
Message:

WorldVistAEHR overlayed on FOIAVistA

Location:
FOIAVistA/tag/r
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • FOIAVistA/tag/r/CLINICAL_REMINDERS-PXRM/PXRMRULE.m

    r628 r636  
    1 PXRMRULE ; SLC/PJH - Build Patient list from Rule Set ;03/27/2007
    2  ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123
     1PXRMRULE ; SLC/PJH - Build Patient list from Rule Set ;08/11/2006
     2 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
    33 ;
    44 ; Called from PXRM PATIENT LIST CREATE protocol
     5 ;
     6ASK(PLIEN,OPT) ;Verify patient list name
     7 N X,Y,TEXT
     8 K DIROUT,DIRUT,DTOUT,DUOUT
     9 S DIR(0)="YA0"
     10 S DIR("A")=OPT_" patient list "_$P($G(^PXRMXP(810.5,PLIEN,0)),U)_"?: "
     11 S DIR("B")="N"
     12 S DIR("?")="Enter Y or N. For detailed help type ??"
     13 W !
     14 D ^DIR K DIR
     15 I $D(DIROUT) S DTOUT=1
     16 I $D(DTOUT)!($D(DUOUT)) Q
     17 I $E(Y(0))="N" S DUOUT=1 Q
     18 Q
    519 ;
    620CLEAR(RULE,NODE) ;Clear workfile entries
     
    1327 Q
    1428 ;
     29COPY(IENO) ;Copy patient list
     30 ;Check if OK to copy
     31 D ASK(IENO,"Copy") Q:$D(DUOUT)!$D(DTOUT)
     32 N FDA,IENN,IND,MSG,NNAME,ODATA,OEPIEN,ONAME,ORULE,PATCREAT,TEXT,X,Y
     33 ;Select list to copy to
     34 S TEXT="Select PATIENT LIST name to copy to: "
     35 D PLIST^PXRMLCR(.IENN,TEXT,IENO) Q:$D(DUOUT)!$D(DTOUT)  Q:'IENN
     36 S NNAME=$P($G(^PXRMXP(810.5,IENN,0)),U)
     37 ;
     38 ;Get original Patient List record
     39 S ODATA=$G(^PXRMXP(810.5,IENO,0))
     40 S ONAME=$P(ODATA,U),OEPIEN=$P(ODATA,U,5),ORULE=$P(ODATA,U,6)
     41 ;
     42 M ^PXRMXP(810.5,IENN)=^PXRMXP(810.5,IENO)
     43 D ASK^PXRMXD(.PATCREAT,"Secure list?: ",2)
     44 ;Update header info
     45 S TYPE=$S($G(PATCREAT)="Y":"PVT",1:"PUB")
     46 S IND=IENN_","
     47 S FDA(810.5,IND,.01)=NNAME
     48 S FDA(810.5,IND,.04)=$$NOW^XLFDT
     49 S FDA(810.5,IND,.05)=OEPIEN
     50 S FDA(810.5,IND,.06)=ORULE
     51 S FDA(810.5,IND,.07)=$G(DUZ)
     52 S FDA(810.5,IND,.08)=TYPE
     53 D UPDATE^DIE("","FDA","","MSG")
     54 ;Error
     55 I $D(MSG) D ERR
     56 ;
     57 W !!,"Completed copy of '"_ONAME_"'"
     58 W !,"into '"_NNAME_"'",! H 2
     59 K ^TMP($J,"PXRMRULE")
     60 Q
     61 ;
     62CRLST(NAME,CLASS) ;Create new patient list
     63 N IEN
     64 ;Check if name exists
     65 S IEN=$O(^PXRMXP(810.5,"B",NAME,"")) I IEN Q IEN
     66 ;Otherwise create national entry
     67 N FDA,FDAIEN,MSG
     68 S FDA(810.5,"+1,",.01)=NAME
     69 S FDA(810.5,"+1,",100)=CLASS
     70 D UPDATE^DIE("","FDA","FDAIEN","MSG")
     71 ;Error
     72 I $D(MSG) Q 0
     73 ;Otherwise list ien
     74 Q FDAIEN(1)
     75 ;
     76DELETE(LIST) ;Delete Patient list
     77 I '$$VEDIT^PXRMUTIL("^PXRMXP(810.5,",LIST) D  Q
     78 .W !!,?5,"VA- and national class patient lists may not be deleted" H 2
     79 .S DUOUT=1
     80 ;Check if this is the right list
     81 D ASK(LIST,"Delete") Q:$D(DUOUT)!$D(DTOUT)
     82 ;
     83 N DA,DIK,DUOUT
     84 ;Lock patient list
     85 D LOCK Q:$D(DUOUT)
     86 ;Kill List
     87 S DA=LIST,DIK="^PXRMXP(810.5,"
     88 D ^DIK
     89 ;Unlock patient list
     90 D UNLOCK
     91 Q
     92 ;
     93ERR ;Error Handler
     94 N ERROR,IC,REF
     95 S ERROR(1)="Unable to build patient list : "
     96 S ERROR(2)=NAME
     97 S ERROR(3)="Error in UPDATE^DIE, needs further investigation"
     98 ; Move MSG into Error
     99 S REF="MSG"
     100 F IC=4:1 S REF=$Q(@REF) Q:REF=""  S ERROR(IC)=REF_"="_@REF
     101 ;Screen message
     102 D EN^DDIOL(.ERROR)
     103 Q
     104 ;
    15105INTR ;Input transform for #810.4 fields
    16106 Q
     
    25115 Q
    26116 ;
    27 PATS(FRACT,FROUT,PNODE,LIST) ;Process Patient List finding rule
     117LOCK L +^PXRMXP(810.5,LIST):0
     118 E  W !!?5,"Another user is using this patient list" S DUOUT=1
     119 Q
     120 ;
     121PATS(LIST) ;Process Patient List finding rule
    28122 ;
    29123 N LIEN,LUVALUE
     
    38132 I FRACT="A" D LOAD(FROUT,LIEN) Q
    39133 ;
    40  ;Remove or Select operations
    41  ;Load List
    42  D LOAD(PNODE,LIEN)
    43  ;Check each patient
    44  S DFN=0
    45  F  S DFN=$O(^TMP($J,FROUT,DFN)) Q:'DFN  D
    46  .;Delete any ^TMP patient in PLIST if action is remove
    47  .I FRACT="R",$D(^TMP($J,PNODE,DFN)) K ^TMP($J,FROUT,DFN) Q
    48  .;Delete any ^TMP patient not in PLIST if action is select
    49  .I FRACT="S",'$D(^TMP($J,PNODE,DFN)) K ^TMP($J,FROUT,DFN)
    50  Q
    51  ;
    52 START(RULESET,LIST,NODE,LBBDT,LBEDT,PAR,YEAR,PERIOD,INDP,INTP,EXTITR) ;
     134 ;Remove, Select or Add Findings operations
     135 I FRACT'="A" D  Q
     136 .;Load List
     137 .D LOAD(PNODE,LIEN)
     138 .;Check each patient
     139 .S DFN=0
     140 .F  S DFN=$O(^TMP($J,FROUT,DFN)) Q:'DFN  D
     141 ..;Delete any ^TMP patient in PLIST if action is remove
     142 ..I FRACT="R",$D(^TMP($J,PNODE,DFN)) K ^TMP($J,FROUT,DFN) Q
     143 ..;Delete any ^TMP patient not in PLIST if action is select
     144 ..I FRACT="S",'$D(^TMP($J,PNODE,DFN)) K ^TMP($J,FROUT,DFN)
     145 Q
     146 ;
     147START(RULESET,LIST,NODE,LBBDT,LBEDT,PAR,YEAR,PERIOD,INDP,INTP) ;
    53148 ;Process rule set
    54149 ;Clear ^TMP
     
    56151 ;
    57152 N CLASS,FRACT,FRDATA,FRDATES,FRIEN,FRLST,FRLIEN,FROLST,FROUT,FRPAT
    58  N FRPERM,FRSTRT,FRTIEN,FRTYP,FSEQ,INC,INST,PXRMDATE,PXRMDDOC
     153 N FRPERM,FRSTRT,FRTIEN,FRTYP,FSEQ,INC,INST,PXRMDATE
    59154 N RBDT,REDT,RRIEN,RSDATA,RSDATES,SEQ,SUB
    60155 ;Get class from extract parameter
     
    62157 ;Otherwise default to local
    63158 I $G(CLASS)="" S CLASS="L"
    64  ;PXRMDDOC=1 save list rule evaluation dates in ^TMP("PXRMDDOC",$J)
    65  S PXRMDDOC=1
    66  K ^TMP("PXRMDDOC",$J)
    67159 ;Get each finding rule in sequence
    68  S SEQ="",INC=0,INST=0
     160 S SEQ="",INC=0
    69161 F  S SEQ=$O(^PXRM(810.4,RULESET,30,"B",SEQ)) Q:'SEQ  D
    70162 .;Save first sequence as default
     
    84176 .;Get Extract Patient List name for patient list rule
    85177 .I FRTYP=5 S FRLST=$P($G(^PXRM(810.4,FRIEN,1)),U) D  Q:FRLST=""
    86  ..I +EXTITR>0 S FRLST=FRLST_"/"_EXTITR
    87178 ..S FROLST=$P(FRDATA,U,8)
    88179 ..I +FROLST>0 S FRLST=$P($G(^PXRMXP(810.5,FROLST,0)),U)
     
    106197 .K ^TMP($J,PNODE)
    107198 .;Term finding rules
    108  .I FRTYP=1 D TERM^PXRMRUL1(FRACT,FRTIEN,LBBDT,LBEDT,RBDT,REDT,PNODE,.INST)
     199 .I FRTYP=1 D TERM^PXRMRUL1(FRACT,FRTIEN,RBDT,REDT,PNODE,.INST)
    109200 .;Reminder Definition List Rule
    110  .I FRTYP=2 D REM^PXRMRUL1(FRACT,RRIEN,LBBDT,LBEDT,RBDT,REDT,PNODE)
     201 .I FRTYP=2 D REM^PXRMRUL1(FRACT,RRIEN,RBDT,REDT,PNODE)
    111202 .;Patient list finding rules
    112  .I FRTYP=5 D PATS(FRACT,FROUT,PNODE,FRLST)
     203 .I FRTYP=5 D PATS(FRLST)
    113204 .;Clear results file
    114205 .K ^TMP($J,PNODE)
     
    118209 ..N FRPIEN
    119210 ..;Get patient list IEN or create new patient list
    120  ..S FRPIEN=$$CRLST^PXRMRUL1(FRPERM,CLASS) Q:'FRPIEN
     211 ..S FRPIEN=$$CRLST(FRPERM,CLASS) Q:'FRPIEN
    121212 ..;Update patient list
    122  ..D UPDLST(FROUT,FRPIEN,PAR,RULESET,INST,INDP,INTP)
     213 ..D UPDLST(FROUT,FRPIEN,PAR,RULESET,INST)
    123214 ;
    124215 ;Save final results to patient list
    125216 I LIST'="",FROUT'="" D
    126217 . D RMPAT^PXRMEUT(FROUT,INDP,INTP)
    127  . D UPDLST(FROUT,LIST,PAR,RULESET,INST,INDP,INTP)
    128  .;PXRMDDOC=2 compare saved dates with those generated in
    129  .;DOCUMENT^PXRMEUT.
    130  . S PXRMDDOC=2
     218 . D UPDLST(FROUT,LIST,PAR,RULESET,INST)
    131219 . D DOCUMENT^PXRMEUT(LIST,RULESET,INDP,INTP,LBBDT,LBEDT)
    132  K ^TMP("PXRMDDOC",$J)
    133  Q
    134  ;
    135 UPDLST(NODE,LIST,EPIEN,RULE,INST,INDP,INTP) ;Update patient list
    136  N CNT,DA,DATA,DCNT,DECEASED,DFN,DNAME,DNAMEL,DOD,DUE,DUOUT,FDA
    137  N INSTNAM,INSTNUM,LAST,MSG,NAME,ONODE
    138  N RCNT,RIEN,RNAMEL,RNCNT,SUB,TEMP,TEST,TYPE,VALUE
     220 Q
     221 ;
     222UPDLST(NODE,LIST,EPIEN,RULE,INST) ;Update patient list
     223 N CNT,DA,DATA,DCNT,DFN,DNAME,DNAMEL,DUE,DUOUT,FDA,INST,INSTNAM,INSTNUM
     224 N LAST,MSG,NAME,ONODE,RCNT,RIEN,RNAMEL,RNCNT,SUB,TEMP,TYPE,VALUE
    139225 ;Lock patient list
    140  D LOCK^PXRMRUL1 Q:$D(DUOUT)
    141  S TEMP=^PXRMXP(810.5,LIST,0)
    142  S NAME=$P(TEMP,U,1)
    143  S $P(^PXRMXP(810.5,LIST,0),U,11)=INDP
    144  S $P(^PXRMXP(810.5,LIST,0),U,12)=INTP
     226 D LOCK Q:$D(DUOUT)
    145227 ;
    146228 ;Clear existing list.
    147229 K ^PXRMXP(810.5,LIST,30),^PXRMXP(810.5,LIST,35),^PXRMXP(810.5,LIST,45),^PXRMXP(810.5,LIST,200)
     230 S NAME=$P($G(^PXRMXP(810.5,LIST,0)),U)
    148231 ;
    149232 ;Merge ^TMP into Patient List
    150  S (DECEASED,TESTP)=""
    151  S (CNT,DFN)=0
     233 S (CNT,DFN,INST)=0
    152234 F  S DFN=$O(^TMP($J,NODE,DFN)) Q:'DFN  D
    153235 .S ONODE=$G(^TMP($J,NODE,DFN,"INST"))
    154236 .S INSTNUM=$P(ONODE,U,1),INSTNAM=$P(ONODE,U,2)
    155  .S TEMP=DFN_U_INSTNUM_U_INSTNAM
    156  .I INDP D
    157  ..;DBIA #10035
    158  ..S DOD=+$P($G(^DPT(DFN,.35)),U,1)
    159  ..S DECEASED=$S(DOD=0:0,1:1)
    160  .;DBIA #3744
    161  .I INTP S TESTP=$$TESTPAT^VADPT(DFN)
    162  .S CNT=CNT+1,^PXRMXP(810.5,LIST,30,CNT,0)=DFN_U_INSTNUM_U_INSTNAM_U_DECEASED_U_TESTP
     237 .S CNT=CNT+1,^PXRMXP(810.5,LIST,30,CNT,0)=DFN_U_INSTNUM_U_INSTNAM
    163238 .S ^PXRMXP(810.5,LIST,30,"B",DFN,CNT)=""
    164239 .;
     
    215290 D UPDATE^DIE("","FDA","","MSG")
    216291 ;Error
    217  I $D(MSG) D ERR^PXRMRUL1
     292 I $D(MSG) D ERR
    218293 ;Unlock patient list
    219  D UNLOCK^PXRMRUL1
    220  Q
    221  ;
     294 D UNLOCK
     295 Q
     296 ;
     297UNLOCK L -^PXRMXP(810.5,LIST) Q
     298 ;
Note: See TracChangeset for help on using the changeset viewer.