1 | TMGSDAG ;TMG/kst/API FOR GETTING LIST OF APPTS;1/11/09
|
---|
2 | ;;1.0;TMG-LIB;**1**;1/11/09
|
---|
3 | ;
|
---|
4 | ;"Called into from TMGRPC5
|
---|
5 | ;
|
---|
6 | ;"=======================================================================
|
---|
7 | ;" API -- Public Functions.
|
---|
8 | ;"=======================================================================
|
---|
9 | ;"APPTLIST(STRTDATE,ENDDATE,FILTER,RESULTS,TMGMSG)
|
---|
10 | ;
|
---|
11 | ;"=======================================================================
|
---|
12 | ;"Dependancies
|
---|
13 | ;"=======================================================================
|
---|
14 | ;"SDAMA301,DIC
|
---|
15 | ;"=======================================================================
|
---|
16 | ;
|
---|
17 | APPTLIST(STRTDATE,ENDDATE,FILTER,RESULTS,TMGMSG)
|
---|
18 | ;"Purpose: To return a listing of appts, based on dates and filters). Provide a wrapper to $$SDAPI^SDAMA301
|
---|
19 | ;" that accepts data in external formats, and returns custom results in array.
|
---|
20 | ;"Input:STRTDATE -- Starting Date (in FMDate format, OR External format, e.g. Jan 1, 2005) (Time ignored)
|
---|
21 | ;" If value="I" or "" (i.e. 'indefinite'), then all dates up to End Date on returned
|
---|
22 | ;" ENDDATE -- OPTIONAL. Ending date (in FMDate, OR External format) (Time ignored)
|
---|
23 | ;" If not provided, then only dates for Starting date returned
|
---|
24 | ;" If value="I" (i.e. 'indefinite'), then all dates from Start Date on returned
|
---|
25 | ;" FILTER -- PASS BY REFERENCE. OPTIONAL. Format below. Any or all of the filters can be applied at once.
|
---|
26 | ;" All filters are optional.
|
---|
27 | ;" 1. LOCATION FILTER: "CLINIC"
|
---|
28 | ;" Specify one or more clinic names or IEN's, separated by "^", so that only
|
---|
29 | ;" appointments for these clincs will be retuned
|
---|
30 | ;" e.g. FILTER("CLINIC")="TEST CLINIC"
|
---|
31 | ;" e.g. FILTER("CLINIC")="PULM CLINIC^GYN CLINIC"
|
---|
32 | ;" e.g. FILTER("CLINIC")="123" <-- IEN in file 44 (HOSPITAL LOCATION)
|
---|
33 | ;" e.g. FILTER("CLINIC")="123^234^345" etc.
|
---|
34 | ;" 2. STATUS FILTER - "STATUS"
|
---|
35 | ;" Specify one or more status values, separated by "^", so that only
|
---|
36 | ;" appointments matching these status values will be returned
|
---|
37 | ;" Possible codEs:
|
---|
38 | ;" R -- Appointment cept
|
---|
39 | ;" I -- Inpatient
|
---|
40 | ;" NS -- No Show
|
---|
41 | ;" NSR -- No-show, rescheduled
|
---|
42 | ;" CP -- Cancelled by patient
|
---|
43 | ;" CPR -- Cancelled by patient, rescheduled
|
---|
44 | ;" CC -- Cancelled by clinic
|
---|
45 | ;" CCR -- Cancelled by clinic, rescheduled
|
---|
46 | ;" NT -- No action taken
|
---|
47 | ;" e.g. FILTER("STATUS")="NS"
|
---|
48 | ;" e.g. FILTER("STATUS")="CP^CPR^I" etc.
|
---|
49 | ;" 3. PATIENT FILTER -- "PATIENT"
|
---|
50 | ;" Specify one or more Patient names (External format) or IEN's, separated by "^",
|
---|
51 | ;" so that only appointments for these patients will be returned.
|
---|
52 | ;" e.g. FILTER("PATIENT")="JONES,DAVID S"
|
---|
53 | ;" e.g. FILTER("PATIENT")="JONES,DAVID S^SMITH,JOHN A" etc.
|
---|
54 | ;" e.g. FILTER("PATIENT")="123456" <-- IEN in PATIENT file
|
---|
55 | ;" e.g. FILTER("PATIENT")="123456^234567^345678" etc.
|
---|
56 | ;" 4. STOP CODES FILTER -- "STOP CODE"
|
---|
57 | ;" Specify one or more valid Primary Stop Code values (not IEN's), separated by "^",
|
---|
58 | ;" so that only appointments matching these values will be returned.
|
---|
59 | ;" Stop Code must be a valied AMIS REPORTING STOP CODE (field #1) on the CLINIC STOP file (#40.7)
|
---|
60 | ;" e.g. FILTER("STOP CODE")="197" <-- STOP CODE, not IEN
|
---|
61 | ;" e.g. FILTER("STOP CODE")="197^234^345"
|
---|
62 | ;" 5. QUANTITY FILTER -- "MAX"
|
---|
63 | ;" Specify a value, such that only the first N appts will be returned. If specified, then must
|
---|
64 | ;" be whole value > 0
|
---|
65 | ;" e.g. FILTER("MAX")=25 <-- Only return 1st 25 found appts
|
---|
66 | ;" NOTE: The $$SDAPI^SDAMA301 seems to support more filters. I could add support for them later...
|
---|
67 | ;" RESULTS: PASS BY REFERENCE. An OUT PARAMATER.
|
---|
68 | ;" RESULTS(Count)=RESULTS(Count)=PatientIEN;PatientName^DOB^FMFormatApptDateTime;ExtFormatApptDateTime^ClinicIEN;ClinicName^StatusCode;StatusName
|
---|
69 | ;" RESULTS(Count)=RESULTS(Count)=PatientIEN;PatientName^DOB^FMFormatApptDateTime;ExtFormatApptDateTime^ClinicIEN;ClinicName^StatusCode;StatusName
|
---|
70 | ;" RESULTS(Count)=RESULTS(Count)=PatientIEN;PatientName^DOB^FMFormatApptDateTime;ExtFormatApptDateTime^ClinicIEN;ClinicName^StatusCode;StatusName
|
---|
71 | ;" TMGMSG: PASS BY REFERENCE. An OUT PARAMETER -- Used for passing back errors.
|
---|
72 | ;" TMGMSG=Max count of error messages
|
---|
73 | ;" TMGMSG(Count)=ErrCode^Message (Count starts at 1,2,3...)
|
---|
74 | ;" TMGMSG(Count)=ErrCode^Message
|
---|
75 | ;" TMGMSG(Count)=ErrCode^Message
|
---|
76 | ;"Results: Returns # of found matching appts, or 0 if none, or -1 if error.
|
---|
77 | ;
|
---|
78 | NEW TMGRESULT SET TMGRESULT=0
|
---|
79 | SET TMGMSG=0
|
---|
80 | NEW TMGSDATE,TMGEDATE,TMGARRAY
|
---|
81 | KILL RESULTS
|
---|
82 | DO SETDATES(.STRTDATE,.ENDDATE,.TMGARRAY,.TMGMSG)
|
---|
83 | IF TMGMSG>0 SET TMGRESULT=-1 GOTO ALDONE
|
---|
84 | ;
|
---|
85 | IF $DATA(FILTER("CLINIC")) DO FILTR2(.FILTER,.TMGARRAY,.TMGMSG)
|
---|
86 | IF $DATA(FILTER("STATUS")) DO FILTR3(.FILTER,.TMGARRAY,.TMGMSG)
|
---|
87 | IF $DATA(FILTER("PATIENT")) DO FILTR4(.FILTER,.TMGARRAY,.TMGMSG)
|
---|
88 | IF $DATA(FILTER("STOP CODE")) DO FILTR13(.FILTER,.TMGARRAY,.TMGMSG)
|
---|
89 | IF TMGMSG>0 SET TMGRESULT=-1 GOTO ALDONE
|
---|
90 | ;
|
---|
91 | SET TMGARRAY("FLDS")="1;2;3"
|
---|
92 | SET TMGARRAY("SORT")="P" ;"Specify output format"
|
---|
93 | SET TMGRESULT=$$SDAPI^SDAMA301(.TMGARRAY)
|
---|
94 | IF TMGRESULT<0 DO
|
---|
95 | . DO HANDLERR(.TMGMSG)
|
---|
96 | ELSE DO GETRSLTS(.RESULTS)
|
---|
97 | ;
|
---|
98 | ALDONE QUIT TMGRESULT
|
---|
99 | ;
|
---|
100 | ;
|
---|
101 | SETDATES(TMGSDATE,TMGEDATE,TMGARRAY,TMGMSG)
|
---|
102 | ;"Purpose: convert external dates into internal format, Validate dates,
|
---|
103 | ;" and insert into TMGARRAY(1) filter
|
---|
104 | ;"Result: None
|
---|
105 | NEW DATE1,DATE2
|
---|
106 | SET TMGSDATE=$GET(TMGSDATE)
|
---|
107 | SET TMGEDATE=$GET(TMGEDATE)
|
---|
108 | IF TMGEDATE="" SET TMGEDATE=TMGSDATE
|
---|
109 | IF +TMGSDATE=TMGSDATE SET DATE1=TMGSDATE
|
---|
110 | ELSE DO GOTO:TMGMSG>0 SDDONE
|
---|
111 | . IF (TMGSDATE="I")!(TMGSDATE="") SET DATE1="" QUIT
|
---|
112 | . NEW MSG
|
---|
113 | . DO DT^DILF("T",TMGSDATE,.MSG)
|
---|
114 | . IF MSG=-1 DO QUIT
|
---|
115 | . . SET TMGMSG=TMGMSG+1
|
---|
116 | . . SET TMGMSG(TMGMSG)="-1^Invalid Start Date"
|
---|
117 | . SET DATE1=MSG\1
|
---|
118 | IF +TMGEDATE=TMGEDATE SET DATE2=TMGEDATE
|
---|
119 | ELSE DO
|
---|
120 | . IF (TMGEDATE="I")!(TMGEDATE="") SET DATE2="" QUIT
|
---|
121 | . NEW MSG
|
---|
122 | . DO DT^DILF("T",TMGEDATE,.MSG)
|
---|
123 | . IF MSG=-1 DO QUIT
|
---|
124 | . . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
125 | . . SET TMGMSG(TMGMSG)="-1^Invalid End Date"
|
---|
126 | . SET DATE2=MSG\1
|
---|
127 | IF (DATE1="")&(DATE2="") GOTO SDDONE
|
---|
128 | SET DATE1=DATE1\1
|
---|
129 | SET DATE2=DATE2\1
|
---|
130 | SET TMGARRAY(1)=DATE1_";"_DATE2
|
---|
131 | SDDONE ;
|
---|
132 | QUIT
|
---|
133 | ;
|
---|
134 | ;
|
---|
135 | FILTR2(FILTER,TMGARRAY,TMGMSG)
|
---|
136 | ;"Purpose: To take and validate user input, and insert into TMGARRAY(2) filter
|
---|
137 | ;
|
---|
138 | NEW PLACES SET PLACES=$GET(FILTER("CLINIC"))
|
---|
139 | NEW LOC,STR
|
---|
140 | SET STR=""
|
---|
141 | FOR SET LOC=$PIECE(PLACES,"^",1) QUIT:(LOC="") DO
|
---|
142 | . IF +LOC'=LOC DO
|
---|
143 | . . NEW DIC,X,Y
|
---|
144 | . . SET DIC=44,DIC(0)="M"
|
---|
145 | . . SET X=LOC DO ^DIC
|
---|
146 | . . IF +Y>0 SET LOC=+Y
|
---|
147 | . . ELSE DO
|
---|
148 | . . . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
149 | . . . SET TMGMSG(TMGMSG)="-1^'"_LOC_"' clinic location NOT FOUND."
|
---|
150 | . IF LOC>0 DO
|
---|
151 | . . IF STR'="" SET STR=STR_";"
|
---|
152 | . . SET STR=STR_LOC
|
---|
153 | . IF $LENGTH(PLACES,"^")=1 SET PLACES="" QUIT
|
---|
154 | . ELSE SET PLACES=$PIECE(PLACES,2,$LENGTH(PLACES,"^"))
|
---|
155 | IF STR'="" SET TMGARRAY(2)=STR
|
---|
156 | ;
|
---|
157 | F2DONE QUIT
|
---|
158 | ;
|
---|
159 | ;
|
---|
160 | FILTR3(FILTER,TMGARRAY,TMGMSG)
|
---|
161 | ;"Purpose: To take user input, and insert into TMGARRAY(3) filter
|
---|
162 | NEW STR SET STR=$GET(FILTER("STATUS"))
|
---|
163 | SET STR=$TRANSLATE(STR,"^",";")
|
---|
164 | IF STR'="" SET TMGARRAY(3)=STR
|
---|
165 | QUIT
|
---|
166 | ;
|
---|
167 | ;
|
---|
168 | FILTR4(FILTER,TMGARRAY,TMGMSG)
|
---|
169 | ;"Purpose: To take and validate user input, and insert into TMGARRAY(4) filter
|
---|
170 | ;
|
---|
171 | NEW NAMES SET NAMES=$GET(FILTER("PATIENT"))
|
---|
172 | NEW ANAME,STR,DFN
|
---|
173 | SET STR=""
|
---|
174 | FOR SET ANAME=$PIECE(NAMES,"^",1) QUIT:(ANAME="") DO
|
---|
175 | . SET DFN=0
|
---|
176 | . IF +ANAME'=ANAME DO
|
---|
177 | . . NEW TMG2MSG
|
---|
178 | . . DO FIND^DIC(2,,".01","MP",ANAME,"*","","","","TMG2MSG")
|
---|
179 | . . NEW NUM SET NUM=+$GET(TMG2MSG("DILIST",0))
|
---|
180 | . . IF NUM=0 DO QUIT
|
---|
181 | . . . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
182 | . . . SET TMGMSG(TMGMSG)="-1^Patient name: '"_ANAME_"' NOT FOUND"
|
---|
183 | . . IF NUM>1 DO QUIT
|
---|
184 | . . . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
185 | . . . SET TMGMSG(TMGMSG)="-1^Name: "_ANAME_" Not specific. Multiple patients with this name exist."
|
---|
186 | . . SET DFN=+$GET(TMG2MSG("DILIST",1,0))
|
---|
187 | . IF DFN>0 DO
|
---|
188 | . . IF STR'="" SET STR=STR_";"
|
---|
189 | . . SET STR=STR_DFN
|
---|
190 | . IF $LENGTH(NAMES,"^")=1 SET NAMES="" QUIT
|
---|
191 | . ELSE SET NAMES=$PIECE(NAMES,2,$LENGTH(NAMES,"^"))
|
---|
192 | IF STR'="" SET TMGARRAY(4)=STR
|
---|
193 | ;
|
---|
194 | F4DONE QUIT
|
---|
195 | ;
|
---|
196 | ;
|
---|
197 | FILTR13(FILTER,TMGARRAY,TMGMSG)
|
---|
198 | ;"Purpose: To take user input, and insert into TMGARRAY(13) filter
|
---|
199 | NEW STR SET STR=$GET(FILTER("STOP CODE"))
|
---|
200 | SET STR=$TRANSLATE(STR,"^",";")
|
---|
201 | IF STR'="" SET TMGARRAY(13)=STR
|
---|
202 | QUIT
|
---|
203 | ;
|
---|
204 | ;
|
---|
205 | HANDLERR(TMGMSG)
|
---|
206 | ;"Purpose: repackage errors into format for this function
|
---|
207 | ;"
|
---|
208 | NEW CODE SET CODE=0
|
---|
209 | FOR SET CODE=$ORDER(^TMG($J,"SDAMA301",CODE)) QUIT:(CODE="") DO
|
---|
210 | . NEW DESCR SET DESCR=$GET(^TMG($J,"SDAMA301",CODE))
|
---|
211 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
212 | . SET TMGMSG(TMGMSG)=CODE_"^"_DESCR
|
---|
213 | QUIT
|
---|
214 | ;
|
---|
215 | ;
|
---|
216 | GETRSLTS(RESULTS)
|
---|
217 | ;"Purpose: To repackage results into format for this function
|
---|
218 | ;"Input: RESULTS -- PASS BY REFERENCE. An OUT PARAMETER.
|
---|
219 | ;"Output: RESULTS(Count)=PatientIEN;PatientName^DOB^FMFormatApptDateTime;ExtFormatApptDateTime^ClinicIEN;ClinicName^StatusCode;StatusName
|
---|
220 | KILL RESULTS
|
---|
221 | NEW COUNT SET COUNT=0
|
---|
222 | NEW DFN SET DFN=0
|
---|
223 | FOR SET DFN=$ORDER(^TMP($J,"SDAMA301",DFN)) QUIT:(DFN="") DO
|
---|
224 | . NEW NAME SET NAME=$PIECE($GET(^DPT(DFN,0)),"^",1)
|
---|
225 | . NEW STR SET STR=DFN_";"_NAME
|
---|
226 | . NEW DOB SET DOB=$PIECE($GET(^DPT(DFN,0)),"^",3)
|
---|
227 | . SET DOB=$PIECE($$FMTE^XLFDT(DOB,+5),"@",1)
|
---|
228 | . SET STR=STR_"^"_DOB
|
---|
229 | . NEW APPT SET APPT=""
|
---|
230 | . FOR SET APPT=$ORDER(^TMP($J,"SDAMA301",DFN,APPT)) QUIT:(APPT="") DO
|
---|
231 | . . NEW VALUE SET VALUE=$GET(^TMP($J,"SDAMA301",DFN,APPT)) QUIT:VALUE=""
|
---|
232 | . . NEW TIME SET TIME=$$FMTE^XLFDT(APPT,+5) ;"+5 = MM/DD/YYYY@HH:MM:SS format
|
---|
233 | . . SET $PIECE(VALUE,"^",1)=APPT_";"_TIME
|
---|
234 | . . SET VALUE=STR_"^"_VALUE
|
---|
235 | . . SET COUNT=COUNT+1
|
---|
236 | . . SET RESULTS(COUNT)=VALUE
|
---|
237 | ;
|
---|
238 | QUIT |
---|