Changeset 623 for WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMRULE.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/PXRMRULE.m
r613 r623 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 3 ; 4 ; Called from PXRM PATIENT LIST CREATE protocol 5 ; 6 CLEAR(RULE,NODE) ;Clear workfile entries 7 N SEQ 8 S SEQ="" 9 F S SEQ=$O(^PXRM(810.4,RULE,30,"B",SEQ)) Q:'SEQ D 10 .K ^TMP($J,NODE_SEQ) 11 ;clear FDA array 12 K ^TMP($J,"PXRMFDA") 13 Q 14 ; 15 INTR ;Input transform for #810.4 fields 16 Q 17 ; 18 LOAD(NODE,LIEN) ;Load Patient List 19 N DATA,DFN,SUB 20 S SUB=0 21 F S SUB=$O(^PXRMXP(810.5,LIEN,30,SUB)) Q:'SUB D 22 .S DATA=$G(^PXRMXP(810.5,LIEN,30,SUB,0)),DFN=$P(DATA,U) Q:'DFN 23 .;Store the patient IEN and institution in ^TMP 24 .S ^TMP($J,NODE,DFN)=$P(DATA,U,2)_U_$P($G(DATA),U,3)_U_$P($G(DATA),U,4) 25 Q 26 ; 27 PATS(FRACT,FROUT,PNODE,LIST) ;Process Patient List finding rule 28 ; 29 N LIEN,LUVALUE 30 ;Insert year and period into extract list name 31 I YEAR]"",LIST["yyyy" S LIST=$P(LIST,"yyyy")_YEAR_$P(LIST,"yyyy",2) 32 I PERIOD]"",LIST["nn" S LIST=$P(LIST,"nn")_$E(PERIOD,2,10)_$P(LIST,"nn",2) 33 ; 34 S LUVALUE(1)=LIST 35 S LIEN=+$$FIND1^DIC(810.5,"","KUX",.LUVALUE) Q:'LIEN 36 ; 37 ;Add operation Load list 38 I FRACT="A" D LOAD(FROUT,LIEN) Q 39 ; 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) ; 53 ;Process rule set 54 ;Clear ^TMP 55 D CLEAR(RULESET,NODE) 56 ; 57 N CLASS,FRACT,FRDATA,FRDATES,FRIEN,FRLST,FRLIEN,FROLST,FROUT,FRPAT 58 N FRPERM,FRSTRT,FRTIEN,FRTYP,FSEQ,INC,INST,PXRMDATE,PXRMDDOC 59 N RBDT,REDT,RRIEN,RSDATA,RSDATES,SEQ,SUB 60 ;Get class from extract parameter 61 I PAR S CLASS=$P($G(^PXRM(810.2,PAR,100)),U) 62 ;Otherwise default to local 63 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) 67 ;Get each finding rule in sequence 68 S SEQ="",INC=0,INST=0 69 F S SEQ=$O(^PXRM(810.4,RULESET,30,"B",SEQ)) Q:'SEQ D 70 .;Save first sequence as default 71 .I INC=0 S INC=1,FSEQ=SEQ 72 .S SUB=$O(^PXRM(810.4,RULESET,30,"B",SEQ,"")) Q:'SUB 73 .S RSDATA=$G(^PXRM(810.4,RULESET,30,SUB,0)) Q:RSDATA="" 74 .S RSDATES=$G(^PXRM(810.4,RULESET,30,SUB,1)) 75 .;Finding rule ien and action 76 .S FRIEN=$P(RSDATA,U,2),FRACT=$P(RSDATA,U,3) Q:'FRIEN Q:FRACT="" 77 .;Check if entry is a finding rule (not a set or reminder rule) 78 .S FRDATA=$G(^PXRM(810.4,FRIEN,0)),FRTYP=$P(FRDATA,U,3) Q:FRTYP=3 79 .S FRDATES=$P(FRDATA,U,4,5) 80 .;Get term IEN for finding rule 81 .I FRTYP=1 S FRTIEN=$P(FRDATA,U,7) Q:'FRTIEN 82 .;Get Reminder definition IEN for Reminder rule 83 .I FRTYP=2 S RRIEN=$P(FRDATA,U,10) Q:'RRIEN 84 .;Get Extract Patient List name for patient list rule 85 .I FRTYP=5 S FRLST=$P($G(^PXRM(810.4,FRIEN,1)),U) D Q:FRLST="" 86 ..I +EXTITR>0 S FRLST=FRLST_"/"_EXTITR 87 ..S FROLST=$P(FRDATA,U,8) 88 ..I +FROLST>0 S FRLST=$P($G(^PXRMXP(810.5,FROLST,0)),U) 89 .;Determine RBDT and REDT 90 .D RDATES^PXRMEUT1(RSDATES,FRDATES,LBBDT,LBEDT,.RBDT,.REDT) 91 .S PXRMDATE=LBEDT 92 .;Get start sequence or start patient list 93 .S FRSTRT=$P(RSDATA,U,4),FRPAT=$P(RSDATA,U,5) 94 .;If sequence is defined use it 95 .I FRSTRT S FROUT=NODE_FRSTRT 96 .;If neither exist use first as default 97 .I FRSTRT="",FRPAT="" S FROUT=NODE_FSEQ 98 .;If start is patient list load patient list into workfile 99 .I FRSTRT="",FRPAT]"" S FROUT=NODE_SEQ D LOAD(FROUT,FRPAT) 100 .;Name of permanent list 101 .S FRPERM=$P(RSDATA,U,6) 102 .; 103 .;Build patient list in TMP 104 .N DFN,PNODE,TLIST 105 .S PNODE="PXRMEVAL" 106 .K ^TMP($J,PNODE) 107 .;Term finding rules 108 .I FRTYP=1 D TERM^PXRMRUL1(FRACT,FRTIEN,LBBDT,LBEDT,RBDT,REDT,PNODE,.INST) 109 .;Reminder Definition List Rule 110 .I FRTYP=2 D REM^PXRMRUL1(FRACT,RRIEN,LBBDT,LBEDT,RBDT,REDT,PNODE) 111 .;Patient list finding rules 112 .I FRTYP=5 D PATS(FRACT,FROUT,PNODE,FRLST) 113 .;Clear results file 114 .K ^TMP($J,PNODE) 115 .; 116 .;Build permanent list if required 117 .I FRPERM]"" D 118 ..N FRPIEN 119 ..;Get patient list IEN or create new patient list 120 ..S FRPIEN=$$CRLST^PXRMRUL1(FRPERM,CLASS) Q:'FRPIEN 121 ..;Update patient list 122 ..D UPDLST(FROUT,FRPIEN,PAR,RULESET,INST,INDP,INTP) 123 ; 124 ;Save final results to patient list 125 I LIST'="",FROUT'="" D 126 . 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 131 . 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 139 ;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 145 ; 146 ;Clear existing list. 147 K ^PXRMXP(810.5,LIST,30),^PXRMXP(810.5,LIST,35),^PXRMXP(810.5,LIST,45),^PXRMXP(810.5,LIST,200) 148 ; 149 ;Merge ^TMP into Patient List 150 S (DECEASED,TESTP)="" 151 S (CNT,DFN)=0 152 F S DFN=$O(^TMP($J,NODE,DFN)) Q:'DFN D 153 .S ONODE=$G(^TMP($J,NODE,DFN,"INST")) 154 .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 163 .S ^PXRMXP(810.5,LIST,30,"B",DFN,CNT)="" 164 .; 165 .;Save the reminder evaluation information only from Reports 166 .I $D(^TMP($J,NODE,DFN,"REM"))>0 D 167 ..S (RIEN,RCNT,RNCNT)=0 168 ..F S RIEN=$O(^TMP($J,NODE,DFN,"REM",RIEN)) Q:RIEN'>0 D 169 ...S RNAMEL(RIEN)="" 170 ...S VALUE=^TMP($J,NODE,DFN,"REM",RIEN) 171 ...S RCNT=RCNT+1 172 ...S ^PXRMXP(810.5,LIST,30,CNT,"REM",RCNT,0)=VALUE 173 ...S ^PXRMXP(810.5,LIST,30,CNT,"REM","B",RIEN,RCNT)="" 174 ..S ^PXRMXP(810.5,LIST,30,CNT,1,0)=U_"810.532A"_U_RCNT_U_RCNT 175 .; 176 .I '$D(^TMP($J,NODE,DFN,"DATA")) Q 177 .S DCNT=0,DNAME="" 178 .F S DNAME=$O(^TMP($J,NODE,DFN,"DATA",DNAME)) Q:DNAME="" D 179 ..S DNAMEL(DNAME)="" 180 ..S VALUE=^TMP($J,NODE,DFN,"DATA",DNAME) 181 ..S DCNT=DCNT+1 182 ..S ^PXRMXP(810.5,LIST,30,CNT,"DATA",DCNT,0)=DNAME_U_VALUE 183 ..S ^PXRMXP(810.5,LIST,30,CNT,"DATA","B",DNAME,DCNT)="" 184 .S ^PXRMXP(810.5,LIST,30,CNT,1,0)=U_"810.531A"_U_DCNT_U_DCNT 185 S ^PXRMXP(810.5,LIST,30,0)=U_"810.53P"_U_CNT_U_CNT 186 ; 187 ;Save the reminder information 188 S RNCNT=0,RIEN=0 189 F S RIEN=$O(RNAMEL(RIEN)) Q:RIEN'>0 D 190 .S RNCNT=RNCNT+1 191 .S ^PXRMXP(810.5,LIST,45,RCNT,0)=RIEN 192 .S ^PXRMXP(810.5,LIST,45,"B",RIEN,RNCNT)="" 193 I RNCNT>0 S ^PXRMXP(810.5,LIST,45,0)=U_"810.545P"_U_RNCNT_U_RNCNT 194 ; 195 ;Save the data types. 196 S DCNT=0,DNAME="" 197 F S DNAME=$O(DNAMEL(DNAME)) Q:DNAME="" D 198 .S DCNT=DCNT+1 199 .S ^PXRMXP(810.5,LIST,35,DCNT,0)=DNAME 200 .S ^PXRMXP(810.5,LIST,35,"B",DNAME,DCNT)="" 201 I DCNT>0 S ^PXRMXP(810.5,LIST,35,0)=U_"810.535A"_U_DCNT_U_DCNT 202 S ^PXRMXP(810.5,LIST,30,0)=U_"810.53P"_U_CNT_U_CNT 203 ; 204 ;Update header info 205 S TYPE=$S($G(PATCREAT)="Y":"PVT",1:"PUB") 206 K PATCREAT 207 S FDA(810.5,"?+1,",.01)=NAME 208 S FDA(810.5,"?+1,",.04)=$$NOW^XLFDT 209 S FDA(810.5,"?+1,",.05)=EPIEN 210 S FDA(810.5,"?+1,",.06)=RULE 211 S FDA(810.5,"?+1,",.07)=$G(DUZ) 212 S FDA(810.5,"?+1,",.08)=TYPE 213 I $G(INST)=1 S FDA(810.5,"?+1,",.1)=1 214 S FDA(810.5,"?+1,",50)=$S($G(PLISTPUG)="Y":1,1:0) 215 D UPDATE^DIE("","FDA","","MSG") 216 ;Error 217 I $D(MSG) D ERR^PXRMRUL1 218 ;Unlock patient list 219 D UNLOCK^PXRMRUL1 220 Q 221 ; 1 PXRMRULE ; SLC/PJH - Build Patient list from Rule Set ;08/11/2006 2 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21 3 ; 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 19 ; 20 CLEAR(RULE,NODE) ;Clear workfile entries 21 N SEQ 22 S SEQ="" 23 F S SEQ=$O(^PXRM(810.4,RULE,30,"B",SEQ)) Q:'SEQ D 24 .K ^TMP($J,NODE_SEQ) 25 ;clear FDA array 26 K ^TMP($J,"PXRMFDA") 27 Q 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 ; 105 INTR ;Input transform for #810.4 fields 106 Q 107 ; 108 LOAD(NODE,LIEN) ;Load Patient List 109 N DATA,DFN,SUB 110 S SUB=0 111 F S SUB=$O(^PXRMXP(810.5,LIEN,30,SUB)) Q:'SUB D 112 .S DATA=$G(^PXRMXP(810.5,LIEN,30,SUB,0)),DFN=$P(DATA,U) Q:'DFN 113 .;Store the patient IEN and institution in ^TMP 114 .S ^TMP($J,NODE,DFN)=$P(DATA,U,2)_U_$P($G(DATA),U,3)_U_$P($G(DATA),U,4) 115 Q 116 ; 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 122 ; 123 N LIEN,LUVALUE 124 ;Insert year and period into extract list name 125 I YEAR]"",LIST["yyyy" S LIST=$P(LIST,"yyyy")_YEAR_$P(LIST,"yyyy",2) 126 I PERIOD]"",LIST["nn" S LIST=$P(LIST,"nn")_$E(PERIOD,2,10)_$P(LIST,"nn",2) 127 ; 128 S LUVALUE(1)=LIST 129 S LIEN=+$$FIND1^DIC(810.5,"","KUX",.LUVALUE) Q:'LIEN 130 ; 131 ;Add operation Load list 132 I FRACT="A" D LOAD(FROUT,LIEN) Q 133 ; 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) ; 148 ;Process rule set 149 ;Clear ^TMP 150 D CLEAR(RULESET,NODE) 151 ; 152 N CLASS,FRACT,FRDATA,FRDATES,FRIEN,FRLST,FRLIEN,FROLST,FROUT,FRPAT 153 N FRPERM,FRSTRT,FRTIEN,FRTYP,FSEQ,INC,INST,PXRMDATE 154 N RBDT,REDT,RRIEN,RSDATA,RSDATES,SEQ,SUB 155 ;Get class from extract parameter 156 I PAR S CLASS=$P($G(^PXRM(810.2,PAR,100)),U) 157 ;Otherwise default to local 158 I $G(CLASS)="" S CLASS="L" 159 ;Get each finding rule in sequence 160 S SEQ="",INC=0 161 F S SEQ=$O(^PXRM(810.4,RULESET,30,"B",SEQ)) Q:'SEQ D 162 .;Save first sequence as default 163 .I INC=0 S INC=1,FSEQ=SEQ 164 .S SUB=$O(^PXRM(810.4,RULESET,30,"B",SEQ,"")) Q:'SUB 165 .S RSDATA=$G(^PXRM(810.4,RULESET,30,SUB,0)) Q:RSDATA="" 166 .S RSDATES=$G(^PXRM(810.4,RULESET,30,SUB,1)) 167 .;Finding rule ien and action 168 .S FRIEN=$P(RSDATA,U,2),FRACT=$P(RSDATA,U,3) Q:'FRIEN Q:FRACT="" 169 .;Check if entry is a finding rule (not a set or reminder rule) 170 .S FRDATA=$G(^PXRM(810.4,FRIEN,0)),FRTYP=$P(FRDATA,U,3) Q:FRTYP=3 171 .S FRDATES=$P(FRDATA,U,4,5) 172 .;Get term IEN for finding rule 173 .I FRTYP=1 S FRTIEN=$P(FRDATA,U,7) Q:'FRTIEN 174 .;Get Reminder definition IEN for Reminder rule 175 .I FRTYP=2 S RRIEN=$P(FRDATA,U,10) Q:'RRIEN 176 .;Get Extract Patient List name for patient list rule 177 .I FRTYP=5 S FRLST=$P($G(^PXRM(810.4,FRIEN,1)),U) D Q:FRLST="" 178 ..S FROLST=$P(FRDATA,U,8) 179 ..I +FROLST>0 S FRLST=$P($G(^PXRMXP(810.5,FROLST,0)),U) 180 .;Determine RBDT and REDT 181 .D RDATES^PXRMEUT1(RSDATES,FRDATES,LBBDT,LBEDT,.RBDT,.REDT) 182 .S PXRMDATE=LBEDT 183 .;Get start sequence or start patient list 184 .S FRSTRT=$P(RSDATA,U,4),FRPAT=$P(RSDATA,U,5) 185 .;If sequence is defined use it 186 .I FRSTRT S FROUT=NODE_FRSTRT 187 .;If neither exist use first as default 188 .I FRSTRT="",FRPAT="" S FROUT=NODE_FSEQ 189 .;If start is patient list load patient list into workfile 190 .I FRSTRT="",FRPAT]"" S FROUT=NODE_SEQ D LOAD(FROUT,FRPAT) 191 .;Name of permanent list 192 .S FRPERM=$P(RSDATA,U,6) 193 .; 194 .;Build patient list in TMP 195 .N DFN,PNODE,TLIST 196 .S PNODE="PXRMEVAL" 197 .K ^TMP($J,PNODE) 198 .;Term finding rules 199 .I FRTYP=1 D TERM^PXRMRUL1(FRACT,FRTIEN,RBDT,REDT,PNODE,.INST) 200 .;Reminder Definition List Rule 201 .I FRTYP=2 D REM^PXRMRUL1(FRACT,RRIEN,RBDT,REDT,PNODE) 202 .;Patient list finding rules 203 .I FRTYP=5 D PATS(FRLST) 204 .;Clear results file 205 .K ^TMP($J,PNODE) 206 .; 207 .;Build permanent list if required 208 .I FRPERM]"" D 209 ..N FRPIEN 210 ..;Get patient list IEN or create new patient list 211 ..S FRPIEN=$$CRLST(FRPERM,CLASS) Q:'FRPIEN 212 ..;Update patient list 213 ..D UPDLST(FROUT,FRPIEN,PAR,RULESET,INST) 214 ; 215 ;Save final results to patient list 216 I LIST'="",FROUT'="" D 217 . D RMPAT^PXRMEUT(FROUT,INDP,INTP) 218 . D UPDLST(FROUT,LIST,PAR,RULESET,INST) 219 . D DOCUMENT^PXRMEUT(LIST,RULESET,INDP,INTP,LBBDT,LBEDT) 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 225 ;Lock patient list 226 D LOCK Q:$D(DUOUT) 227 ; 228 ;Clear existing list. 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) 231 ; 232 ;Merge ^TMP into Patient List 233 S (CNT,DFN,INST)=0 234 F S DFN=$O(^TMP($J,NODE,DFN)) Q:'DFN D 235 .S ONODE=$G(^TMP($J,NODE,DFN,"INST")) 236 .S INSTNUM=$P(ONODE,U,1),INSTNAM=$P(ONODE,U,2) 237 .S CNT=CNT+1,^PXRMXP(810.5,LIST,30,CNT,0)=DFN_U_INSTNUM_U_INSTNAM 238 .S ^PXRMXP(810.5,LIST,30,"B",DFN,CNT)="" 239 .; 240 .;Save the reminder evaluation information only from Reports 241 .I $D(^TMP($J,NODE,DFN,"REM"))>0 D 242 ..S (RIEN,RCNT,RNCNT)=0 243 ..F S RIEN=$O(^TMP($J,NODE,DFN,"REM",RIEN)) Q:RIEN'>0 D 244 ...S RNAMEL(RIEN)="" 245 ...S VALUE=^TMP($J,NODE,DFN,"REM",RIEN) 246 ...S RCNT=RCNT+1 247 ...S ^PXRMXP(810.5,LIST,30,CNT,"REM",RCNT,0)=VALUE 248 ...S ^PXRMXP(810.5,LIST,30,CNT,"REM","B",RIEN,RCNT)="" 249 ..S ^PXRMXP(810.5,LIST,30,CNT,1,0)=U_"810.532A"_U_RCNT_U_RCNT 250 .; 251 .I '$D(^TMP($J,NODE,DFN,"DATA")) Q 252 .S DCNT=0,DNAME="" 253 .F S DNAME=$O(^TMP($J,NODE,DFN,"DATA",DNAME)) Q:DNAME="" D 254 ..S DNAMEL(DNAME)="" 255 ..S VALUE=^TMP($J,NODE,DFN,"DATA",DNAME) 256 ..S DCNT=DCNT+1 257 ..S ^PXRMXP(810.5,LIST,30,CNT,"DATA",DCNT,0)=DNAME_U_VALUE 258 ..S ^PXRMXP(810.5,LIST,30,CNT,"DATA","B",DNAME,DCNT)="" 259 .S ^PXRMXP(810.5,LIST,30,CNT,1,0)=U_"810.531A"_U_DCNT_U_DCNT 260 S ^PXRMXP(810.5,LIST,30,0)=U_"810.53P"_U_CNT_U_CNT 261 ; 262 ;Save the reminder information 263 S RNCNT=0,RIEN=0 264 F S RIEN=$O(RNAMEL(RIEN)) Q:RIEN'>0 D 265 .S RNCNT=RNCNT+1 266 .S ^PXRMXP(810.5,LIST,45,RCNT,0)=RIEN 267 .S ^PXRMXP(810.5,LIST,45,"B",RIEN,RNCNT)="" 268 I RNCNT>0 S ^PXRMXP(810.5,LIST,45,0)=U_"810.545P"_U_RNCNT_U_RNCNT 269 ; 270 ;Save the data types. 271 S DCNT=0,DNAME="" 272 F S DNAME=$O(DNAMEL(DNAME)) Q:DNAME="" D 273 .S DCNT=DCNT+1 274 .S ^PXRMXP(810.5,LIST,35,DCNT,0)=DNAME 275 .S ^PXRMXP(810.5,LIST,35,"B",DNAME,DCNT)="" 276 I DCNT>0 S ^PXRMXP(810.5,LIST,35,0)=U_"810.535A"_U_DCNT_U_DCNT 277 S ^PXRMXP(810.5,LIST,30,0)=U_"810.53P"_U_CNT_U_CNT 278 ; 279 ;Update header info 280 S TYPE=$S($G(PATCREAT)="Y":"PVT",1:"PUB") 281 K PATCREAT 282 S FDA(810.5,"?+1,",.01)=NAME 283 S FDA(810.5,"?+1,",.04)=$$NOW^XLFDT 284 S FDA(810.5,"?+1,",.05)=EPIEN 285 S FDA(810.5,"?+1,",.06)=RULE 286 S FDA(810.5,"?+1,",.07)=$G(DUZ) 287 S FDA(810.5,"?+1,",.08)=TYPE 288 I $G(INST)=1 S FDA(810.5,"?+1,",.1)=1 289 S FDA(810.5,"?+1,",50)=$S($G(PLISTPUG)="Y":1,1:0) 290 D UPDATE^DIE("","FDA","","MSG") 291 ;Error 292 I $D(MSG) D ERR 293 ;Unlock patient list 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.