1 | PXRMSTA1 ; SLC/AGP - Routines for building status list. ;09/06/2007
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123
|
---|
3 | ;
|
---|
4 | ;This routine and PXRMSTA2 will allow users to select the
|
---|
5 | ;approriate status for Orders, Medication, Taxonomy, Problem List,
|
---|
6 | ;and Radiology Procedure findings items.
|
---|
7 | ;
|
---|
8 | CLEAR(GBL,FILE,DA) ;
|
---|
9 | N IEN,NODE,DIK,TEMP
|
---|
10 | I FILE="D" S DIK="^PXD(811.9,"_DA(2)_",20,"_DA(1)_",5,"
|
---|
11 | I FILE="T" S DIK="^PXRMD(811.5,"_DA(2)_",20,"_DA(1)_",5,"
|
---|
12 | S DA=0 F S DA=$O(@GBL@(DA(2),20,DA(1),5,DA)) Q:DA'>0 S TEMP(DA)=""
|
---|
13 | S DA=0 F S DA=$O(TEMP(DA)) Q:DA'>0 D ^DIK
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | STATUS(DA,FILE) ;
|
---|
17 | N ANS,DELSTS,DELALL,GBL,NODE,PXRMRX,STATUS,STS,TAXIEN,TERMIEN,TAXTYPE,TTYPE,TYPE
|
---|
18 | N RXTYPE,TAXNODE,TERMTYPE,Y
|
---|
19 | N CSTATUS,UPDATE,HTEXT,OSTAUS,WILD
|
---|
20 | S DA(2)=DA(1),DA(1)=DA,DA="",UPDATE=0,DELALL=0
|
---|
21 | I FILE="D" S GBL="^PXD(811.9)"
|
---|
22 | I FILE="T" S GBL="^PXRMD(811.5)"
|
---|
23 | S NODE=$G(@GBL@(DA(2),20,DA(1),0))
|
---|
24 | S TYPE=$P($G(@GBL@(DA(2),20,DA(1),0)),U)
|
---|
25 | S WILD=0
|
---|
26 | ;check for current defined statuses if none set the default values
|
---|
27 | I FILE="D",$P($G(@GBL@(DA(2),20,DA(1),5,0)),U,4)'>0 D DEFAULT(GBL,TYPE,NODE,FILE,0,.DA)
|
---|
28 | ;I FILE="T",$P($G(@GBL@(DA(2),20,DA(1),5,0)),U,4)>0 D
|
---|
29 | ;.S STS="" F S STS=$O(@GBL@(DA(2),20,DA(1),5,"B",STS)) Q:STS="" S DELSTS(STS)=""
|
---|
30 | ;display the current status
|
---|
31 | D DISPLAY(GBL,UPDATE,.WILD,DELALL)
|
---|
32 | ;do inital prompt
|
---|
33 | D ADDDEL($G(ANS),GBL,FILE,TYPE,NODE,WILD,.DA,.UPDATE,.DELALL)
|
---|
34 | Q
|
---|
35 | ;
|
---|
36 | ADDDEL(ANS,GBL,FILE,TYPE,NODE,WILD,DA,UPDATE,DELALL) ;
|
---|
37 | I $G(ANS)="" S ANS=$$PROMPT("S^A:ADD STATUS;D:DELETE A STATUS;S:SAVE AND QUIT;Q:QUIT WITHOUT SAVING CHANGES")
|
---|
38 | I "ADDASQ"'[ANS Q
|
---|
39 | I ANS="A",WILD=1 D
|
---|
40 | .W !,"Wildcard is already on the status list all possible statuses will be evaluated."
|
---|
41 | .W !,"To add a specific status please remove the wildcard first."
|
---|
42 | .S UPDATE=0 H 1
|
---|
43 | I ANS="A",WILD=0 D ADD(GBL,FILE,.CSTATUS,TYPE,.WILD,.DA,.UPDATE)
|
---|
44 | I ANS="D" D DELETE(GBL,FILE,.CSTATUS,NODE,.WILD,.DA,.UPDATE,.DELALL)
|
---|
45 | I ANS="S" S UPDATE="S"
|
---|
46 | I ANS="Q" S UPDATE="Q"
|
---|
47 | I UPDATE'="S",UPDATE'="Q" S DELALL=0 D ADDDEL("",GBL,FILE,TYPE,NODE,.WILD,.DA,.UPDATE,.DELALL)
|
---|
48 | ; only update the new record if the action is Save
|
---|
49 | I UPDATE="S" D UPDATE(FILE,.UPDATE,.CSTATUS,.DA,.DELALL)
|
---|
50 | Q
|
---|
51 | ;
|
---|
52 | ADD(GBL,FILE,CSTATUS,TYPE,WILD,DA,UPDATE) ;
|
---|
53 | N ANS,STATUS,TERMIEN
|
---|
54 | ;Find what types of finding is in the term
|
---|
55 | I TYPE["PXRMD(811.5," D
|
---|
56 | .S TERMIEN=$P($G(TYPE),";")
|
---|
57 | .S TYPE=$$TERMSTAT(TERMIEN) I TYPE=0 Q
|
---|
58 | .I TYPE["PXD" S TAXTYPE=$$TAXTYPE(TERMIEN,"")
|
---|
59 | I TYPE=0 Q
|
---|
60 | ;find out what is in the taxonomy
|
---|
61 | I TYPE["PXD(811.2,",$G(TAXTYPE)="" S TAXTYPE=$$TAXNODE($P(TYPE,";"),"")
|
---|
62 | I TYPE[";" S TYPE=$P($G(TYPE),";",2)
|
---|
63 | I TYPE="PXD(811.2," D G ADDEX
|
---|
64 | .I $G(TAXTYPE)="R"!($G(TAXTYPE)="B") D DATA^PXRMSTA2(FILE,.DA,"RAMIS(71,","",.STATUS)
|
---|
65 | .;I $G(TAXTYPE)="P" D DATA^PXRMSTA2(FILE,.DA,"PROB","",.STATUS)
|
---|
66 | .;I $G(TAXTYPE)="B" D DATA^PXRMSTA2(FILE,.DA,"TAX","",.STATUS)
|
---|
67 | ; handle drug finding items
|
---|
68 | I TYPE["PSDRUG("!(TYPE["PS(50.605")!(TYPE["PSNDF") D G ADDEX
|
---|
69 | .D SRXTYL^PXRMRXTY(NODE,.RXTYPE)
|
---|
70 | .D DATA^PXRMSTA2(FILE,.DA,"DRUG",.RXTYPE,.STATUS)
|
---|
71 | ;radiology and orderable item finding item
|
---|
72 | D DATA^PXRMSTA2(FILE,.DA,TYPE,"",.STATUS)
|
---|
73 | ADDEX ;
|
---|
74 | I '$D(STATUS) S UPDATE=0 Q
|
---|
75 | S STAT="" F S STAT=$O(STATUS(STAT)) Q:STAT=""!(WILD)=1 D
|
---|
76 | .I STAT["*" S WILD=1 Q
|
---|
77 | .S CSTATUS(STAT)=""
|
---|
78 | I WILD=1 K CSTATUS S CSTATUS("*")=""
|
---|
79 | S UPDATE=1 D DISPLAY(GBL,UPDATE,.WILD,0)
|
---|
80 | Q
|
---|
81 | ;
|
---|
82 | DEFAULT(GBL,TYPE,NODE,RFILE,DELETE,DA) ;
|
---|
83 | N ANS,FDA,FILE,IND,MSG,STATUS,TERMIEN
|
---|
84 | S FILE=""
|
---|
85 | I TYPE["PXRMD(811.5," D
|
---|
86 | .S TERMIEN=$P($G(TYPE),";")
|
---|
87 | .S TYPE=$$TERMSTAT(TERMIEN) I TYPE=0 S STATUS="" Q
|
---|
88 | .I TYPE["PXD" S TAXTYPE=$$TAXTYPE(TERMIEN,"")
|
---|
89 | I TYPE=0 Q
|
---|
90 | I TYPE["PXD(811.2,",$G(TAXTYPE)="" S TAXTYPE=$$TAXNODE($P(TYPE,";"),"")
|
---|
91 | I TYPE[";" S TYPE=$P($G(TYPE),";",2)
|
---|
92 | I TYPE="PXD(811.2," D
|
---|
93 | .I $G(TAXTYPE)="R"!($G(TAXTYPE)="B") S FILE=70
|
---|
94 | .;I $G(TAXTYPE)="P" S FILE=9000011
|
---|
95 | I FILE="",TYPE="ORD(101.43," S FILE=100
|
---|
96 | I FILE="",TYPE="RAMIS(71," S FILE=70
|
---|
97 | I FILE="",TYPE["PSDRUG("!(TYPE["PS(50.605")!(TYPE["PSNDF") D
|
---|
98 | .N DSTATUS,NAME,STATUSI,STATUSN,STATUSO,RXTYPE
|
---|
99 | .D SRXTYL^PXRMRXTY(NODE,.RXTYPE)
|
---|
100 | .I $D(RXTYPE("O")) D DEFAULT^PXRMSTAT(52,.STATUSO) D
|
---|
101 | ..F IND=1:1:STATUSO(0) S DSTATUS(STATUSO(IND))=""
|
---|
102 | .I $D(RXTYPE("I")) D DEFAULT^PXRMSTAT(55,.STATUSI) D
|
---|
103 | ..F IND=1:1:STATUSI(0) S DSTATUS(STATUSI(IND))=""
|
---|
104 | .I $D(RXTYPE("N")) D DEFAULT^PXRMSTAT("55NVA",.STATUSN) D
|
---|
105 | ..F IND=1:1:STATUSN(0) S DSTATUS(STATUSN(IND))=""
|
---|
106 | .S NAME="",IND=0 F S NAME=$O(DSTATUS(NAME)) Q:NAME="" D
|
---|
107 | ..S IND=IND+1 S STATUS(IND)=NAME
|
---|
108 | .S STATUS(0)=IND
|
---|
109 | I '$D(STATUS) D DEFAULT^PXRMSTAT(FILE,.STATUS)
|
---|
110 | F IND=1:1:STATUS(0) Q:$D(MSG)>0 D
|
---|
111 | .I DELETE=1 S CSTATUS(STATUS(IND))="" Q
|
---|
112 | .I $D(@GBL@(DA(2),20,DA(1),5,"B",STATUS(IND))) Q
|
---|
113 | .I RFILE="D" S FDA(811.90221,"+3,"_DA(1)_","_DA(2)_",",.01)=STATUS(IND)
|
---|
114 | .I RFILE="T" S FDA(811.54,"+3,"_DA(1)_","_DA(2)_",",.01)=STATUS(IND)
|
---|
115 | .D UPDATE^DIE("","FDA","","MSG")
|
---|
116 | I $D(MSG)>0 D AWRITE^PXRMUTIL("MSG") H 2
|
---|
117 | Q
|
---|
118 | ;
|
---|
119 | DELETE(GBL,FILE,CSTATUS,NODE,WILD,DA,UPDATE,DELALL) ;
|
---|
120 | N ANS,CNT,DIK,NUM,NAME,DIR,TMP,TMPARR,Y
|
---|
121 | S CNT=0,NAME="" F S NAME=$O(CSTATUS(NAME)) Q:NAME="" D
|
---|
122 | .S CNT=CNT+1 S TMPARR(CNT)=CNT_" - "_NAME,TMP(CNT)=NAME
|
---|
123 | S DIR(0)="LO^1:"_CNT_""
|
---|
124 | M DIR("A")=TMPARR
|
---|
125 | S DIR("A")="Select which status to be deleted"
|
---|
126 | ;S DIR("?")=HELP
|
---|
127 | D ^DIR
|
---|
128 | I $D(DTOUT)!($D(DUOUT))!($G(Y)="") Q
|
---|
129 | S CNT=0 F X=1:1:$L(Y(0)) D
|
---|
130 | .I $E(Y(0),X)="," S CNT=CNT+1,NUM=$P(Y(0),",",CNT) S NAME=TMP(NUM) K CSTATUS(NAME) I NAME["*" S WILD=0
|
---|
131 | S UPDATE=1
|
---|
132 | I FILE="T",$D(CSTATUS)'>0 S DELALL=1
|
---|
133 | ;.S DIK="^PXRMD(811.5,"_DA(2)_",20,"_DA(1)_",5,"
|
---|
134 | ;D CLEAR(GBL,FILE,.DA)
|
---|
135 | ;I $D(CSTATUS)'>0 S DA=0 F S DA=$O(^PXRMD(811.5,DA(2),20,DA(1),5,DA)) Q:DA'>0 D ^DIK
|
---|
136 | ;I '$D(CSTATUS) D CLEAR(GBL,FILE,.DA) D DEFAULT(GBL,TYPE,NODE,FILE,1,.DA)
|
---|
137 | ;I '$D(CSTATUS),FILE="D" D DEFAULT(GBL,TYPE,NODE,FILE,1,.DA)
|
---|
138 | D DISPLAY(GBL,UPDATE,.WILD,DELALL)
|
---|
139 | Q
|
---|
140 | ;
|
---|
141 | DISPLAY(GBL,UPDATE,WILD,DELALL) ;
|
---|
142 | ;display statuses defined in the 5 node or display statuses if CStatus
|
---|
143 | ;array has been loaded
|
---|
144 | N NAME
|
---|
145 | S NAME=""
|
---|
146 | I ((UPDATE=1)&(DELALL=1))!(($D(CSTATUS)'>0)&(UPDATE=0)&(GBL["811.5")&('$D(@GBL@(DA(2),20,DA(1),5)))) W !!,"No statuses defined for this finding item" W ! Q
|
---|
147 | W !!,"Statuses already defined for this finding item:"
|
---|
148 | ;I $D(CSTATUS)'>0,UPDATE=1 D
|
---|
149 | ;.F S NAME=$O(@GBL@(DA(2),20,DA(1),5,"B",NAME)) Q:NAME="" D
|
---|
150 | ;..S CSTATUS(NAME)=$O(^PXD(811.9,DA(2),20,DA(1),5,"B","NAME",""))
|
---|
151 | I $D(CSTATUS)'>0,UPDATE=0 D
|
---|
152 | .F S NAME=$O(@GBL@(DA(2),20,DA(1),5,"B",NAME)) Q:NAME="" D
|
---|
153 | ..I NAME["*" S WILD=1
|
---|
154 | ..W !,NAME S CSTATUS(NAME)=$O(^PXD(811.9,DA(2),20,DA(1),5,"B","NAME",""))
|
---|
155 | I UPDATE=1 F S NAME=$O(CSTATUS(NAME)) Q:NAME="" W !,NAME I NAME["*" S WILD=1
|
---|
156 | W !
|
---|
157 | Q
|
---|
158 | ;
|
---|
159 | ;
|
---|
160 | UPDATE(FILE,UPDATE,CSTATUS,DA,DELALL) ;
|
---|
161 | N FDA,MSG,NAME
|
---|
162 | I UPDATE="S" S UPDATE=1
|
---|
163 | I UPDATE=0,$D(CSTATUS) G EXIT
|
---|
164 | D CLEAR(GBL,FILE,.DA)
|
---|
165 | I $D(CSTATUS)'>0 S UPDATE=0,DELALL=0 G EXIT
|
---|
166 | I $D(CSTATUS)'>0 S UPDATE=1,DELALL=1 G EXIT
|
---|
167 | S NAME="" F S NAME=$O(CSTATUS(NAME)) Q:NAME=""!($D(MSG)>0) D
|
---|
168 | .I FILE="D" S FDA(811.90221,"+3,"_DA(1)_","_DA(2)_",",.01)=NAME
|
---|
169 | .I FILE="T" S FDA(811.54,"+3,"_DA(1)_","_DA(2)_",",.01)=NAME
|
---|
170 | .D UPDATE^DIE("","FDA","","MSG")
|
---|
171 | I $D(MSG)>0 D AWRITE^PXRMUTIL("MSG") H 2
|
---|
172 | EXIT ;
|
---|
173 | Q
|
---|
174 | ;
|
---|
175 | PROMPT(STR) ;
|
---|
176 | N DIR,HTEXT
|
---|
177 | S HTEXT(1)="Select 'A' to add a status to the current status list.\\Select 'D' to"
|
---|
178 | S HTEXT(2)="delete a status from the list.\\Select 'S' to save your changes and quit. "
|
---|
179 | S HTEXT(3)="\\Select 'Q' to quit without saving your changes."
|
---|
180 | S DIR(0)=STR
|
---|
181 | S DIR("B")="S"
|
---|
182 | S DIR("?")="Select one of the above option or '^' to quit. Enter ?? for detail help."
|
---|
183 | S DIR("??")=U_"D HELP^PXRMEUT(.HTEXT)"
|
---|
184 | D ^DIR
|
---|
185 | I $G(Y)="" S Y=U
|
---|
186 | Q Y
|
---|
187 | ;
|
---|
188 | ASK(STR,HTEXT) ;
|
---|
189 | N DIR,HTEXT
|
---|
190 | I '$D(HTEXT) D
|
---|
191 | .S HTEXT(1)="Enter 'Y' to continue editing the Status List or '^' to Quit"
|
---|
192 | S DIR(0)="YA0"
|
---|
193 | S DIR("A")=STR
|
---|
194 | S DIR("B")="N"
|
---|
195 | S DIR("?")="Select either 'Y' or 'N' or '^' to quit. Enter ?? for detail help."
|
---|
196 | S DIR("??")=U_"D HELP^PXRMEUT(.HTEXT)"
|
---|
197 | D ^DIR
|
---|
198 | Q Y
|
---|
199 | ;
|
---|
200 | TAXTYPE(TERMIEN,HELP) ;
|
---|
201 | ;use to determine the Rx type of the term and the type of taxonomy
|
---|
202 | N ARRAY,BOTH,CNT,IEN,TAXNODE,RAD,PL,RESULT,TYPE
|
---|
203 | S (BOTH,PL,RAD,RESULT)=0
|
---|
204 | S IEN=0 F S IEN=$O(^PXRMD(811.5,TERMIEN,20,IEN)) Q:+IEN'>0 D
|
---|
205 | .S TAXNODE=$G(^PXRMD(811.5,TERMIEN,20,IEN,0))
|
---|
206 | .S ARRAY($P($P($G(TAXNODE),U),";"))=""
|
---|
207 | I $D(ARRAY)>0 S IEN=0 F S IEN=$O(ARRAY(IEN)) Q:IEN'>0 D
|
---|
208 | .S TYPE=$$TAXNODE(IEN,$G(HELP))
|
---|
209 | .I TYPE="R" S RAD=1
|
---|
210 | .I TYPE="P" S PL=1
|
---|
211 | .I TYPE="B" S BOTH=1
|
---|
212 | I RAD=1,PL=1 S RESULT="B" Q
|
---|
213 | I RAD=1,PL=0,BOTH=0 S RESULT="R"
|
---|
214 | I RAD=0,PL=1,BOTH=0 S RESULT="P"
|
---|
215 | Q RESULT
|
---|
216 | ;
|
---|
217 | TAXNODE(TAXIEN,HELP) ;
|
---|
218 | ;use to determine the type of taxonomy
|
---|
219 | N TAXNODE,ICD,CPT,ARRAY,RAD,PL,BOTH,RADM,PLM,RESULT
|
---|
220 | S (BOTH,PL,PLM,RAD,RADM,RESULT)=0
|
---|
221 | D CHECK^PXRMBXTL(TAXIEN,"")
|
---|
222 | I $D(^PXD(811.3,TAXIEN,71,"RCPTP"))>0 S RAD=1
|
---|
223 | I $D(^PXD(811.3,TAXIEN,"PDS",9000011))>0 S PL=1
|
---|
224 | I RAD=1,PL=1 S RESULT="B"
|
---|
225 | I RAD=1,PL=0 S RESULT="R"
|
---|
226 | I RAD=0,PL=1 S RESULT="P"
|
---|
227 | Q RESULT
|
---|
228 | ;
|
---|
229 | ;
|
---|
230 | TERMSTAT(TIEN) ;
|
---|
231 | N CNT,FIEN,NODE
|
---|
232 | S (CNT,FIEN)=0
|
---|
233 | S TYPE=0 F S FIEN=$O(^PXRMD(811.5,TIEN,20,FIEN)) Q:+FIEN=0!(CNT=1) D
|
---|
234 | . S NODE=$G(^PXRMD(811.5,TIEN,20,FIEN,0)),TYPE=$P(NODE,U),CNT=CNT+1
|
---|
235 | Q TYPE
|
---|
236 | ;
|
---|
237 | WARN ;
|
---|
238 | ;If the whole entry is being deleted don't give the warning.
|
---|
239 | I $G(PXRMDEFD) Q
|
---|
240 | I $G(PXRMTMD) Q
|
---|
241 | ;Do not execute as part of exchange.
|
---|
242 | I $G(PXRMEXCH) Q
|
---|
243 | N TEXT
|
---|
244 | S TEXT(1)=""
|
---|
245 | S TEXT(2)="Since you changed the value of Rx Type, you should review the status list"
|
---|
246 | S TEXT(3)="for the finding to make sure it is still appropriate."
|
---|
247 | S TEXT(4)=""
|
---|
248 | D EN^DDIOL(.TEXT)
|
---|
249 | Q
|
---|
250 | ;
|
---|
251 | ;
|
---|