| 1 | TMGSDAM2 ;TMG/kst/ENHANCED MAKE AN APPOINTMENT SDAPI ;1/9/09
 | 
|---|
| 2 |          ;;1.0;TMG-LIB;**1**;1/9/09
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;"NOTE: Original header:
 | 
|---|
| 5 |  ;"SDVWMKPI        ;ENHANCED MAKE AN APPOINTMENT SDAPI 11/18/06
 | 
|---|
| 6 |  ;"       ;VWSD*3.2;;;;;Build 8
 | 
|---|
| 7 |  ;"(Moved to this namespace for customization/alteration)
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 |  ;"Called into from TMGRPC5
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;"=======================================================================
 | 
|---|
| 12 |  ;" API -- Public Functions.
 | 
|---|
| 13 |  ;"=======================================================================
 | 
|---|
| 14 |  ;"EN(DFN,APPTDATE,SC,STYP,SDARRAY) -- MAKE AN APPOINTMENT
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 |  ;"=======================================================================
 | 
|---|
| 17 |  ;" API -- Public Functions.
 | 
|---|
| 18 |  ;"=======================================================================
 | 
|---|
| 19 |  ;"CHKAVAIL(SAVE,APPTDATE)
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  ;"=======================================================================
 | 
|---|
| 22 |  ;"Dependancies
 | 
|---|
| 23 |  ;"=======================================================================
 | 
|---|
| 24 |  ;
 | 
|---|
| 25 |  ;"=======================================================================
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 | EN(DFN,APPTDATE,SC,STYP,SDARRAY)     ;
 | 
|---|
| 28 |         ;"Purpose: MAKE AN APPOINTMENT
 | 
|---|
| 29 |         ;"INPUT: DFN -- PATIENT IEN (REQUIRED)
 | 
|---|
| 30 |         ;"       APPTDATE -- APPOINTMENT DATE (REQUIRED) -- FM format
 | 
|---|
| 31 |         ;"       SC -- IEN of CLINIC FOR APPOINTMENT (REQUIRED) (file 44)
 | 
|---|
| 32 |         ;"       STYP (REQUIRED)
 | 
|---|
| 33 |         ;"            =1 C&P
 | 
|---|
| 34 |         ;"            =2 10-10
 | 
|---|
| 35 |         ;"            =3 SCHEDULED APPOINTMENT
 | 
|---|
| 36 |         ;"            =4 UNSCHEDULED VISIT
 | 
|---|
| 37 |         ;"       SDARRAY -- PASS BY REFERENCE.  Format:
 | 
|---|
| 38 |         ;"         SDARRAY("DATE NOW") (REQ AT TIME REQUEST MADE) (OPTIONAL.  Defaults to NOW is not provide)
 | 
|---|
| 39 |         ;"         SDARRAY("LAB DATE TIME ASSOCIATED") = "" OR DATE/TIME     (OPTIONAL)
 | 
|---|
| 40 |         ;"         SDARRAY("X-RAY DATE TIME ASSOCIATED") = "" OR DATE/TIME   (OPTIONAL)
 | 
|---|
| 41 |         ;"         SDARRAY("EKG DATE TIME ASSOCIATED") = "" OR DATE/TIME     (OPTIONAL)
 | 
|---|
| 42 |         ;"         SDARRAY("APPT TYPE") = 9   (REQUIRED)
 | 
|---|
| 43 |         ;"                9 for REGULAR APPOINTMENT TYPE   (ptr 409.1)
 | 
|---|
| 44 |         ;"         SDARRAY("APPT SUB-CATEGORY") = "0" (NOT USED)
 | 
|---|
| 45 |         ;"                "0" for none   (ptr 35.2)
 | 
|---|
| 46 |         ;"         SDARRAY("SCHED_REQ_TYPE")='O' (REQUIRED)
 | 
|---|
| 47 |         ;"                'O' FOR OTHER THAN 'NEXT AVA.' APPT.;  (set of codes)
 | 
|---|
| 48 |         ;"                --I think this is for File 2, field 1900, subfield 25
 | 
|---|
| 49 |         ;"                 N:'NEXT AVAILABLE' APPT.
 | 
|---|
| 50 |         ;"                 C:OTHER THAN 'NEXT AVA.' (CLINICIAN REQ.)
 | 
