| 1 | PXRMLCR ; SLC/PJH - Create Patient List from individual finding rule; 10/18/2007 | 
|---|
| 2 | ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Called from PXRM PATIENT LIST CREATE protocol | 
|---|
| 5 | ; | 
|---|
| 6 | START N BEG,DUOUT,DTOUT,END,LIT,PXRMDPAT,PXRMLIST,PXRMNODE,PXRMRULE,PXRMTPAT | 
|---|
| 7 | N TEXT | 
|---|
| 8 | ;Initialise | 
|---|
| 9 | K ^TMP("PXRMLCR",$J) | 
|---|
| 10 | ;Node for ^TMP lists created in PXRMRULE | 
|---|
| 11 | S PXRMNODE="PXRMRULE",LIT="Patient List" | 
|---|
| 12 | ;Reset screen mode | 
|---|
| 13 | W IORESET | 
|---|
| 14 | ;Set prompt text | 
|---|
| 15 | S TEXT="Select PATIENT LIST name: " | 
|---|
| 16 | ;Select Patient List | 
|---|
| 17 | LIST D PLIST(.PXRMLIST,TEXT,"") I $D(DUOUT)!$D(DTOUT) D  Q | 
|---|
| 18 | . I $G(PXRMLIST)="" Q | 
|---|
| 19 | . I $P($G(^PXRMXP(810.5,PXRMLIST,0)),U,4)'="" Q | 
|---|
| 20 | . S DA=PXRMLIST,DIK="^PXRMXP(810.5," D ^DIK | 
|---|
| 21 | ; | 
|---|
| 22 | SECURE ;option to secure the list | 
|---|
| 23 | K PATCREAT | 
|---|
| 24 | I $D(PATCREAT)=0 S PATCREAT="N" D ASK^PXRMXD(.PATCREAT,"Secure list?: ",2) Q:$D(DTOUT)  G:$D(DUOUT) START | 
|---|
| 25 | ; | 
|---|
| 26 | PURGE ;Option to purge the list | 
|---|
| 27 | K PLISTPUG | 
|---|
| 28 | S PLISTPUG="N" D ASK^PXRMXD(.PLISTPUG,"Purge Patient List after 5 years?: ",5) Q:$D(DTOUT)  G:$D(DUOUT) SECURE | 
|---|
| 29 | ;Select rule set. | 
|---|
| 30 | RULE D LRULE(.PXRMRULE) Q:$D(DTOUT)  G:$D(DUOUT) LIST | 
|---|
| 31 | ;Select Date Range | 
|---|
| 32 | DATE D DATES^PXRMEUT(.BEG,.END,LIT) Q:$D(DTOUT)  G:$D(DUOUT) RULE | 
|---|
| 33 | ; | 
|---|
| 34 | ;Ask whether to include deceased and test patients. | 
|---|
| 35 | DPAT S PXRMDPAT=$$ASKYN^PXRMEUT("N","Include deceased patients on the list") | 
|---|
| 36 | Q:$D(DTOUT)  G:$D(DUOUT) DATE | 
|---|
| 37 | TPAT S PXRMTPAT=$$ASKYN^PXRMEUT("N","Include test patients on the list") | 
|---|
| 38 | Q:$D(DTOUT)  G:$D(DUOUT) DPAT | 
|---|
| 39 | I $G(PXRMDEBG) D RUN^PXRMLCR(PXRMRULE,PXRMLIST,PXRMNODE,BEG,END,PXRMDPAT,PXRMTPAT) Q | 
|---|
| 40 | ;Build patient list in background | 
|---|
| 41 | N ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE | 
|---|
| 42 | S ZTDESC="CREATE PATIENT LIST" | 
|---|
| 43 | S ZTRTN="RUN^PXRMLCR(PXRMRULE,PXRMLIST,PXRMNODE,BEG,END,PXRMDPAT,PXRMTPAT)" | 
|---|
| 44 | S ZTSAVE("BEG")="" | 
|---|
| 45 | S ZTSAVE("END")="" | 
|---|
| 46 | S ZTSAVE("PATCREAT")="" | 
|---|
| 47 | S ZTSAVE("PXRMDPAT")="" | 
|---|
| 48 | S ZTSAVE("PXRMLIST")="" | 
|---|
| 49 | S ZTSAVE("PXRMNODE")="" | 
|---|
| 50 | S ZTSAVE("PXRMRULE")="" | 
|---|
| 51 | S ZTSAVE("PXRMTPAT")="" | 
|---|
| 52 | S ZTSAVE("PLISTPUG")="" | 
|---|
| 53 | S ZTIO="" | 
|---|
| 54 | ; | 
|---|
| 55 | ;Select and verify start date/time for task | 
|---|
| 56 | N DIR,DTOUT,DUOUT,MINDT,SDTIME,STIME,X,Y | 
|---|
| 57 | S MINDT=$$NOW^XLFDT | 
|---|
| 58 | W !,"Queue the "_ZTDESC_" for "_$P($G(^PXRMXP(810.5,PXRMLIST,0)),U)_": " | 
|---|
| 59 | S DIR("A",1)="Enter the date and time you want the job to start." | 
|---|
| 60 | S DIR("A",2)="It must be after "_$$FMTE^XLFDT(MINDT,"5Z") | 
|---|
| 61 | S DIR("A")="Start the task at: " | 
|---|
| 62 | S DIR(0)="DAU"_U_MINDT_"::RSX" | 
|---|
| 63 | D ^DIR | 
|---|
| 64 | I $D(DTOUT)!$D(DUOUT) Q | 
|---|
| 65 | S SDTIME=Y | 
|---|
| 66 | ; | 
|---|
| 67 | ;Put the task into the queue. | 
|---|
| 68 | S ZTDTH=SDTIME | 
|---|
| 69 | D ^%ZTLOAD | 
|---|
| 70 | W !,"Task number ",ZTSK," queued." H 2 | 
|---|
| 71 | EXIT Q | 
|---|
| 72 | ; | 
|---|
| 73 | HELP(CALL) ;General help text routine | 
|---|
| 74 | N HTEXT | 
|---|
| 75 | I CALL=1 D | 
|---|
| 76 | .S HTEXT(1)="Enter 'Y' to overwrite this existing list. Enter 'N' to" | 
|---|
| 77 | .S HTEXT(2)="use a different patient list name." | 
|---|
| 78 | ; | 
|---|
| 79 | I CALL=2 D | 
|---|
| 80 | .S HTEXT(1)="Enter 'Y' to make the list private or 'N' to make it public." | 
|---|
| 81 | .S HTEXT(2)="You can give other users access to your private lists in the Patient List Menu screens." | 
|---|
| 82 | ; | 
|---|
| 83 | I CALL=3 D | 
|---|
| 84 | .S HTEXT(1)="Enter Y to save the patient to a Reminder Patient List. Enter N to not save the output." | 
|---|
| 85 | ; | 
|---|
| 86 | I CALL=4 D | 
|---|
| 87 | .S HTEXT(1)="Enter Y to turn on debug output." | 
|---|
| 88 | .S HTEXT(2)="The debug output will send a series of MailMan messages to the requestor of the report" | 
|---|
| 89 | .S HTEXT(3)="-**WARNING**- the reminder report will take longer to run if you turn on this option!" | 
|---|
| 90 | D HELP^PXRMEUT(.HTEXT) | 
|---|
| 91 | Q | 
|---|
| 92 | ; | 
|---|
| 93 | PLIST(LIST,TEXT,IENO) ;Select Patient List | 
|---|
| 94 | N X,Y,DIC,DLAYGO | 
|---|
| 95 | PL1 S DIC=810.5,DLAYGO=DIC,DIC(0)="QAEMZL" | 
|---|
| 96 | S DIC("A")=TEXT | 
|---|
| 97 | S DIC("S")="I $P($G(^(100)),U)'=""N""" | 
|---|
| 98 | ;If this is a new entry save the creator, make the TYPE public and | 
|---|
| 99 | ;CLASS local. | 
|---|
| 100 | S DIC("DR")=".07///`"_DUZ_";.08///PUB;100///L" | 
|---|
| 101 | W ! | 
|---|
| 102 | D ^DIC | 
|---|
| 103 | I X="" W !,"A patient list name must be entered" G PL1 | 
|---|
| 104 | I X=(U_U) S DTOUT=1 | 
|---|
| 105 | I Y=-1 S DUOUT=1 | 
|---|
| 106 | I $D(DTOUT)!$D(DUOUT) Q | 
|---|
| 107 | ; | 
|---|
| 108 | ;I copy mode dissallow copy to same list | 
|---|
| 109 | I IENO=$P(Y,U) W !,"A patient list cannot be copied to itself." G PL1 | 
|---|
| 110 | ; | 
|---|
| 111 | I ($P(Y,U,3)=1) S LIST=$P(Y,U) Q | 
|---|
| 112 | ;Check if OK to overwrite | 
|---|
| 113 | N OWRITE | 
|---|
| 114 | S OWRITE=$$ASKYN^PXRMEUT("N","Okay to overwite "_$P(Y,U,2),"PXRMLCR",1) | 
|---|
| 115 | Q:$D(DTOUT)  G:$D(DUOUT)!('OWRITE) PL1 | 
|---|
| 116 | S OWRITE=$$LDELOK^PXRMEUT($P(Y,U,1)) | 
|---|
| 117 | I 'OWRITE D  G PL1 | 
|---|
| 118 | . W !,"In order to overwrite a list you must be the creator or a Reminder Manager!" | 
|---|
| 119 | ;Return list ien | 
|---|
| 120 | S LIST=$P(Y,U) | 
|---|
| 121 | Q | 
|---|
| 122 | ; | 
|---|
| 123 | LRULE(RULE) ;Select List Rule | 
|---|
| 124 | N X,Y,DIC | 
|---|
| 125 | LR1 S DIC=810.4,DIC(0)="QAEMZ" | 
|---|
| 126 | S DIC("A")="Select LIST RULE SET: " | 
|---|
| 127 | ;Only allow rule sets with components | 
|---|
| 128 | S DIC("S")="I $P(^(0),U,3)=3" | 
|---|
| 129 | W ! | 
|---|
| 130 | D ^DIC | 
|---|
| 131 | I X="" W !,"A list rule set name must be entered" G LR1 | 
|---|
| 132 | I X=(U_U) S DTOUT=1 | 
|---|
| 133 | I Y=-1 S DUOUT=1 | 
|---|
| 134 | I $D(DTOUT)!$D(DUOUT) Q | 
|---|
| 135 | ;Return rule ien | 
|---|
| 136 | S RULE=$P(Y,U) | 
|---|
| 137 | ;Check that rule set is valid | 
|---|
| 138 | N ERROR,LR,LRTYPE,NL,OP,SEQ,SUB,TEMP,TEXT | 
|---|
| 139 | S SUB=$O(^PXRM(810.4,RULE,30,0)) | 
|---|
| 140 | I SUB="" W !,"Rule set has no component rules" G LR1 | 
|---|
| 141 | S (ERROR,SUB)=0,NL=1 | 
|---|
| 142 | F  S SUB=$O(^PXRM(810.4,RULE,30,SUB)) Q:'SUB  D  Q:ERROR | 
|---|
| 143 | .S TEMP=$G(^PXRM(810.4,RULE,30,SUB,0)) | 
|---|
| 144 | .S SEQ=$P(TEMP,U,1),LR=$P(TEMP,U,2),OP=$P(TEMP,U,3) | 
|---|
| 145 | .I SEQ="" S NL=NL+1,TEXT(NL)=" Sequence is missing.",ERROR=1 | 
|---|
| 146 | .I LR="" S NL=NL+1,TEXT(NL)=" List rule is missing.",ERROR=1 | 
|---|
| 147 | .I OP="" S NL=NL+1,TEXT(NL)=" Operation is missing.",ERROR=1 | 
|---|
| 148 | .;The Insert operation can only be used with finding rules. | 
|---|
| 149 | .I OP="F",LR'="" D | 
|---|
| 150 | ..S LRTYPE=$P(^PXRM(810.4,LR,0),U,3) | 
|---|
| 151 | ..I LRTYPE'=1 S NL=NL+1,TEXT(NL)=" Insert operation can only be used with finding rules.",ERROR=1 | 
|---|
| 152 | I ERROR D  G LR1 | 
|---|
| 153 | .S TEXT(1)="The rule set is incomplete or incorrect:" | 
|---|
| 154 | .D EN^DDIOL(.TEXT) | 
|---|
| 155 | Q | 
|---|
| 156 | ; | 
|---|
| 157 | ;Build list and clear ^TMP files | 
|---|
| 158 | RUN(PXRMRULE,PXRMLIST,PXRMNODE,BEG,END,PXRMDPAT,PXRMTPAT) ; | 
|---|
| 159 | ;Process rule set and update final patient list | 
|---|
| 160 | D START^PXRMRULE(PXRMRULE,PXRMLIST,PXRMNODE,BEG,END,"","","",PXRMDPAT,PXRMTPAT,"") | 
|---|
| 161 | ;Clear ^TMP lists created for rule | 
|---|
| 162 | D CLEAR^PXRMRULE(PXRMRULE,PXRMNODE) | 
|---|
| 163 | Q | 
|---|
| 164 | ; | 
|---|
| 165 | REMOVE(IEN) ; | 
|---|
| 166 | S $P(^PXRM(810.4,IEN,0),U,10)="" | 
|---|
| 167 | Q "@1" | 
|---|
| 168 | ; | 
|---|