1 | PXRMDLLB ;SLC/PJH - REMINDER DIALOG LOADER ;05/01/2007
|
---|
2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123
|
---|
3 | ;
|
---|
4 | CODE(DFIEN,DFTYP,ARRAY) ;
|
---|
5 | N ARY,CNT,CNT1
|
---|
6 | I DFTYP["ICD9" S CODE=$P($G(^ICD9(DFIEN,0)),U) D PERIOD^ICDAPIU(CODE,.ARY)
|
---|
7 | I DFTYP["ICPT" S CODE=$P($$CPT^ICPTCOD(DFIEN),U,2) D PERIOD^ICPTAPIU(CODE,.ARY)
|
---|
8 | I $D(ARY)'>0 Q
|
---|
9 | I $P($G(ARY(0)),U,2)'>0 Q
|
---|
10 | S (CNT,CNT1)=0
|
---|
11 | F S CNT=$O(ARY(CNT)) Q:CNT="" D
|
---|
12 | . S ARRAY(CNT1)=CODE_":"_CNT_":"_$P($G(ARY(CNT)),U)
|
---|
13 | . S CNT1=CNT1+1
|
---|
14 | Q
|
---|
15 | ;
|
---|
16 | CODES(FILE,TXIEN,ARRAY) ;Return selectable codes from taxonomy file
|
---|
17 | N CNT,CODE,CSCNT,DATA,DATES,DISPLAY,IEN,INSTALL,TEMP,TEXT,NODE,SUB
|
---|
18 | S SUB=0,CNT=0,NODE=$S(FILE=80:"SDX",FILE=81:"SPR")
|
---|
19 | F S SUB=$O(^PXD(811.2,TXIEN,NODE,SUB)) Q:'SUB D
|
---|
20 | .S DATA=$G(^PXD(811.2,TXIEN,NODE,SUB,0)) Q:DATA=""
|
---|
21 | .;Ignore if disabled
|
---|
22 | .S DISPLAY=""
|
---|
23 | .I $P(DATA,U,3)=1 Q
|
---|
24 | .;Get ien of code
|
---|
25 | .S IEN=$P(DATA,U) Q:IEN=""
|
---|
26 | .;get date ranges and text from period api
|
---|
27 | .K ARY
|
---|
28 | .I FILE=80 S CODE=$P($G(^ICD9(IEN,0)),U)
|
---|
29 | .I FILE=81 S CODE=$P($$CPT^ICPTCOD(IEN),U,2)
|
---|
30 | .S DISPLAY=$P($G(DATA),U,2)
|
---|
31 | .S TEMP=$$CODE^PXRMVAL(CODE,FILE) Q:'$P(TEMP,U) Q:$P(TEMP,U,9)=1
|
---|
32 | .;Set display text from taxonomy selectable code text
|
---|
33 | .S TEXT=$P(DATA,U,2)
|
---|
34 | .;otherwise use icd9/cpt description
|
---|
35 | .I TEXT="",FILE=80 S TEXT=$P($$ICDDX^ICDCODE(IEN),U,3)
|
---|
36 | .I TEXT="",FILE=81 S TEXT=$P($$CPT^ICPTCOD(IEN),U,3)
|
---|
37 | .I FILE=80 D PERIOD^ICDAPIU(CODE,.ARY)
|
---|
38 | .I FILE=81 D PERIOD^ICPTAPIU(CODE,.ARY)
|
---|
39 | .I $D(ARY)'>0 Q
|
---|
40 | .I $P($G(ARY(0)),U,2)'>0 Q
|
---|
41 | .S CSCNT=0 F S CSCNT=$O(ARY(CSCNT)) Q:CSCNT="" D
|
---|
42 | ..S DATES=":"_CSCNT_":"_$P($G(ARY(CSCNT)),U)
|
---|
43 | ..S TEXT=$P($G(ARY(CSCNT)),U,2) I $G(DISPLAY)'="" S TEXT=DISPLAY
|
---|
44 | ..S CNT=CNT+1,ARRAY(CNT)=IEN_U_$G(CODE)_$G(DATES)_U_$G(TEXT)
|
---|
45 | Q
|
---|
46 | ;
|
---|
47 | EXP(TIEN,DCUR,DTTYP) ;Expand taxonomy codes
|
---|
48 | N CODES,CNT,FILE,LIT,CAT
|
---|
49 | S FILE=$S(DTTYP="POV":80,DTTYP="CPT":81,1:"") Q:'FILE
|
---|
50 | S LIT="Selectable "_$S(FILE=80:"Diagnoses:",1:"Procedures:")
|
---|
51 | S CAT=$P($G(^PXD(811.2,TIEN,0)),U)
|
---|
52 | ;
|
---|
53 | S OCNT=OCNT+1
|
---|
54 | S ORY(OCNT)=3_U_DITEM_U_U_DTTYP_U_U_U_U_U_CAT_U_LIT
|
---|
55 | ;Get selectable codes
|
---|
56 | D CODES(FILE,TIEN,.CODES)
|
---|
57 | S CNT=0
|
---|
58 | ;Save selectable codes as type 5 records
|
---|
59 | F S CNT=$O(CODES(CNT)) Q:'CNT D
|
---|
60 | .S OCNT=OCNT+1,ORY(OCNT)=5_U_DITEM_U_U_DTTYP_U_U_CODES(CNT)
|
---|
61 | Q
|
---|
62 | ;
|
---|
63 | ;Pass MST code as a forced value
|
---|
64 | MST(DFTYP,DFIEN) ;
|
---|
65 | ;Validate finding ien
|
---|
66 | Q:DFIEN=""
|
---|
67 | ;For each MST term check if finding is mapped
|
---|
68 | N FOUND,TCOND,TIEN,TNAM,TSUB
|
---|
69 | S FOUND=0
|
---|
70 | F TNAM="POSITIVE","NEGATIVE","DECLINES" D Q:FOUND
|
---|
71 | .;Get term IEN
|
---|
72 | .S TIEN=$O(^PXRMD(811.5,"B","MST "_TNAM_" REPORT","")) Q:'TIEN
|
---|
73 | .;Check if finding is mapped to term
|
---|
74 | .Q:'$D(^PXRMD(811.5,TIEN,20,"E",DFTYP,DFIEN))
|
---|
75 | .;If exam and term condition logic is null ignore
|
---|
76 | .I DFTYP="AUTTEXAM(" D Q:TCOND=""
|
---|
77 | ..S TCOND="",TSUB=$O(^PXRMD(811.5,TIEN,20,"E",DFTYP,DFIEN,"")) Q:'TSUB
|
---|
78 | ..S TCOND=$P($G(^PXRMD(811.5,TIEN,20,TSUB,3)),U)
|
---|
79 | .;If it is then create additional prompt for MST
|
---|
80 | .N DSEQ,DEXC,DDEF,DGUI,DTYP,DTEXT,DSNL,DREQ
|
---|
81 | .;Add to end of array
|
---|
82 | .S DSEQ=$O(ARRAY(""),-1)+1
|
---|
83 | .;Null fields
|
---|
84 | .S DDEF="",DEXC="",DTEXT="",DSNL="",DREQ=""
|
---|
85 | .;MST status (exept for exams)
|
---|
86 | .I DFTYP'="AUTTEXAM(" S DDEF=$$STCODE^PXRMMST("MST "_TNAM_" REPORT")
|
---|
87 | .;GUI process and forced value
|
---|
88 | .S DGUI="MST",DTYP="F"
|
---|
89 | .;Save in array
|
---|
90 | .S ARRAY(DSEQ)=DGUI_U_DEXC_U_DDEF_U_DTYP_U_DTEXT_U_DSNL_U_DREQ
|
---|
91 | .;Quit after the first term is found
|
---|
92 | .S FOUND=1
|
---|
93 | Q
|
---|
94 | ;
|
---|
95 | REPLACE(DFN,TERMNODE,DITEM,DATA,TERMSTAT) ;
|
---|
96 | ;this section is use to compare the term evalution result against
|
---|
97 | ;the value store in the Reminder Term Status field.
|
---|
98 | ;If the value match and the replacement item is active then the orginal
|
---|
99 | ;item will be replace with the new item.
|
---|
100 | N TERMOUT
|
---|
101 | S TERMSTAT=1 I +$P(TERMNODE,U),$P($G(TERMNODE),U,2)'="" D Q:+TERMSTAT=0
|
---|
102 | .N DITEMO
|
---|
103 | .S TERMOUT=$$TERM($P(TERMNODE,U),DFN,$G(DITEM))
|
---|
104 | .I TERMOUT'=$P(TERMNODE,U,2) Q
|
---|
105 | .I +$P(TERMNODE,U,3)'>0 S TERMSTAT=0 Q
|
---|
106 | .S DITEMO=DITEM,DITEM=$P(TERMNODE,U,3),DATA=$G(^PXRMD(801.41,DITEM,0))
|
---|
107 | .I $G(DATA)=""!($P(DATA,U,3)]"") S DITEM=DITEMO Q
|
---|
108 | Q
|
---|
109 | ;
|
---|
110 | RESGROUP(DIEN) ;
|
---|
111 | N CNT,RESULT,TEMP
|
---|
112 | S RESULT=""
|
---|
113 | I $$PATCH^XPDUTL("OR*3.0*243")=0 D Q RESULT
|
---|
114 | .S RESULT=$P($G(^PXRMD(801.41,DIEN,51,1,0)),U) I RESULT="" Q
|
---|
115 | .I $P($G(^PXRMD(801.41,RESULT,0)),U,3)'="" S RESULT="" Q
|
---|
116 | S CNT=0 F S CNT=$O(^PXRMD(801.41,DIEN,51,CNT)) Q:CNT'>0 D
|
---|
117 | .S TEMP=$P($G(^PXRMD(801.41,DIEN,51,CNT,0)),U) I TEMP="" Q
|
---|
118 | .I $P($G(^PXRMD(801.41,TEMP,0)),U,3)'="" S TEMP="" Q
|
---|
119 | .S RESULT=$S(RESULT="":TEMP,1:RESULT_"~"_TEMP)
|
---|
120 | Q RESULT
|
---|
121 | ;
|
---|
122 | TERM(TERMIEN,DFN,IEN) ;
|
---|
123 | ;this section is use to for the term evaluation
|
---|
124 | N ARRAY,CNT,NODE,RESULT,TERMARR
|
---|
125 | N DATEORDR,ESUB,FINDPA,FIEVAL,TFIEVAL,NOCC,BDT,EDT,SDIR,SUB,WVIEN
|
---|
126 | S (TERMARR,TFIEVAL,DATEORDR,FIEVAL)=""
|
---|
127 | ;build term array
|
---|
128 | D TERM^PXRMLDR(TERMIEN,.TERMARR)
|
---|
129 | ;term evaulation
|
---|
130 | D IEVALTER^PXRMTERM(DFN,.TERMARR,.TERMARR,1,.FIEVAL)
|
---|
131 | S RESULT=$G(FIEVAL(1))
|
---|
132 | ;if the item is one of the WH review reminders build finding item and
|
---|
133 | ;text from the the WVALERTS API in PXRMCWH
|
---|
134 | I RESULT=1,$P($G(^PXRMD(801.41,IEN,0)),U,16)["WHR" D
|
---|
135 | .N IDENT
|
---|
136 | .S IDENT=$P($G(^PXRMD(801.41,IEN,0)),U,16)
|
---|
137 | .I $G(FIEVAL(1,"LINK"))=1,$G(FIEVAL(1,"STATUS"))="OPEN",$G(FIEVAL(1,"VALUE"))="Pending" D
|
---|
138 | ..S WVIEN=$G(FIEVAL(1,"WVIEN"))
|
---|
139 | ..;DBIA #4102
|
---|
140 | ..D RESULTS^WVALERTS(.ARRAY,WVIEN) D
|
---|
141 | ...K WHFIND,WHNAME
|
---|
142 | ...S NODE=$G(ARRAY(0)) I +$P(NODE,U)'>0 Q
|
---|
143 | ...S WHFIND=WVIEN_";WV(790.1,",WHNAME=$P($G(NODE),U,3)
|
---|
144 | ...S (ESUB,SUB)=0 F S SUB=$O(DTXT(SUB)) Q:SUB'>0 S ESUB=SUB
|
---|
145 | ...S ESUB=ESUB+1
|
---|
146 | ...I IDENT="WHRP" D
|
---|
147 | ....N MOD
|
---|
148 | ....S DATE=""
|
---|
149 | ....S DTXT(ESUB)=$P($G(NODE),U,3),ESUB=ESUB+1
|
---|
150 | ....S DATE=$P($G(NODE),U,4),STR=$$RJ^XLFSTR("Collected: ",20)
|
---|
151 | ....S STR=STR_$P($G(NODE),U,8)
|
---|
152 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1
|
---|
153 | ....S STR=$$RJ^XLFSTR("Lab Accession #: ",20),STR=STR_$P($G(NODE),U,9)
|
---|
154 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1
|
---|
155 | ....S STR=$$RJ^XLFSTR("Specimen: ",20),STR=STR_$P($G(NODE),U,10)
|
---|
156 | ....S DTXT(ESUB)=STR
|
---|
157 | ...I IDENT="WHRM" D
|
---|
158 | ....S STR=$$RJ^XLFSTR("Procedure: ",20),STR=STR_$P($G(NODE),U,5)
|
---|
159 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1
|
---|
160 | ....S STR=$$RJ^XLFSTR("Primary Diagnosis: ",20),STR=STR_$P($G(NODE),U,6)
|
---|
161 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1
|
---|
162 | ....S STR=$$RJ^XLFSTR("Modifiers: ",20),MOD=$P($G(NODE),U,7)
|
---|
163 | ....I $G(MOD)="" S STR=STR_"<none>"
|
---|
164 | ....E S STR=STR_$P($G(MOD),"~",1)
|
---|
165 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1
|
---|
166 | ....I $P($G(MOD),"~",2)'="" S DTXT(ESUB)=$$LJ^XLFSTR($P(MOD,"~",2),23)
|
---|
167 | Q +RESULT
|
---|
168 | ;
|
---|