|---|
| 51 |         ;"                 P:OTHER THAN 'NEXT AVA.' (PATIENT REQ.)
 | 
|---|
| 52 |         ;"                 W:WALKIN APPT.
 | 
|---|
| 53 |         ;"                 M:MULTIPLE APPT. BOOKING
 | 
|---|
| 54 |         ;"                 A:AUTO REBOOK
 | 
|---|
| 55 |         ;"                 O:OTHER THAN 'NEXT AVA.' APPT.
 | 
|---|
| 56 |         ;"         SDARRAY("NEXT APPT IND")=0 (REQUIRED)  (0 FOR NO)
 | 
|---|
| 57 |         ;"         SDARRAY("DESIRED DATE TIME OF APPT")=APPTDATE (OPTIONAL)
 | 
|---|
| 58 |         ;"         SDARRAY("FOLLOWUP VISIT INDICATOR")= (REQUIRED)
 | 
|---|
| 59 |         ;"                 "0" FOR NO
 | 
|---|
| 60 |         ;"                 "1" FOR YES
 | 
|---|
| 61 |         ;"         SDARRAY("X RAY DATA FREE TEXT")=  (OPTIONAL)
 | 
|---|
| 62 |         ;"         SDARRAY("OTHER DATA FREE TEXT")=  (OPTIONAL)
 | 
|---|
| 63 |         ;"         SDARRAY("OTHER WARD LOCATION")=   (OPTIONAL)
 | 
|---|
| 64 |         ;"         SDARRAY("DATA ENTRY CLERK")=      (DEFAULTS TO DUZ IF NOT PROVIDED)
 | 
|---|
| 65 |         ;"                 DUZ OR NEW PERSON (FILE 200) PTR
 | 
|---|
| 66 |         ;"         SDARRAY("PRIOR XRAY RESULTS TO CLINIC")= (OPTIONAL)
 | 
|---|
| 67 |         ;"                  "Y" OR ""
 | 
|---|
| 68 |         ;"         SDARRAY("CHECKED-IN DATE")=  (OPTIONAL)
 | 
|---|
| 69 |         ;"               "" OR DATE APPOINTMENT MADE
 | 
|---|
| 70 |         ;"               FOR AN UNSCHEDULED VISIT
 | 
|---|
| 71 |         ;"
 | 
|---|
| 72 |         ;"XQSDVWSI ; EXIST AS NON-INTERACTIVE SILENT NODE W/O WRITE FOR XQOR ROUTINES
 | 
|---|
| 73 |         ;"SDVWNVAI ; EXIST AS NON-VA RELATED PFSS EVENT MODE
 | 
|---|
| 74 |         ;"                            = "D" DISABLING THE NEED FOR ICN
 | 
|---|
| 75 |         ;"                            = "O" AS OTHER NON-VA ICN SYSTEM ( FUTURE)
 | 
|---|
| 76 |         ;"
 | 
|---|
| 77 |         ;"RESULTS: 1 = OK,APPOINTMENT SUCCESSFULLY MADE
 | 
|---|
| 78 |         ;"         NEG NUMBER= ERROR
 | 
|---|
| 79 |         ;"          -101 INVALID PATIENT DFN
 | 
|---|
| 80 |         ;"          -102 INVALID HOSPITAL LOCATION IEN (SC)
 | 
|---|
| 81 |         ;"          -103 APPTDATE < DATE NOW
 | 
|---|
| 82 |         ;"          -104 INVALID STYP or MODE
 | 
|---|
| 83 |         ;"          // (removed) -105 IF $GET(SDARRAY("DATE NOW"))=""
 | 
|---|
| 84 |         ;"          -106 IF $GET(SDARRAY("APPT TYPE"))=""
 | 
|---|
| 85 |         ;"          -107 IF $GET(SDARRAY("SCHED_REQ_TYPE"))=""
 | 
|---|
| 86 |         ;"          -108 IF $GET(SDARRAY("NEXT APPT IND"))=""
 | 
|---|
| 87 |         ;"          // (removed) -109 IF $GET(SDARRAY("DATA ENTRY CLERK"))=""
 | 
|---|
| 88 |         ;"          -110 IF $GET(SDARRAY("FOLLOWUP VISIT INDICATOR")=""
 | 
|---|
| 89 |         ;"          -111 NO SCHEDULED SLOT WHERE SCHED APPT IS WANTED
 | 
