source: WorldVistAEHR/trunk/r/ORDER_ENTRY_RESULTS_REPORTING-OR-OCX--ORRC--ORRJ/ORRHCQ.m@ 949

Last change on this file since 949 was 613, checked in by George Lilly, 15 years ago

initial load of WorldVistAEHR

File size: 7.8 KB
Line 
1ORRHCQ ; SLC/KCM/JLI - CPRS Query Tools - Utilities ;2/1/03 11:10
2 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**153,174**;Dec 17, 1997
3 ;
4SETUP(ITR,QRY) ; Setup the query
5 ; use ^TMP("ORRHCQ",$J,"QRY") for the query
6 ; use ^TMP("ORRHCQ",$J,"COL") for the columns
7 ; use ^TMP("ORRHCQD",$J) for the query data
8 D CLEAR(.OK)
9 N I,X,NAM,VAL,CID,ICOL,QROOT,DTRNG,CSLTGRP S ICOL=0,ITR=0,CSLTGRP=0
10 S I=0 F S I=$O(QRY(I)) Q:'I D
11 . S NAM=$P(QRY(I),"="),VAL=$P(QRY(I),"=",2,99)
12 . ; if time range, convert relative to actual fileman times
13 . S CID=+$O(^ORD(102.22,"B",NAM,0))
14 . I +CID S:$P(^ORD(102.22,CID,0),U,2)=2 VAL=$$RNG2FM^ORRHCU(VAL)
15 . I $L(VAL) S ^TMP("ORRHCQ",$J,"QRY",$P(NAM,"."),$P(NAM,".",2),VAL)=""
16 . I NAM="Report.Column" S ICOL=ICOL+1,^TMP("ORRHCQ",$J,"COL",ICOL)=VAL
17 ; when looking for combination of items, create full list to pass to query
18 S QROOT="^TMP(""ORRHCQ"",$J,""QRY"")"
19 I $D(@QROOT@("Order","ItemCombo1"))>1 D
20 . M @QROOT@("Order","Orderable")=@QROOT@("Order","ItemCombo1")
21 . M @QROOT@("Order","Orderable")=@QROOT@("Order","ItemCombo2")
22 I $D(@QROOT@("Consult","ItemCombo1"))>1 D
23 . M @QROOT@("Consult","Orderable")=@QROOT@("Consult","ItemCombo1")
24 . M @QROOT@("Consult","Orderable")=@QROOT@("Consult","ItemCombo2")
25 I $D(@QROOT@("Consult","DisplayGroup"))>1 D
26 . S CSLTGRP=$O(^ORD(100.98,"B","CSLT",0))
27 . I CSLTGRP=$O(@QROOT@("Consult","DisplayGroup",0)) Q
28 . M @QROOT@("Consult","Orderable")=@QROOT@("Consult","DisplayGroup")
29 . K @QROOT@("Consult","DisplayGroup")
30 ; set up actual dates for clinic list sources
31 S X=""
32 F S X=$O(@QROOT@("Patient","ListSource",X)) Q:X="" I $E(X)="c" D
33 . S DTRNG=$P(X,":",3,4),DTRNG=$$RNG2FM^ORRHCU(DTRNG)
34 . K @QROOT@("Patient","ListSource",X)
35 . S @QROOT@("Patient","ListSource",$P(X,":",1,2)_":"_DTRNG)=""
36 ; set up date ranges for search items based on general date range
37 S DTRNG=$O(@QROOT@("Search","DateRange",0))
38 I $D(@QROOT@("Document")) S @QROOT@("Document","Reference",DTRNG)=""
39 I $D(@QROOT@("Order")) S @QROOT@("Order","TimeFrame",DTRNG)=""
40 I $D(@QROOT@("Consult")) S @QROOT@("Consult","TimeFrame",DTRNG)=""
41 I $D(@QROOT@("Visit")) S @QROOT@("Visit","TimeFrame",DTRNG)=""
42 S ^TMP("ORRHCQ",$J,"TOT")=0
43 S ITR=$$NXTITER("")
44 Q
45ADDTO(IEN,CLINDT) ;Add active location to lst
46 N IEN42
47 S IEN42=0
48 I ($P($G(^SC(IEN,0)),U,3)="C"),$$ACTLOC^ORWU(IEN) D
49 . S @QROOT@("Patient","ListSource","c:"_IEN_":"_CLINDT)=""
50 I ($P($G(^SC(IEN,0)),U,3)="W"),$$ACTLOC^ORWU(IEN) D
51 . S IEN42=$G(^SC(IEN,42))
52 . S:IEN42 @QROOT@("Patient","ListSource","w:"_IEN42_":")=""
53 Q
54WCFDIV(DIVLST) ;Get wards/clinics for division
55 N XXI,XXJ,NNN,CDTR
56 S (XXI,NNN)=0,CDTR=""
57 F S XXI=$O(DIVLST(XXI)) Q:'XXI D
58 . S CDTR=$P(DIVLST(XXI),":",2,3)
59 . S XXJ=0
60 . F S XXJ=$O(^SC(XXJ)) Q:'XXJ D
61 . . I $P(^SC(XXJ,0),U,4)=+DIVLST(XXI) D ADDTO(XXJ,CDTR)
62 Q
63DODIV ; find Wards/Clinics for divisions
64 N XI,XJ,NN,WCLST,DIVLST,DIVPTR
65 S (XI,XJ,DIVLST)="",(NN,DIVPTR)=0
66 F S XI=$O(@QROOT@("Patient","ListSource",XI)) Q:XI="" I $E(XI)="d" D
67 . S NN=NN+1,DIVLST(NN)=$P(XI,":",2,4)
68 . K @QROOT@("Patient","ListSource",XI)
69 Q:$D(DIVLST)=1
70 S XI=""
71 F S XJ=$O(@QROOT@("Patient","ListSource",XJ)) Q:XJ="" I "cw"[$E(XJ) D
72 . S DIVPTR=$P($G(^SC($P(XJ,":",2),0)),U,4) Q:'DIVPTR
73 . F S XI=$O(DIVLST(XI)) Q:'XI D
74 . . I DIVPTR=+DIVLST(XI) K @QROOT@("Patient","ListSource",XJ)
75 D WCFDIV(.DIVLST)
76 Q
77CLEAR(OK) ; Clear/Cancel the query
78 K ^TMP("ORRHCQ",$J),^TMP("ORRHCQD",$J) ;LW UNCOMMENT
79 K ^TMP("ORRHCQB",$J),^TMP("ORRHCQS",$J) ;LW UNCOMMENT
80 S OK=1
81 Q
82NXTITER(X) ; Return the iterator for the next patient
83 ; ITER=Subscript;DFN;Item#
84 N SUB,ITM,DFNITM
85 S SUB=$P(X,";",1),ITM=$P(X,";",3)
86 F D Q:+DFNITM Q:SUB="" ; loop until DFN or no subscripts
87 . S DFNITM=$$NXTDFN(SUB,ITM)
88 . Q:+DFNITM
89 . S SUB=$O(^TMP("ORRHCQ",$J,"QRY","Patient","ListSource",SUB))
90 . Q:SUB=""
91 . D SETPTS(SUB)
92 . S ITM=0
93 Q:+DFNITM=0 ""
94 Q SUB_";"_DFNITM
95 ;
96NXTDFN(SUB,ITM) ; Return the next patient^item within a subscript
97 Q:SUB="" 0
98 N DFN S DFN=""
99 I $E(SUB)="r" D
100 . N RC,ITR
101 . M ITR=^TMP("ORRHCQ",$J,"PTLST",SUB,"ITR")
102 . S RC=$$NEXTPAT^RORAPI01(.ITR)
103 . M ^TMP("ORRHCQ",$J,"PTLST",SUB,"ITR")=ITR
104 . S DFN=$P(RC,U),ITM=0
105 E D
106 . S ITM=$O(^TMP("ORRHCQ",$J,"PTLST",SUB,+ITM))
107 . I ITM S DFN=+^TMP("ORRHCQ",$J,"PTLST",SUB,ITM)
108 Q DFN_";"_ITM
109 ;
110SETPTS(SUB) ; Set up to iterate through a patient list
111 N LST
112 I $E(SUB)="c" D CLINPTS^ORQRY01(.LST,$P(SUB,":",2),$P(SUB,":",3),$P(SUB,":",4)) M:$D(@LST)>1 ^TMP("ORRHCQ",$J,"PTLST",SUB)=@LST Q
113 I $E(SUB)="w" D BYWARD^ORWPT(.LST,$P(SUB,":",2))
114 I $E(SUB)="t" D TEAMPTS^ORQPTQ1(.LST,$P(SUB,":",2))
115 I $E(SUB)="s" D SPECPTS^ORQPTQ2(.LST,$P(SUB,":",2))
116 I $E(SUB)="p" D PROVPTS^ORQPTQ2(.LST,$P(SUB,":",2))
117 I $D(LST)>1 M ^TMP("ORRHCQ",$J,"PTLST",SUB)=LST Q
118 ;
119 N ITR
120 I ($E(SUB)="r"),'($$PATITER^RORAPI01(.ITR,$P(SUB,":",2),$P(SUB,":",3))) D
121 . M ^TMP("ORRHCQ",$J,"PTLST",SUB,"ITR")=ITR
122 Q
123QRYITR(VAL,ORRITR) ; Do query for the current iterator
124 ; VAL=PtSearched^RecordsFound^Iterator
125 S VAL=$$PTSCRN($P(ORRITR,";",2))
126 I VAL S $P(VAL,U,2)=$$QRYPT($P(ORRITR,";",2))
127 S $P(VAL,U,3)=$$NXTITER(ORRITR)
128 Q
129 ;
130PTSCRN(PATID) ; Return 1 if should continue with this patient
131 Q:$D(^TMP("ORRHCQ",$J,"DFN",PATID)) 0
132 N PRILST,LOCLST,DATRNG,CONT
133 M PRILST=^TMP("ORRHCQ",$J,"QRY","Patient","Primary")
134 M LOCLST=^TMP("ORRHCQ",$J,"QRY","Patient","Location")
135 S DATRNG=$O(^TMP("ORRHCQ",$J,"QRY","Patient","DateRange",0)),CONT=1
136 ;
137 ; check if pt has primary provider in the list
138 I $D(PRILST)>1 D
139 . N FND,IPP S FND=0,IPP=0
140 . F S IPP=$O(PRILST(IPP)) Q:'IPP S FND=$$PP^ORQRY(PATID,IPP) Q:FND
141 . I 'FND S CONT=0
142 Q:CONT=0 0
143 ;
144 ; check if pt has visit at during date range at optional location
145 I $L(DATRNG) D
146 . S:$D(LOCLST) CONT=$$ACT^ORQRY(PATID,$P(DATRNG,":"),$P(DATRNG,":",2),.LOCLST)
147 . S:'$D(LOCLST) CONT=$$ACT^ORQRY(PATID,$P(DATRNG,":"),$P(DATRNG,":",2))
148 I CONT S ^TMP("ORRHCQ",$J,"DFN",PATID)=""
149 Q CONT
150 ;
151QRYPT(PATID) ; Search for records and return the number found
152 N QRY,ROOT,CNT
153 K ^TMP("ORRHCQP",$J)
154 S ROOT="^TMP(""ORRHCQP"",$J)"
155 M QRY=^TMP("ORRHCQ",$J,"QRY")
156 D BYPT^ORQRY(ROOT,PATID,.QRY)
157 S CNT=$G(^TMP("ORRHCQP",$J,0,"Documents"))+$G(^("Orders"))+$G(^("Visits"))+$G(^("Consults"))
158 S ^TMP("ORRHCQ",$J,"TOT")=^TMP("ORRHCQ",$J,"TOT")+CNT
159 M ^TMP("ORRHCQD",$J)=^TMP("ORRHCQP",$J)
160 K ^TMP("ORRHCQP",$J)
161 Q CNT
162SORTBY(SEQ,FNM,FWD) ; Sort by a particular field
163 N ID,KEY
164 K ^TMP("ORRHCQB",$J),^TMP("ORRHCQS",$J)
165 S SEQ=0 I 'FWD S SEQ=^TMP("ORRHCQ",$J,"TOT")+1
166 S ID=0 F S ID=$O(^TMP("ORRHCQD",$J,ID)) Q:ID="" D
167 . S KEY=$E($G(^TMP("ORRHCQD",$J,ID,FNM),"~~~~~~~~~~~~~~~~"),1,64)
168 . S KEY=$TR(KEY,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
169 . S:KEY="" KEY=" "
170 . S ^TMP("ORRHCQB",$J,KEY,ID)=""
171 S KEY="" F S KEY=$O(^TMP("ORRHCQB",$J,KEY)) Q:KEY="" D
172 . S ID="" F S ID=$O(^TMP("ORRHCQB",$J,KEY,ID)) Q:ID="" D
173 . . S:FWD SEQ=SEQ+1 S:'FWD SEQ=SEQ-1
174 . . S ^TMP("ORRHCQS",$J,SEQ)=ID
175 Q
176SUBDTA(LST,FIRST,LAST) ; Return name-value pairs for subset of query data
177 N SEQ,COL,ID,ICOL,ILST S ILST=0
178 M COL=^TMP("ORRHCQ",$J,"COL")
179 F SEQ=FIRST:1:LAST D
180 . Q:'$D(^TMP("ORRHCQS",$J,SEQ))
181 . S ID=^TMP("ORRHCQS",$J,SEQ)
182 . S ILST=ILST+1,LST(ILST)="RowItemID="_ID
183 . S ICOL=0 F S ICOL=$O(COL(ICOL)) Q:'ICOL D
184 . . S ILST=ILST+1
185 . . S LST(ILST)=COL(ICOL)_"="_$G(^TMP("ORRHCQD",$J,ID,COL(ICOL)))
186 Q
187DETAIL(REF,ID) ; Return results of order identified by ID
188 K ^TMP("ORXPND",$J)
189 N ORESULTS,ORVP,LCNT,ORID S ORESULTS=1,LCNT=0
190 I ID[":" S ID=$P(ID,":",2) ;strip off prefix
191 S ORVP=$P(^OR(100,+ID,0),U,2),ORID=ID
192 D ORDERS^ORCXPND1 S ID=ORID
193 D ORDERS^ORCXPND2
194 K ^TMP("ORXPND",$J,"VIDEO")
195 S REF=$NA(^TMP("ORXPND",$J))
196 Q
197PTINFO(VAL,ID) ; Return patient info given an order, consult, or note
198 N DFN,X,X0,X1,X101
199 S VAL="",DFN=0,X=$P(ID,":")
200 I X="ORD"!(X="CST") S DFN=+$P(^OR(100,+$P(ID,":",2),0),U,2)
201 I X="DOC" S DFN=+$P(^TIU(8925,+$P(ID,":",2),0),U,2)
202 ;I X="VST" visits too?
203 Q:'DFN
204 S X0=^DPT(DFN,0),X1=$G(^(.1)),X101=$G(^(.101))
205 S VAL=$P(X0,U)_U_$P(X0,U,9)_U_X1_" "_X101
206 Q
207RNGFM(ORY,RNG) ;Return FM date range string
208 Q:'$L(RNG)
209 S ORY=$$RNG2FM^ORRHCU(RNG)
210 Q
Note: See TracBrowser for help on using the repository browser.