Changeset 636 for FOIAVistA/tag/r/CLINICAL_REMINDERS-PXRM/PXRMRULE.m
- Timestamp:
- Dec 4, 2009, 8:26:01 PM (14 years ago)
- 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 ;0 3/27/20072 ;;2.0;CLINICAL REMINDERS;**4 ,6**;Feb 04, 2005;Build 1231 PXRMRULE ; SLC/PJH - Build Patient list from Rule Set ;08/11/2006 2 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21 3 3 ; 4 4 ; Called from PXRM PATIENT LIST CREATE protocol 5 ; 6 ASK(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 5 19 ; 6 20 CLEAR(RULE,NODE) ;Clear workfile entries … … 13 27 Q 14 28 ; 29 COPY(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 ; 62 CRLST(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 ; 76 DELETE(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 ; 93 ERR ;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 ; 15 105 INTR ;Input transform for #810.4 fields 16 106 Q … … 25 115 Q 26 116 ; 27 PATS(FRACT,FROUT,PNODE,LIST) ;Process Patient List finding rule 117 LOCK L +^PXRMXP(810.5,LIST):0 118 E W !!?5,"Another user is using this patient list" S DUOUT=1 119 Q 120 ; 121 PATS(LIST) ;Process Patient List finding rule 28 122 ; 29 123 N LIEN,LUVALUE … … 38 132 I FRACT="A" D LOAD(FROUT,LIEN) Q 39 133 ; 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 ; 147 START(RULESET,LIST,NODE,LBBDT,LBEDT,PAR,YEAR,PERIOD,INDP,INTP) ; 53 148 ;Process rule set 54 149 ;Clear ^TMP … … 56 151 ; 57 152 N CLASS,FRACT,FRDATA,FRDATES,FRIEN,FRLST,FRLIEN,FROLST,FROUT,FRPAT 58 N FRPERM,FRSTRT,FRTIEN,FRTYP,FSEQ,INC,INST,PXRMDATE ,PXRMDDOC153 N FRPERM,FRSTRT,FRTIEN,FRTYP,FSEQ,INC,INST,PXRMDATE 59 154 N RBDT,REDT,RRIEN,RSDATA,RSDATES,SEQ,SUB 60 155 ;Get class from extract parameter … … 62 157 ;Otherwise default to local 63 158 I $G(CLASS)="" S CLASS="L" 64 ;PXRMDDOC=1 save list rule evaluation dates in ^TMP("PXRMDDOC",$J)65 S PXRMDDOC=166 K ^TMP("PXRMDDOC",$J)67 159 ;Get each finding rule in sequence 68 S SEQ="",INC=0 ,INST=0160 S SEQ="",INC=0 69 161 F S SEQ=$O(^PXRM(810.4,RULESET,30,"B",SEQ)) Q:'SEQ D 70 162 .;Save first sequence as default … … 84 176 .;Get Extract Patient List name for patient list rule 85 177 .I FRTYP=5 S FRLST=$P($G(^PXRM(810.4,FRIEN,1)),U) D Q:FRLST="" 86 ..I +EXTITR>0 S FRLST=FRLST_"/"_EXTITR87 178 ..S FROLST=$P(FRDATA,U,8) 88 179 ..I +FROLST>0 S FRLST=$P($G(^PXRMXP(810.5,FROLST,0)),U) … … 106 197 .K ^TMP($J,PNODE) 107 198 .;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) 109 200 .;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) 111 202 .;Patient list finding rules 112 .I FRTYP=5 D PATS(FR ACT,FROUT,PNODE,FRLST)203 .I FRTYP=5 D PATS(FRLST) 113 204 .;Clear results file 114 205 .K ^TMP($J,PNODE) … … 118 209 ..N FRPIEN 119 210 ..;Get patient list IEN or create new patient list 120 ..S FRPIEN=$$CRLST ^PXRMRUL1(FRPERM,CLASS) Q:'FRPIEN211 ..S FRPIEN=$$CRLST(FRPERM,CLASS) Q:'FRPIEN 121 212 ..;Update patient list 122 ..D UPDLST(FROUT,FRPIEN,PAR,RULESET,INST ,INDP,INTP)213 ..D UPDLST(FROUT,FRPIEN,PAR,RULESET,INST) 123 214 ; 124 215 ;Save final results to patient list 125 216 I LIST'="",FROUT'="" D 126 217 . 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) 131 219 . 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 ; 222 UPDLST(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 139 225 ;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) 145 227 ; 146 228 ;Clear existing list. 147 229 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) 148 231 ; 149 232 ;Merge ^TMP into Patient List 150 S (DECEASED,TESTP)="" 151 S (CNT,DFN)=0 233 S (CNT,DFN,INST)=0 152 234 F S DFN=$O(^TMP($J,NODE,DFN)) Q:'DFN D 153 235 .S ONODE=$G(^TMP($J,NODE,DFN,"INST")) 154 236 .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 163 238 .S ^PXRMXP(810.5,LIST,30,"B",DFN,CNT)="" 164 239 .; … … 215 290 D UPDATE^DIE("","FDA","","MSG") 216 291 ;Error 217 I $D(MSG) D ERR ^PXRMRUL1292 I $D(MSG) D ERR 218 293 ;Unlock patient list 219 D UNLOCK^PXRMRUL1 220 Q 221 ; 294 D UNLOCK 295 Q 296 ; 297 UNLOCK L -^PXRMXP(810.5,LIST) Q 298 ;
Note:
See TracChangeset
for help on using the changeset viewer.