|---|
| 90 |         ;
 | 
|---|
| 91 |         N TIMEDD
 | 
|---|
| 92 |         N SDCL,SDT,SDDA,SDMODE,SDORG
 | 
|---|
| 93 |         N CNT,SDY,DAYW,NDOW,TMG1DATE,FOUND,VAL,MULTM,START,INCRM
 | 
|---|
| 94 |         N APTTIME,OV2,VAL2
 | 
|---|
| 95 |         N SDSL,SL,SDSDATE,STARTDAY,SDHDL,SDEMP,SDMKHDL,SDMADE,SDLOCK,SDAPTYP,SDCOL
 | 
|---|
| 96 |         N TMGRESULT SET TMGRESULT=1 ;"Default to success
 | 
|---|
| 97 |         N TMGMSG
 | 
|---|
| 98 |         ;
 | 
|---|
| 99 |         N PURVISIT,SAVENOW,OVERBOOK,ELIGIB,OVERBOKM
 | 
|---|
| 100 |         ;
 | 
|---|
| 101 |         ;"VALIDATE DFN, SC AS VALID PATIENTS AND CLINIC
 | 
|---|
| 102 |         IF '$D(^DPT(DFN,0)) SET TMGRESULT="-101^INVALID PATIENT DFN" GOTO ENDONE
 | 
|---|
| 103 |         IF '$D(^SC(SC,0)) SET TMGRESULT="-102^INVALID HOSPITAL LOCATION IEN" GOTO ENDONE
 | 
|---|
| 104 |         ;
 | 
|---|
| 105 |         ;"CHECK DATE>=NOW
 | 
|---|
| 106 |         IF $GET(SDARRAY("DATE NOW"))="" SET SDARRAY("DATE NOW")="NOW"
 | 
|---|
| 107 |         . ;"SET TMGRESULT=-105 GOTO ENDONE
 | 
|---|
| 108 |         SET SDARRAY("DATE NOW")=$$E2IDATE(SDARRAY("DATE NOW"))
 | 
|---|
| 109 |         SET (SAVENOW,X)=SDARRAY("DATE NOW")
 | 
|---|
| 110 |         IF APPTDATE<SAVENOW SET TMGRESULT="-103^APPTDATE < DATE NOW" GOTO ENDONE
 | 
|---|
| 111 |         IF STYP=4 SET APPTDATE=X ;"If unscheduled visit, force date to NOW
 | 
|---|
| 112 |         ;"FORMAT APPTDATE BELOW SHOULD BE FOUND IN NODE BELOW
 | 
|---|
| 113 |         IF $GET(^SC(SC,"S",APPTDATE,0))=APPTDATE DO
 | 
|---|
| 114 |         . SET CNT=0
 | 
|---|
| 115 |         . FOR  SET CNT=$ORDER(^SC(SC,"S",APPTDATE,1,CNT)) Q:CNT=""  DO
 | 
|---|
| 116 |         . . SET SDY=CNT+1
 | 
|---|
| 117 |         ELSE  DO
 | 
|---|
| 118 |         . SET SDY=1
 | 
|---|
| 119 |         IF (STYP<1)!(STYP>4) SET TMGRESULT="-104^INVALID STYP or MODE" GOTO ENDONE
 | 
|---|
| 120 |         ;
 | 
|---|
| 121 |         IF $GET(SDARRAY("DATA ENTRY CLERK"))="" DO
 | 
|---|
| 122 |         . SET SDARRAY("DATA ENTRY CLERK")=DUZ
 | 
|---|
| 123 |         . ;"SET TMGRESULT=-109 GOTO ENDONE
 | 
|---|
| 124 |         ;
 | 
|---|
| 125 |         ;"CHECK OTHER REQUIRED VARIABLES
 | 
|---|
| 126 |         IF $GET(SDARRAY("APPT TYPE"))="" DO  GOTO ENDONE
 | 
|---|
| 127 |         . SET TMGRESULT="-106^APPT TYPE NOT SPECIFIED"
 | 
|---|
| 128 |         IF $GET(SDARRAY("SCHED_REQ_TYPE"))="" DO  GOTO ENDONE
 | 
|---|
| 129 |         . SET TMGRESULT="-107^SCHED REQ TYPE NOT SPECIFIED"
 | 
