1 | TMGSDAVG ;TMG/kst/Get Schedule Availability Getting API ;12/08/08
|
---|
2 | ;;1.0;TMG-LIB;**1**;12/08/08
|
---|
3 | ;
|
---|
4 | ;"TMG SCHEDULING AVAILIBILITY GETTING
|
---|
5 | ;"Kevin Toppenberg MD
|
---|
6 | ;"GNU General Public License (GPL) applies
|
---|
7 | ;"7-12-2005
|
---|
8 | ;
|
---|
9 | ;"NOTE: Much of this code originated from SDB*.m
|
---|
10 | ;"Called into from TMGRPC5
|
---|
11 | ;"
|
---|
12 | ;"=======================================================================
|
---|
13 | ;" API -- Public Functions.
|
---|
14 | ;"=======================================================================
|
---|
15 | ;"GETAVAIL(TMGIEN,TMGSTRTDT,TMGENDDT,TMGAVAIL,TMGMSG) -- Return an array with appt slot information: time, availibility
|
---|
16 | ;
|
---|
17 | ;"=======================================================================
|
---|
18 | ;" Private Functions.
|
---|
19 | ;"=======================================================================
|
---|
20 | ;"GETINFO(TMGIEN,TMG1DATE,TMGAVAIL,SAVARRAY) -- extract information from ST node, and return info into TMGAVAIL array
|
---|
21 | ;
|
---|
22 | ;"=======================================================================
|
---|
23 | ;"Dependancies
|
---|
24 | ;"=======================================================================
|
---|
25 | ;"=======================================================================
|
---|
26 | ;
|
---|
27 | GETAVAIL(TMGIEN,TMGSTRTDT,TMGENDDT,TMGAVAIL,TMGMSG)
|
---|
28 | ;"Purpose: Return an array with appt slot information: time, availibility
|
---|
29 | ;"Input: TMGIEN -- the IEN in file 44 (HOSPITAL LOCATION) to check.
|
---|
30 | ;" TMGSTRTDT -- The beginning of the date range requested
|
---|
31 | ;" TMGENDDT -- The end of the date range requested
|
---|
32 | ;" TMGAVAIL -- PASS BY REFERENCE, an OUT PARAMETER. Format below. Prior values KILLED
|
---|
33 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
34 | ;" TMGMSG=line count of error messages
|
---|
35 | ;" TMGMSG(1)=ErrMsg
|
---|
36 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
37 | ;"Output: TMGAVAIL filled as follows:
|
---|
38 | ;" TMGAVAIL("INFO","APPTLEN")=LengthOfApptSlot
|
---|
39 | ;" TMGAVAIL(Date,SlotStartTime)=NumOpenings^NumTotalSlotsAtTime
|
---|
40 | ;" TMGAVAIL(Date,SlotStartTime)=NumOpenings^NumTotalSlotsAtTime
|
---|
41 | ;"Note: If a clinic is not set up for a given day in date range, no results will be
|
---|
42 | ;" returned for that invalid day.
|
---|
43 | ;"Result: 1 = Success or
|
---|
44 | ;" 0 = Intermediate success
|
---|
45 | ;" -1 = error
|
---|
46 | ;
|
---|
47 | NEW TMGRESULT SET TMGRESULT=1
|
---|
48 | ;"---Validate input values ---
|
---|
49 | SET TMGIEN=+$GET(TMGIEN)
|
---|
50 | IF (TMGIEN'>0)!($DATA(^SC(TMGIEN))=0) DO GOTO GAVDONE
|
---|
51 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
52 | . SET TMGMSG(TMGMSG)="Location value of '"_TMGIEN_"' does not appear to refer to actual location."
|
---|
53 | . SET TMGRESULT=-1
|
---|
54 | SET TMGSTRTDT=$GET(TMGSTRTDT)\1
|
---|
55 | IF (TMGSTRTDT'?7N) DO GOTO GAVDONE
|
---|
56 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
57 | . SET TMGMSG(TMGMSG)="Date: "_TMGSTRTDT_" Doesn't seem to be proper start date, in Fileman format."
|
---|
58 | . SET TMGRESULT=-1
|
---|
59 | SET TMGENDDT=$GET(TMGENDDT)\1
|
---|
60 | IF (TMGENDDT'?7N) DO GOTO GAVDONE
|
---|
61 | . SET TMGMSG=+$GET(TMGMSG)+1
|
---|
62 | . SET TMGMSG(TMGMSG)="Date: "_TMGENDDT_" Doesn't seem to be proper start date, in Fileman format."
|
---|
63 | . SET TMGRESULT=-1
|
---|
64 | ;
|
---|
65 | KILL TMGAVAIL
|
---|
66 | NEW TMGSAV ;"Scatch temp save array to speed processing.
|
---|
67 | NEW TMG1DATE SET TMG1DATE=TMGSTRTDT
|
---|
68 | FOR DO SET TMG1DATE=$$ADD2DATE^TMGSDAU1(TMG1DATE,1) QUIT:(TMG1DATE>TMGENDDT)!(TMGRESULT=-1)
|
---|
69 | . SET TMGRESULT=$$GETINFO(TMGIEN,TMG1DATE,.TMGAVAIL,.TMGSAV,.TMGMSG)
|
---|
70 | . IF TMGRESULT=1 QUIT ;"Skip error checking
|
---|
71 | . IF $GET(TMGMSG(1))["NO TEMPLATE" DO QUIT
|
---|
72 | . . KILL TMGMSG
|
---|
73 | . . SET TMGRESULT=1 ;"Ignore errors when checking days not defined in clinic.
|
---|
74 | ;
|
---|
75 | GAVDONE ;
|
---|
76 | QUIT TMGRESULT
|
---|
77 | ;
|
---|
78 | ;
|
---|
79 | GETINFO(TMGIEN,TMG1DATE,TMGAVAIL,TMGSAV,TMGMSG)
|
---|
80 | ;"Purpose: To extract information from ST node, and return info into TMGAVAIL array
|
---|
81 | ;"Input: TMGIEN -- IEN in file 44
|
---|
82 | ;" TMG1DATE -- The date to get info for
|
---|
83 | ;" TMGAVAIL -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
84 | ;" TMGAVAIL("INFO","APPTLEN")=LengthOfApptSlot
|
---|
85 | ;" TMGAVAIL(Date,SlotStartTime)=NumOpenings^NumScheduled^NumTotalSlotsAtTime
|
---|
86 | ;" TMGAVAIL(Date,SlotStartTime)=NumOpenings^NumScheduled^NumTotalSlotsAtTime
|
---|
87 | ;" (Date is in FMFormat)
|
---|
88 | ;" NOTE: if no availibility then the following is returned:
|
---|
89 | ;" TMGAVAIL(Date,"0000")=0^0^0
|
---|
90 | ;" TMGSAV -- PASS BY REFERENCE. This is just a speed enhancing
|
---|
91 | ;" array, where prior effort at prior lookups is stored for future reference
|
---|
92 | ;" TMGMSG -- PASS BY REFERENCE, an OUT PARAMETER. Format:
|
---|
93 | ;" TMGMSG=line count of error messages
|
---|
94 | ;" TMGMSG(1)=ErrMsg
|
---|
95 | ;" TMGMSG(2)=ErrMsg etc..
|
---|
96 | ;"Result: 1 = Success or
|
---|
97 | ;" 0 = Intermediate success
|
---|
98 | ;" -1 = error
|
---|
99 | NEW TMGRESULT
|
---|
100 | SET TMGRESULT=$$ENSUR1ST^TMGSDAU(TMGIEN,TMG1DATE,.TMGMSG) ;"Ensure ST node is set up
|
---|
101 | IF TMGRESULT=-1 GOTO GIDONE
|
---|
102 | ;
|
---|
103 | NEW STR SET STR=$GET(^SC(TMGIEN,"ST",TMG1DATE\1,1))
|
---|
104 | IF STR="" SET TMGRESULT=0 GOTO GIDONE
|
---|
105 | ;
|
---|
106 | SET TMGAVAIL("INFO","APPTLEN")=$PIECE($GET(^SC(TMGIEN,"SL")),"^",1)
|
---|
107 | ;
|
---|
108 | ;"--- Find applicable T node, which holds slot information
|
---|
109 | ;"Search backwards from specified date, looking for matching day of week.
|
---|
110 | NEW SLOTREF SET SLOTREF=""
|
---|
111 | NEW DOW SET DOW=$$DOW^XLFDT(TMG1DATE,1) ;"DOW=Day of Week (0-6)
|
---|
112 | NEW DATE SET DATE=TMG1DATE
|
---|
113 | FOR DO SET DATE=$ORDER(^SC(TMGIEN,"T",DATE),-1) QUIT:(DATE'>0)!(SLOTREF'="")
|
---|
114 | . IF $DATA(^SC(TMGIEN,"T",DATE))=0 QUIT ;"Needed for first cycle
|
---|
115 | . IF $$DOW^XLFDT(DATE,1)'=DOW QUIT ;"Only consider entries on same day of week
|
---|
116 | . SET SLOTREF=$NAME(^SC(TMGIEN,"T",DATE,2))
|
---|
117 | IF SLOTREF="" DO GOTO GIDONE
|
---|
118 | . SET TMGRESULT=0
|
---|
119 | . SET TMGAVAIL(TMG1DATE\1,"0000")="0^0^0" ;"Store arbitrary zero slot at 0000 to show we looked.
|
---|
120 | ;
|
---|
121 | SET DATE=TMG1DATE\1
|
---|
122 | ;"Cycle through slots, and get openings.
|
---|
123 | ;"Note: Another approach would be look at appts themselves in the "S" nodes instead of using
|
---|
124 | ;" compiled "ST" node, originating from appts. This assumes that VistA code will keep
|
---|
125 | ;" "ST" nodes refreshed as new appts are added.
|
---|
126 | NEW CODES SET CODES="{}&%?#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz" ;"Note 0 is 37th character
|
---|
127 | NEW COUNT SET COUNT=0
|
---|
128 | FOR SET COUNT=$ORDER(@SLOTREF@(COUNT)) QUIT:(COUNT'>0) DO
|
---|
129 | . NEW SLENTRY,SLTIME
|
---|
130 | . SET SLENTRY=$GET(@SLOTREF@(COUNT,0)) QUIT:SLENTRY=""
|
---|
131 | . SET SLTIME=$PIECE(SLENTRY,"^",1) QUIT:SLTIME=""
|
---|
132 | . NEW TOTALSL SET TOTALSL=+$PIECE(SLENTRY,"^",2)
|
---|
133 | . NEW APPT SET APPT=DATE_"."_SLTIME
|
---|
134 | . NEW INDEX SET INDEX=$$SLTINDEX^TMGSDAU(TMGIEN,APPT,.TMGSAV)
|
---|
135 | . NEW CHAR SET CHAR=$EXTRACT(STR,INDEX)
|
---|
136 | . IF CHAR="" SET CHAR=" "
|
---|
137 | . NEW OPENSL SET OPENSL=$FIND(CODES,CHAR)-$FIND(CODES,"0")
|
---|
138 | . NEW NUMSCH SET NUMSCH=TOTALSL-OPENSL
|
---|
139 | . SET TMGAVAIL(DATE,SLTIME)=OPENSL_"^"_NUMSCH_"^"_TOTALSL
|
---|
140 | GIDONE ;
|
---|
141 | QUIT TMGRESULT
|
---|
142 | ;
|
---|
143 | ; |
---|