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 | ;
|
---|