[796] | 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 | ; |
---|