Changeset 623 for WorldVistAEHR/trunk/r/CLINICAL_REMINDERS-PXRM/PXRMRUL1.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/PXRMRUL1.m
r613 r623 1 PXRMRUL1 ; SLC/AGP,PKR - Patient list routines. ; 03/29/2007 2 ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123 3 ; 4 ; 5 ASK(PLIEN,OPT) ;Verify patient list name 6 N X,Y,TEXT 7 K DIROUT,DIRUT,DTOUT,DUOUT 8 S DIR(0)="YA0" 9 S DIR("A")=OPT_" patient list "_$P($G(^PXRMXP(810.5,PLIEN,0)),U)_"?: " 10 S DIR("B")="N" 11 S DIR("?")="Enter Y or N. For detailed help type ??" 12 W ! 13 D ^DIR K DIR 14 I $D(DIROUT) S DTOUT=1 15 I $D(DTOUT)!($D(DUOUT)) Q 16 I $E(Y(0))="N" S DUOUT=1 Q 17 Q 18 ; 19 COPY(IENO) ;Copy patient list 20 ;Check if OK to copy 21 D ASK(IENO,"Copy") Q:$D(DUOUT)!$D(DTOUT) 22 N FDA,IENN,IND,MSG,NNAME,ODATA,OEPIEN,ONAME,ORULE,PATCREAT,TEXT,X,Y 23 ;Select list to copy to 24 S TEXT="Select PATIENT LIST name to copy to: " 25 D PLIST^PXRMLCR(.IENN,TEXT,IENO) Q:$D(DUOUT)!$D(DTOUT) Q:'IENN 26 S NNAME=$P($G(^PXRMXP(810.5,IENN,0)),U) 27 ; 28 ;Get original Patient List record 29 S ODATA=$G(^PXRMXP(810.5,IENO,0)) 30 S ONAME=$P(ODATA,U),OEPIEN=$P(ODATA,U,5),ORULE=$P(ODATA,U,6) 31 ; 32 M ^PXRMXP(810.5,IENN)=^PXRMXP(810.5,IENO) 33 D ASK^PXRMXD(.PATCREAT,"Secure list?: ",2) 34 ;Update header info 35 S TYPE=$S($G(PATCREAT)="Y":"PVT",1:"PUB") 36 S IND=IENN_"," 37 S FDA(810.5,IND,.01)=NNAME 38 S FDA(810.5,IND,.04)=$$NOW^XLFDT 39 S FDA(810.5,IND,.05)=OEPIEN 40 S FDA(810.5,IND,.06)=ORULE 41 S FDA(810.5,IND,.07)=$G(DUZ) 42 S FDA(810.5,IND,.08)=TYPE 43 D UPDATE^DIE("","FDA","","MSG") 44 ;Error 45 I $D(MSG) D ERR 46 ; 47 W !!,"Completed copy of '"_ONAME_"'" 48 W !,"into '"_NNAME_"'",! H 2 49 K ^TMP($J,"PXRMRULE") 50 Q 51 ; 52 CRLST(NAME,CLASS) ;Create new patient list 53 N IEN 54 ;Check if name exists 55 S IEN=$O(^PXRMXP(810.5,"B",NAME,"")) I IEN Q IEN 56 ;Otherwise create national entry 57 N FDA,FDAIEN,MSG 58 S FDA(810.5,"+1,",.01)=NAME 59 S FDA(810.5,"+1,",100)=CLASS 60 S FDA(810.5,"+1,",.07)=$G(DUZ) 61 ;Make stub public 62 S FDA(810.5,"+1,",.08)="PUB" 63 D UPDATE^DIE("","FDA","FDAIEN","MSG") 64 ;Error 65 I $D(MSG) Q 0 66 ;Otherwise list ien 67 Q FDAIEN(1) 68 ; 69 COUNT(NODE) ;Count the number of entries. 70 N DFN,NUM 71 S (DFN,NUM)=0 72 F S DFN=$O(^TMP($J,NODE,DFN)) Q:DFN="" S NUM=NUM+1 73 Q NUM 74 ; 75 DELETE(LIST) ;Delete Patient list 76 I '$$VEDIT^PXRMUTIL("^PXRMXP(810.5,",LIST) D Q 77 .W !!,?5,"VA- and national class patient lists may not be deleted" H 2 78 .S DUOUT=1 79 ;Check if this is the right list 80 D ASK(LIST,"Delete") Q:$D(DUOUT)!$D(DTOUT) 81 ; 82 N DA,DIK,DUOUT 83 ;Lock patient list 84 D LOCK Q:$D(DUOUT) 85 ;Kill List 86 S DA=LIST,DIK="^PXRMXP(810.5," 87 D ^DIK 88 ;Unlock patient list 89 D UNLOCK 90 Q 91 ; 92 DATECHK(DATE) ; 93 I DATE=0 Q 1 94 S DATE=$$STRREP^PXRMUTIL(DATE,"BDT","T") 95 Q $$VDT^PXRMINTR(DATE) 96 ; 97 DATES(LBBDT,LBEDT,RBDT,REDT,FARR) ;Set the dates in the finding array to 98 ;FileMan dates. 99 N FI,PXRMDATE,TBDT,TEDT 100 S FI=0 101 F S FI=+$O(FARR(20,FI)) Q:FI=0 D 102 . S TBDT=$P(FARR(20,FI,0),U,8),TEDT=$P(FARR(20,FI,0),U,11) 103 . I TBDT="",TEDT="" D 104 .. S $P(FARR(20,FI,0),U,8)=RBDT,$P(FARR(20,FI,0),U,11)=REDT 105 . E D 106 .. S PXRMDATE=$S(TBDT["BDT":LBBDT,1:LBEDT) 107 .. S TBDT=$S(TBDT="":0,TBDT=0:0,TBDT="BDT":LBBDT,1:$$CTFMD^PXRMDATE(TBDT)) 108 .. S PXRMDATE=$S(TEDT["BDT":LBBDT,1:LBEDT) 109 .. S TEDT=$S(TEDT="":"T",TEDT=0:"T",TEDT="BDT":LBBDT,1:TEDT) 110 .. S TEDT=$$CTFMD^PXRMDATE(TEDT) 111 .. S $P(FARR(20,FI,0),U,8)=TBDT,$P(FARR(20,FI,0),U,11)=TEDT 112 Q 113 ; 114 ERR ;Error Handler 115 N ERROR,IC,REF 116 S ERROR(1)="Unable to build patient list : " 117 S ERROR(2)=NAME 118 S ERROR(3)="Error in UPDATE^DIE, needs further investigation" 119 ; Move MSG into Error 120 S REF="MSG" 121 F IC=4:1 S REF=$Q(@REF) Q:REF="" S ERROR(IC)=REF_"="_@REF 122 ;Screen message 123 D EN^DDIOL(.ERROR) 124 Q 125 ; 126 INSERT(FROUT,DFN,TNAME,TFIEV,RSTOP) ;Save patient data. 127 I TFIEV(1)=0 Q 128 N DATA,DONE,IND,LEN,REF,ROOT,START,SUB,TEMP 129 S REF="TFIEV(1,""CSUB"")" 130 S PROOT=$P(REF,")",1) 131 ;Build the root so we can tell when we are done. 132 S TEMP=$NA(@REF) 133 S ROOT=$P(TEMP,")",1) 134 S REF=$Q(@REF) 135 I REF'[ROOT Q 136 S DONE=0 137 F Q:(REF="")!(DONE) D 138 . S START=$F(REF,ROOT) 139 . S LEN=$L(REF)-1 140 . S IND=$E(REF,START,LEN) 141 . S DATA(TNAME_IND)=@REF 142 . S REF=$Q(@REF) 143 . I REF'[ROOT S DONE=1 144 I $D(DATA) M ^TMP($J,FROUT,DFN,"DATA")=DATA 145 Q 146 ; 147 INST(DFN) ;Get the PCMM Institution. 148 N DATE,INST 149 ;Check PCMM 150 S DATE=$S($G(PXRMDATE)'="":$P(PXRMDATE,"."),1:DT) 151 ;DBIA #1916 152 S INST=$P($$INSTPCTM^SCAPMC(DFN,DATE),U,3,4) 153 Q INST 154 ; 155 LOCK L +^PXRMXP(810.5,LIST):0 156 E W !!?5,"Another user is using this patient list" S DUOUT=1 157 Q 158 ; 159 LOGOP(LIST1,LIST2,LOGOP) ;Given LIST1 and LIST2 apply the logical 160 ;operator LOGOP to generate a new list and return it in LIST1 161 N DFN1,DFN2 162 I LOGOP="&" D Q 163 . S DFN1="" 164 . F S DFN1=$O(^TMP($J,LIST1,DFN1)) Q:DFN1="" D 165 .. I $D(^TMP($J,LIST2,DFN1)) M ^TMP($J,LIST1,DFN1)=^TMP($J,LIST2,DFN1) Q 166 .. K ^TMP($J,LIST1,DFN1) 167 ; 168 ;"~" represents "&'". 169 I LOGOP="~" D Q 170 . S DFN1="" 171 . F S DFN1=$O(^TMP($J,LIST1,DFN1)) Q:DFN1="" D 172 .. I $D(^TMP($J,LIST2,DFN1)) K ^TMP($J,LIST1,DFN1) 173 ; 174 I LOGOP="!" D 175 . S DFN2="" 176 . F S DFN2=$O(^TMP($J,LIST2,DFN2)) Q:DFN2="" D 177 .. M ^TMP($J,LIST1,DFN2)=^TMP($J,LIST2,DFN2) 178 Q 179 ; 180 REM(FRACT,RIEN,LBBDT,LBEDT,RSTART,RSTOP,PNODE) ;Process reminder finding rule 181 N DEFFARR,PXRMDATE 182 D DEF^PXRMLDR(RIEN,.DEFARR) 183 D DATES(LBBDT,LBEDT,RSTART,RSTOP,.DEFARR) 184 S PXRMDATE=RSTOP 185 D BLDPLST^PXRMPLST(.DEFARR,PNODE,1) 186 ;Remove, Select or Add Findings operations 187 I FRACT="A" D LOGOP(FROUT,PNODE,"!") Q 188 I FRACT="D" D LOGOP(FROUT,PNODE,"~") Q 189 I FRACT="S" D LOGOP(FROUT,PNODE,"&") Q 190 Q 191 ; 192 TERM(FRACT,FRTIEN,LBBDT,LBEDT,RSTART,RSTOP,PNODE,INST) ;Process TERM finding 193 ;rules 194 N FINDPA,FINDING,FNAME,PLIST,PXRMDATE,PXRMDEBG 195 N TERMARR,TFIEV,TNAME 196 ;Get term definition array 197 D TERM^PXRMLDR(FRTIEN,.TERMARR) 198 S TNAME=$P(TERMARR(0),U,1) 199 S INST=$S(FRACT'="F":0,TNAME="VA-PCMM INSTITUTION":1,TNAME="VA-IHD STATION CODE":1,1:0) 200 ;Set begin and end dates in the term. 201 D DATES(LBBDT,LBEDT,RSTART,RSTOP,.TERMARR) 202 S $P(FINDPA(0),U,8)=RSTART,$P(FINDPA(0),U,11)=RSTOP,PXRMDATE=RSTOP 203 ; 204 ;Add operation 205 I FRACT="A" D Q 206 .;Process term for date range 207 .D EVALPL^PXRMTERL(.FINDPA,.TERMARR,PNODE) 208 .;Merge lists if operation is add 209 .M ^TMP($J,FROUT)=^TMP($J,PNODE,1) 210 ;Remove, Select or Insert Findings operations 211 I FRACT="F" S PXRMDEBG=1 212 S DFN=0 213 F S DFN=$O(^TMP($J,FROUT,DFN)) Q:'DFN D 214 .I INST S ^TMP($J,FROUT,DFN,"INST")=$$INST(DFN) Q 215 .;Evaluate term 216 .K TFIEV D IEVALTER^PXRMTERM(DFN,.FINDPA,.TERMARR,1,.TFIEV) 217 .;Delete any ^TMP patient in PLIST if action is remove 218 .I FRACT="R",TFIEV(1) K ^TMP($J,FROUT,DFN) Q 219 .;Delete any ^TMP patient not in PLIST if action is select 220 .I FRACT="S",'TFIEV(1) K ^TMP($J,FROUT,DFN) Q 221 .I FRACT="F",TFIEV(1) D 222 .. S FINDING=TFIEV(1,"FINDING") 223 .. I '$D(FNAME(FINDING)) S FNAME(FINDING)=$$GETFNAME^PXRMDATA(FINDING) 224 .. S TFIEV(1,"CSUB","FINDING NAME")=FNAME(FINDING) 225 .. D INSERT(FROUT,DFN,TNAME,.TFIEV,RSTOP) 226 Q 227 ; 228 UNLOCK L -^PXRMXP(810.5,LIST) Q 229 ; 1 PXRMRUL1 ; SLC/AGP,PKR - Patient list routines. ; 08/11/2006 2 ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21 3 ; 4 DATECHK(DATE) ; 5 I DATE=0 Q 1 6 S DATE=$$STRREP^PXRMUTIL(DATE,"BDT","T") 7 Q $$VDT^PXRMINTR(DATE) 8 ; 9 INSERT(FROUT,DFN,TNAME,TFIEV,RSTOP) ;Save patient data. 10 I TFIEV(1)=0 Q 11 N DATA,DONE,IND,LEN,REF,ROOT,START,SUB,TEMP 12 S REF="TFIEV(1,""CSUB"")" 13 S PROOT=$P(REF,")",1) 14 ;Build the root so we can tell when we are done. 15 S TEMP=$NA(@REF) 16 S ROOT=$P(TEMP,")",1) 17 S REF=$Q(@REF) 18 I REF'[ROOT Q 19 S DONE=0 20 F Q:(REF="")!(DONE) D 21 . S START=$F(REF,ROOT) 22 . S LEN=$L(REF)-1 23 . S IND=$E(REF,START,LEN) 24 . S DATA(TNAME_IND)=@REF 25 . S REF=$Q(@REF) 26 . I REF'[ROOT S DONE=1 27 I $D(DATA) M ^TMP($J,FROUT,DFN,"DATA")=DATA 28 Q 29 ; 30 INST(DFN) ;Get the PCMM Institution. 31 N DATE,INST 32 ;Check PCMM 33 S DATE=$S($G(PXRMDATE)'="":$P(PXRMDATE,"."),1:DT) 34 ;DBIA #1916 35 S INST=$P($$INSTPCTM^SCAPMC(DFN,DATE),U,3,4) 36 Q INST 37 ; 38 LOGOP(LIST1,LIST2,LOGOP) ;Given LIST1 and LIST2 apply the logical 39 ;operator LOGOP to generate a new list and return it in LIST1 40 N DFN1,DFN2 41 I LOGOP="&" D Q 42 . S DFN1="" 43 . F S DFN1=$O(^TMP($J,LIST1,DFN1)) Q:DFN1="" D 44 .. I $D(^TMP($J,LIST2,DFN1)) M ^TMP($J,LIST1,DFN1)=^TMP($J,LIST2,DFN1) Q 45 .. K ^TMP($J,LIST1,DFN1) 46 ; 47 ;"~" represents "&'". 48 I LOGOP="~" D Q 49 . S DFN1="" 50 . F S DFN1=$O(^TMP($J,LIST1,DFN1)) Q:DFN1="" D 51 .. I $D(^TMP($J,LIST2,DFN1)) K ^TMP($J,LIST1,DFN1) 52 ; 53 I LOGOP="!" D 54 . S DFN2="" 55 . F S DFN2=$O(^TMP($J,LIST2,DFN2)) Q:DFN2="" D 56 .. M ^TMP($J,LIST1,DFN2)=^TMP($J,LIST2,DFN2) 57 Q 58 ; 59 REM(FRACT,RIEN,RSTART,RSTOP,PNODE) ;Process reminder finding rule 60 D BLDPLST^PXRMPLST(RIEN,PNODE,1,RSTOP) 61 ;Remove, Select or Add Findings operations 62 I FRACT="A" D LOGOP(FROUT,PNODE,"!") Q 63 I FRACT="D" D LOGOP(FROUT,PNODE,"~") Q 64 I FRACT="S" D LOGOP(FROUT,PNODE,"&") Q 65 Q 66 ; 67 TERM(FRACT,FRTIEN,RSTART,RSTOP,PNODE,INST) ;Process TERM finding rule 68 N FINDPA,FINDING,FNAME,PLIST,PXRMDATE,PXRMDEBG,TERMARR,TFIEV,TNAME 69 ;Get term definition array 70 D TERM^PXRMLDR(FRTIEN,.TERMARR) 71 S TNAME=$P(TERMARR(0),U,1) 72 S INST=$S(FRACT'="F":0,TNAME="VA-PCMM INSTITUTION":1,TNAME="VA-IHD STATION CODE":1,1:0) 73 ;Set start and end dates 74 S $P(FINDPA(0),U,8)=RSTART,$P(FINDPA(0),U,11)=RSTOP,PXRMDATE=RSTOP 75 ; 76 ;Add operation 77 I FRACT="A" D Q 78 .;Process term for date range 79 .D EVALPL^PXRMTERM(.FINDPA,.TERMARR,PNODE) 80 .;Merge lists if operation is add 81 .M ^TMP($J,FROUT)=^TMP($J,PNODE,1) 82 ;Remove, Select or Insert Findings operations 83 I FRACT="F" S PXRMDEBG=1 84 S DFN=0 85 F S DFN=$O(^TMP($J,FROUT,DFN)) Q:'DFN D 86 .I INST S ^TMP($J,FROUT,DFN,"INST")=$$INST(DFN) Q 87 .;Evaluate term 88 .K TFIEV D IEVALTER^PXRMTERM(DFN,.FINDPA,.TERMARR,1,.TFIEV) 89 .;Delete any ^TMP patient in PLIST if action is remove 90 .I FRACT="R",TFIEV(1) K ^TMP($J,FROUT,DFN) Q 91 .;Delete any ^TMP patient not in PLIST if action is select 92 .I FRACT="S",'TFIEV(1) K ^TMP($J,FROUT,DFN) Q 93 .I FRACT="F",TFIEV(1) D 94 .. S FINDING=TFIEV(1,"FINDING") 95 .. I '$D(FNAME(FINDING)) S FNAME(FINDING)=$$GETFNAME^PXRMDATA(FINDING) 96 .. S TFIEV(1,"CSUB","FINDING NAME")=FNAME(FINDING) 97 .. D INSERT(FROUT,DFN,TNAME,.TFIEV,RSTOP) 98 Q 99 ;
Note:
See TracChangeset
for help on using the changeset viewer.