|---|
| 130 |         IF $GET(SDARRAY("NEXT APPT IND"))="" DO  GOTO ENDONE
 | 
|---|
| 131 |         . SET TMGRESULT="-108^NEXT APPT IND NOT SPECIFIED"
 | 
|---|
| 132 |         IF $GET(SDARRAY("FOLLOWUP VISIT INDICATOR"))="" DO  GOTO ENDONE
 | 
|---|
| 133 |         . SET TMGRESULT="-110^FOLLOWUP VISIT INDICATOR NOT SPECIFIED"
 | 
|---|
| 134 |         ;
 | 
|---|
| 135 |         ;"ENSURE EXISTANCE OF VARIABLES / CONVERT DATES IF NEEDED
 | 
|---|
| 136 |         SET SDARRAY("CHECKED-IN DATE")=$$E2IDATE($GET(SDARRAY("CHECKED-IN DATE")))
 | 
|---|
| 137 |         SET SDARRAY("LAB DATE TIME ASSOCIATED")=$$E2IDATE($GET(SDARRAY("LAB DATE TIME ASSOCIATED")))
 | 
|---|
| 138 |         SET SDARRAY("X-RAY DATE TIME ASSOCIATED")=$$E2IDATE($GET(SDARRAY("X-RAY DATE TIME ASSOCIATED")))
 | 
|---|
| 139 |         SET SDARRAY("EKG DATE TIME ASSOCIATED")=$$E2IDATE($GET(SDARRAY("EKG DATE TIME ASSOCIATED")))
 | 
|---|
| 140 |         SET SDARRAY("APPT TYPE")=$GET(SDARRAY("APPT TYPE"))
 | 
|---|
| 141 |         SET SDARRAY("SCHED_REQ_TYPE")=$GET(SDARRAY("SCHED_REQ_TYPE"))
 | 
|---|
| 142 |         SET SDARRAY("NEXT APPT IND")=$GET(SDARRAY("NEXT APPT IND"))
 | 
|---|
| 143 |         SET SDARRAY("DESIRED DATE TIME OF APPT")=$$E2IDATE($GET(SDARRAY("DESIRED DATE TIME OF APPT")))
 | 
|---|
| 144 |         SET SDARRAY("FOLLOWUP VISIT INDICATOR")=$GET(SDARRAY("FOLLOWUP VISIT INDICATOR"))
 | 
|---|
| 145 |         SET SDARRAY("FOLLOWUP VISIT INDICATOR")=$GET(SDARRAY("FOLLOWUP VISIT INDICATOR"))
 | 
|---|
| 146 |         ;
 | 
|---|
| 147 |         SET OV2=0
 | 
|---|
| 148 |         IF STYP'=4 DO  ;"i.e. 1 (C&P), 2 (10-10), or 3 (SCHEDULED APPOINTMENT)
 | 
|---|
| 149 |         . ;"BEFORE MAKE APPT
 | 
|---|
| 150 |         . ;"THIS MAY ALSO DO CHECKIN AN APPOINTMENT
 | 
|---|
| 151 |         . ;"ALSO NEED TO CHECK AGAINST SCHEDULE FOR THAT DAY
 | 
|---|
| 152 |         . ;"DETERMINE LAST RELATIVE ENTRY # FOR
 | 
|---|
| 153 |         . ;"THIS APPOINTMENT DATE (IF ANY) ON THIS CLINIC
 | 
|---|
| 154 |         . ;
 | 
|---|
| 155 |         . ;"TO SEE IF OVERBOOK MAX ACHIEVED OR APPOINTMENT NOT AVAILABLE
 | 
|---|
| 156 |         . ;"FOR THAT TIME AND DATE.
 | 
|---|
| 157 |         . ;"GET DATE
 | 
|---|
| 158 |         . SET APTTIME=$P(APPTDATE,".",2) ;"get just time
 | 
|---|
| 159 |         . FOR  Q:$L(APTTIME)>3  SET APTTIME=APTTIME_"0"  ;"PAD OUT TIME TO 4 DIGITS
 | 
|---|
| 160 |         . ;"CHECK WHAT MULTIPLE OF DAY OF WEEK FOR APPOINTMENT START
 | 
|---|
| 161 |         . ;"GET DAY OF WEEK
 | 
|---|
| 162 |         . SET X=APPTDATE DO DW^%DTC IF X="" QUIT  ;"Must be invalid date
 | 
|---|
| 163 |         . SET DAYW=$E(X,1,2)  ;"e.g. MO for MONDAY
 | 
|---|
| 164 |         . SET DOW=$$DOW^XLFDT(APPTDATE,1) ;"DOW=Day of Week (0-6)
 | 
|---|
| 165 |         . ;"FIND DAY OF WEEK ENTRY IN "ST" MULT , THEN FIND STARTING TIME AND
 | 
|---|
| 166 |         . ;"TIME MATCH IN SAME "T" MULT.
 | 
|---|
| 167 |         . SET TMG1DATE=APPTDATE\1
 | 
|---|
| 168 |         . SET FOUND=0
 | 
|---|
| 169 |         . FOR  DO  SET TMG1DATE=$ORDER(^SC(SC,"ST",TMG1DATE),-1) QUIT:(+TMG1DATE'>0)!(FOUND=1)
 | 
|---|
| 170 |         . . SET VAL=$GET(^SC(SC,"ST",TMG1DATE,1)) ;" e.g. MO 05  |   [1 1|0 1 1 1|1 1 1 1|1 1] "
 | 
|---|
| 171 |         . . IF ($E(VAL,1,2)'=DAYW) QUIT  ;"Skip if null, or not matching day of week
 | 
|---|
| 172 |         . . IF $$CHKAVAIL(TMG1DATE,APTTIME)=0 QUIT
 | 
|---|
| 173 |         . . SET FOUND=1
 | 
|---|
| 174 |         . . SET INCR=0
 | 
|---|
| 175 |         . . ;"Now find T node that applies to APPTDATE
 | 
|---|
| 176 |         . . NEW TEMPDATE SET TEMPDATE=TMG1DATE
 | 
|---|
| 177 |         . . FOR  DO  QUIT:(OV2=1)  SET TEMPDATE=$ORDER(^SC(SC,"T",TEMPDATE),-1) QUIT:(+TEMPDATE'>0)
 | 
|---|
| 178 |         . . . IF $DATA(^SC(SC,"T",TEMPDATE))=0 QUIT
 | 
|---|
| 179 |         . . . IF $$DOW^XLFDT(TEMPDATE,1)'=DOW QUIT
 | 
|---|
| 180 |         . . . FOR  SET INCR=$ORDER(^SC(SC,"T",TEMPDATE,2,INCR)) QUIT:(INCR="")!(OV2=1)  DO
 | 
|---|
| 181 |         . . . . SET VAL2=$GET(^SC(SC,"T",TEMPDATE,2,INCR,0)) ;"e.g. 0830^1
 | 
|---|
| 182 |         . . . . SET VAL2=$PIECE(VAL2,"^",1)
 | 
|---|
| 183 |         . . . . IF VAL2=APTTIME SET OV2=1
 | 
|---|
| 184 |         . IF OV2=1 DO
 | 
|---|
| 185 |         . . ;"NOW CHECK IN "S" ARRAY TO SEE IF APPT ALREADY MADE
 | 
|---|
| 186 |         . . IF SDY'=1 DO  ;"Should this be SDY>1 DO  ??
 | 
|---|
| 187 |         . . . ;"CHECK IF OVERBOOKS ALLOWED
 | 
|---|
| 188 |         . . . IF $PIECE($GET(^SC(SC,"SL")),"^",7)=0 SET OV2=0
 | 
|---|
| 189 |         ELSE  DO  ;"i.e. STYP=4 UNSCHEDULED VISIT
 | 
|---|
| 190 |         . ;"ALSO
 | 
|---|
| 191 |         . SET OV2=1
 | 
|---|
| 192 |         ;
 | 
|---|
| 193 |         IF OV2'=1 DO  GOTO ENDONE
 | 
|---|
| 194 |         . SET TMGRESULT="-111^NO SCHEDULED SLOT WHERE SCHED APPT IS WANTED"
 | 
|---|
| 195 |         ;
 | 
|---|
| 196 |         SET SDCL=SC
 | 
|---|
| 197 |         SET SDT=APPTDATE
 | 
|---|
| 198 |         SET SDDA=SDY
 | 
|---|
| 199 |         SET SDMODE=2
 | 
|---|
| 200 |         SET SDORG=1
 | 
|---|
| 201 |         ;"ADDITIONAL
 | 
|---|
| 202 |         SET SL=$P(^SC(SC,"SL"),"^",1)
 | 
|---|
| 203 |         SET SDSDATE=APPTDATE
 | 
|---|
| 204 |         ;"SET STARTDAY
 | 
|---|
| 205 |         ;
 | 
|---|
| 206 |         ;"START PREPARING DATA FROM SDARRAY INTO NODES
 | 
|---|
| 207 |         ;
 | 
|---|
| 208 |         ;"FIRST INITIAL TOP NODE FOR APPOINTMENT SUB-FILE
 | 
|---|
| 209 |         SET ^DPT(DFN,"S",0)="^2.98P^^"
 | 
|---|
| 210 |         LOCK +^DPT(DFN,"S",0):5
 | 
|---|
| 211 |         ;"NEXT NODE 0
 | 
|---|
| 212 |         SET PURVISIT=STYP
 | 
|---|
| 213 |         SET TIMEDD=$P(APPTDATE,".",1)
 | 
|---|
| 214 |         NEW TEMPS
 | 
|---|
| 215 |         SET TEMPS=SC_"^^"_SDARRAY("LAB DATE TIME ASSOCIATED")_"^"
 | 
|---|
| 216 |         SET TEMPS=TEMPS_SDARRAY("X-RAY DATE TIME ASSOCIATED")_"^"
 | 
|---|
| 217 |         SET TEMPS=TEMPS_SDARRAY("EKG DATE TIME ASSOCIATED")
 | 
|---|
| 218 |         SET ^DPT(DFN,"S",APPTDATE,0)=TEMPS
 | 
|---|
| 219 |         SET TEMPS=^DPT(DFN,"S",APPTDATE,0)_"^^"_PURVISIT
 | 
|---|
| 220 |         SET TEMPS=TEMPS_"^^^^^^^^^"_SDARRAY("APPT TYPE")_"^^^"_TIMEDD_"^^^^^"_0
 | 
|---|
| 221 |         SET ^DPT(DFN,"S",APPTDATE,0)=TEMPS
 | 
|---|
| 222 |         SET TEMPS=^DPT(DFN,"S",APPTDATE,0)_"^"_SDARRAY("SCHED_REQ_TYPE")_"^"
 | 
|---|
| 223 |         SET TEMPS=TEMPS_SDARRAY("NEXT APPT IND")
 | 
|---|
| 224 |         SET ^DPT(DFN,"S",APPTDATE,0)=TEMPS
 | 
|---|
| 225 |         ;"NEXT NODE 1
 | 
|---|
| 226 |         IF SDARRAY("DESIRED DATE TIME OF APPT")'="" DO
 | 
|---|
| 227 |         . SET ^DPT(DFN,"S",APPTDATE,1)=SDARRAY("DESIRED DATE TIME OF APPT")_"^"_SDARRAY("FOLLOWUP VISIT INDICATOR")
 | 
|---|
| 228 |         ELSE  DO
 | 
|---|
| 229 |         . SET ^DPT(DFN,"S",APPTDATE,1)=TIMEDD_"^"_SDARRAY("FOLLOWUP VISIT INDICATOR")
 | 
|---|
| 230 |         LOCK -^DPT(DFN,"S",0)
 | 
|---|
| 231 |         ;"NOW FILE 44 MULTIPLE IN APPOINTMENT SUB-FILE
 | 
|---|
| 232 |         ;"FIRST  TOP NODE IN CLINIC FOR DATE
 | 
|---|
| 233 |         SET ^SC(SC,"S",0)="^44.001DA^^"
 | 
|---|
| 234 |         LOCK +^SC(SC,"S",0):5
 | 
|---|
| 235 |         ;"NEXT DATE MULTIPLE
 | 
|---|
| 236 |         SET ^SC(SC,"S",APPTDATE,0)=APPTDATE
 | 
|---|
| 237 |         ;"NEXT TOP NODE UNDER DATE FOR PATIENT
 | 
|---|
| 238 |         SET ^SC(SC,"S",APPTDATE,1,0)="^44.003PA^^"
 | 
|---|
| 239 |         ;"NEXT MULTIPLE ENTRY PER PATIENT
 | 
|---|
| 240 |         SET ^SC(SC,"S",APPTDATE,1,SDY,0)=DFN_"^"_SL_"^"_$GET(SDARRAY("X RAY DATA FREE TEXT"))_"^"_$GET(SDARRAY("OTHER DATA FREE TEXT"))_"^"_$GET(SDARRAY("OTHER WARD LOCATION"))
 | 
|---|
| 241 |         SET ^SC(SC,"S",APPTDATE,1,SDY,0)=^SC(SC,"S",APPTDATE,1,SDY,0)_"^"_$GET(SDARRAY("DATA ENTRY CLERK"))_"^"_SAVENOW
 | 
|---|
| 242 |         IF STYP=4 SET ^SC(SC,"S",APPTDATE,1,SDY,0)=^SC(SC,"S",APPTDATE,1,SDY,0)_"^"_$GET(SDARRAY("PRIOR X-RAY RESULTS TO CLINIC"))
 | 
|---|
| 243 |         ;
 | 
|---|
| 244 |         ;"Change PATTERN ("ST") nodes to reflext currently available slots.
 | 
|---|
| 245 |         IF $$ENSUR1ST^TMGSDAU(SC,APPTDATE,.TMGMSG)'=1 DO  ;"Create ST node, if doesn't exist
 | 
|---|
| 246 |         . SET TMGRESULT="-200^"_$GET(TMGMSG(1)) KILL TMGMSG
 | 
|---|
| 247 |         IF $$DEC1SLOT^TMGSDAU(SC,APPTDATE,.TMGMSG)=-1 DO  ;"Don't quit, appt was made-->so trigger event
 | 
|---|
| 248 |         . SET TMGRESULT="-200^Error updating PATTERN (ST nodes).  "_$GET(TMGMSG(1))
 | 
|---|
| 249 |         . KILL TMGMSG
 | 
|---|
| 250 |         ;
 | 
|---|
| 251 |         ;"DETERMINE ANY OVERBOOK AND ELIGIBILITY HERE
 | 
|---|
| 252 |         SET OVERBOKM=$P(^SC(SC,"SL"),"^",7)
 | 
|---|
| 253 |         IF SDY>OVERBOKM DO
 | 
|---|
| 254 |         . SET OVERBOOK="O"
 | 
|---|
| 255 |         . SET ^SC(SC,"S",APPTDATE,1,SDY,"OB")="0"
 | 
|---|
| 256 |         ELSE  DO
 | 
|---|
| 257 |         . SET OVERBOOK=""
 | 
|---|
| 258 |         ;"ELIGIBILITY NEXT
 | 
|---|
| 259 |         DO ELIG^VADPT SET ELIGIB=$P(VAEL(1),"^",1)
 | 
|---|
| 260 |         IF STYP=4 SET ^SC(SC,"S",APPTDATE,1,SDY,0)=^SC(SC,"S",APPTDATE,1,SDY,0)_"^"_"^"_"^"_ELIGIB
 | 
|---|
| 261 |         ;"NOW UNSCHEDULED VISITS EXTRA DATA
 | 
|---|
| 262 |         ;"REALLY LATER MAY NEED ELIGIBILITY FOR NON-VA SYSTEMS PATIENTS WITH
 | 
|---|
| 263 |         ;"SCHEDULED APPTS AND UNSCHEDULED VISITS ( HUMANITARIAN, REIMBURSABLE INSURANCE, ETC)
 | 
|---|
| 264 |         IF STYP=4 DO
 | 
|---|
| 265 |         .SET ^SC(SC,"S",APPTDATE,1,SDY,"C")=SD_"^"_$GET(SDARRAY("DATA ENTRY CLERK"))_"^^^"_SD
 | 
|---|
| 266 |         LOCK -^SC(SC,"S",0)
 | 
|---|
| 267 |         ;"EVENT GENERATION ALSO FOR PFSS SYSTEM WHICH CAN BE USED WITH AN EXTERNAL SCHEDULING SYSTEM
 | 
|---|
| 268 |         ;"FOR MAKE APPT EVENTS AS WELL AS CHECKIN,CHECKOUT,CANCEL,DELETE, AND OUTPATIENT ENCOUNTER DATA
 | 
|---|
| 269 |         DO MAKE^SDAMEVT(DFN,SDT,SDCL,SDDA,SDMODE)
 | 
|---|
| 270 | ENDONE  ;
 | 
|---|
| 271 |         QUIT TMGRESULT
 | 
|---|
| 272 |         ;
 | 
|---|
| 273 |         ;
 | 
|---|
| 274 | CHKAVAIL(TMG1DATE,APTTIME)   ;
 | 
|---|
| 275 |         ;"Purpose: CHECK IF SLOT ALLOWED FOR THAT DAY/TIME SLOT
 | 
|---|
| 276 |         ;"Input TMG1DATE -- DATE in FM format to check on.
 | 
|---|
| 277 |         ;"      APTTIME -- Time of appt, in military format, e.g. '1345'
 | 
|---|
| 278 |         ;"Globally Scoped Vars used: SC - IEN in 44
 | 
|---|
| 279 |         ;"Results: 0 -- not available
 | 
|---|
| 280 |         ;"         1 -- available
 | 
|---|
| 281 |         ;
 | 
|---|
| 282 |         N SL,VAL,DATE,STARTTIM,SL,POS,COUNT
 | 
|---|
| 283 |         NEW CODES SET CODES="{}&%?#@!$* XXWVUTSRQPONMLKJIHGFEDCBA0123456789jklmnopqrstuvwxyz"
 | 
|---|
| 284 |         ;
 | 
|---|
| 285 |         SET SL=$P($GET(^SC(SC,"SL")),"^",1) ;"LENGTH OF APPT
 | 
|---|
| 286 |         SET VAL=$GET(^SC(SC,"ST",TMG1DATE,1))   ;" e.g. 'MO 05  |   [1 1|0 1 1 1|1 1 1 1|1 1] '
 | 
|---|
| 287 |         ;"START AT 9TH PIECE TO SEE IF NON-BLANK
 | 
|---|
| 288 |         ;"FORMAT DATE+STARTTIME
 | 
|---|
| 289 |         SET STARTTIM=$P($GET(^SC(SC,"SL")),"^",3) ;"DISPLAY START TIME
 | 
|---|
| 290 |         IF $L(STARTTIM)=1 SET STARTTIM="0"_STARTTIM
 | 
|---|
| 291 |         FOR  Q:$L(STARTTIM)>3  SET STARTTIM=STARTTIM_"0" ;"PAD OUT TIME TO 4 DIGITS
 | 
|---|
| 292 |         FOR  Q:$L(APTTIME)>3  SET APTTIME=APTTIME_"0"    ;"PAD OUT TIME TO 4 DIGITS
 | 
|---|
| 293 |         ;"SET DIFF=APTTIME-STARTTIM
 | 
|---|
| 294 |         SET DIFF=$$MILDELTA^TMGSDAU1(STARTTIM,APTTIME)
 | 
|---|
| 295 |         ;"SET SL=$P(^SC(SC,"SL"),"^",1)
 | 
|---|
| 296 |         SET COUNT=DIFF/SL
 | 
|---|
| 297 |         SET POS=9+(2*COUNT)
 | 
|---|
| 298 |         ;"IF $E(VAL,POS,POS)'=" " Q 1
 | 
|---|
| 299 |         NEW CH SET CH=$E(VAL,POS,POS)
 | 
|---|
| 300 |         NEW NUMAVAIL SET NUMAVAIL=$FIND(CODES,CH)-$FIND(CODES,"0")
 | 
|---|
| 301 |         IF NUMAVAIL>0 QUIT 1
 | 
|---|
| 302 |         QUIT 0
 | 
|---|
| 303 |         ;
 | 
|---|
| 304 | E2IDATE(TMGDATE)
 | 
|---|
| 305 |         ;"Purpose: To return a FM-format Date from TMGDATE, converting if needed.
 | 
|---|
| 306 |         ;"Input: TMGDATE: A date in external format, or FM-Date format
 | 
|---|
| 307 |         ;"              Note: if date is invalid, then "" is returned.
 | 
|---|
| 308 |         NEW TMGRESULT SET TMGRESULT=$GET(TMGDATE)
 | 
|---|
| 309 |         IF (TMGRESULT'=""),(+TMGRESULT'=TMGRESULT) DO
 | 
|---|
| 310 |         . NEW MSG
 | 
|---|
| 311 |         . DO DT^DILF("T",TMGDATE,.MSG)
 | 
|---|
| 312 |         . SET TMGRESULT=MSG
 | 
|---|
| 313 |         QUIT TMGRESULT
 | 
|---|
| 314 |         ; | 
|---|