| 1 | GMTSPNJ ;SLC/JER - Nightly Job to Queue HS Batch Print-by-Loc ; 08/27/2002 | 
|---|
| 2 | ;;2.7;Health Summary;**5,56**;Oct 20, 1995 | 
|---|
| 3 | ; | 
|---|
| 4 | ; External References | 
|---|
| 5 | ;   DBIA 10000  C^%DTC | 
|---|
| 6 | ;   DBIA 10000  NOW^%DTC | 
|---|
| 7 | ;   DBIA 10063  ^%ZTLOAD | 
|---|
| 8 | ;   DBIA 10006  ^DIC | 
|---|
| 9 | ;   DBIA  2051  FIND^DIC | 
|---|
| 10 | ;   DBIA 10103  $$DOW^XLFDT | 
|---|
| 11 | ; | 
|---|
| 12 | ; Sets GMTSSC=location pointer | 
|---|
| 13 | ; If clinic, sets GMTSCDT=desired appt day | 
|---|
| 14 | ; | 
|---|
| 15 | ; Summaries are considered ready Today if GMTSPNJ | 
|---|
| 16 | ; run time is today between 24:00 and 12:00, ready | 
|---|
| 17 | ; Tomorrow if run time is today between 12:00 and | 
|---|
| 18 | ; 24:00. | 
|---|
| 19 | ; | 
|---|
| 20 | MAIN ; Controls branching | 
|---|
| 21 | N GMTSTYP,GMTSCL,GMW,X | 
|---|
| 22 | S GMTSTYP=0 F  S GMTSTYP=$O(^GMT(142,GMTSTYP)) Q:+GMTSTYP'>0  D | 
|---|
| 23 | . S GMTSCL=0 F  S GMTSCL=$O(^GMT(142,GMTSTYP,20,GMTSCL)) Q:+GMTSCL'>0  D QUEUE | 
|---|
| 24 | Q | 
|---|
| 25 | QUEUE ; Queues HS batch print for HS Type and Location | 
|---|
| 26 | N DIC,GMPSAP,GMTSLOC,GMTSSC,GMTSIO,GMTSDYS,GMV,QUEQIT,X,Y,DAY,NEWDAY | 
|---|
| 27 | N GMTSQ,BEGDT,ENDDT,PDATE | 
|---|
| 28 | S QUEQIT=0 | 
|---|
| 29 | S GMTSLOC=$G(^GMT(142,GMTSTYP,20,GMTSCL,0)) | 
|---|
| 30 | S X=+GMTSLOC,DIC=44,DIC(0)="NXZ" D ^DIC | 
|---|
| 31 | I $S(+Y'>0:1,"WCOR"'[$P($G(Y(0)),U,3):1,1:0) Q | 
|---|
| 32 | S GMTSSC=Y_U_$P(Y(0),U,3) | 
|---|
| 33 | I "COR"[$P(GMTSSC,U,3) D  Q | 
|---|
| 34 | . S DAY=+$P(GMTSLOC,U,4) | 
|---|
| 35 | . ;   Don't print in advance | 
|---|
| 36 | . I DAY'>0 S $P(GMTSSC,U,4)=$$GETDATE(DAY) D QCONT Q | 
|---|
| 37 | . S BEGDT=$$GETDATE(0),ENDDT=$$GETDATE(DAY) | 
|---|
| 38 | . Q:$$NONWDAY(BEGDT) | 
|---|
| 39 | . S NEWDAY=$$WKEND(DAY,BEGDT,ENDDT) | 
|---|
| 40 | . ;   Get last date to be printed | 
|---|
| 41 | . S PDATE=$$GETDATE(+NEWDAY) | 
|---|
| 42 | . F  D  Q:+$G(GMTSQ) | 
|---|
| 43 | . . ;     Set variable before doing QCONT | 
|---|
| 44 | . . S $P(GMTSSC,U,4)=PDATE | 
|---|
| 45 | . . D QCONT | 
|---|
| 46 | . . ;     Decrement to get previous day | 
|---|
| 47 | . . S NEWDAY=NEWDAY-1 | 
|---|
| 48 | . . ;     Quit For Loop when non-workdays data has been printed | 
|---|
| 49 | . . I DAY>NEWDAY S GMTSQ=1 Q | 
|---|
| 50 | . . ;     Get date | 
|---|
| 51 | . . S PDATE=$$GETDATE(+NEWDAY) | 
|---|
| 52 | . . ;     Quit For Loop if there's a work | 
|---|
| 53 | . . ;     day between Holiday and Weekend. | 
|---|
| 54 | . . ;     Don't print weekend data twice. | 
|---|
| 55 | . . I +$$NONWDAY(PDATE)'>0 S GMTSQ=1 Q | 
|---|
| 56 | ; | 
|---|
| 57 | QCONT ; Used so following can be done for | 
|---|
| 58 | ; multiple dates for Clinics and ORs. | 
|---|
| 59 | I $$CKPAT^GMTSPD(GMTSSC)'>0 Q | 
|---|
| 60 | S GMPSAP=$S($P(GMTSLOC,U,3)="Y":1,1:0) | 
|---|
| 61 | S ZTIO=$$GETIO($P(GMTSLOC,U,2)) Q:'$L(ZTIO) | 
|---|
| 62 | S ZTDTH=$H,ZTRTN="MAIN^GMTSPL",ZTDESC="Health Summary" | 
|---|
| 63 | F GMV="GMTSTYP","GMTSSC","GMPSAP" S ZTSAVE(GMV)="" | 
|---|
| 64 | D ^%ZTLOAD | 
|---|
| 65 | Q | 
|---|
| 66 | ; | 
|---|
| 67 | GETDATE(DAYS) ; Gets desired Visit/Surgery date | 
|---|
| 68 | ;   Receives: DAYS=Print Days ahead | 
|---|
| 69 | ;   Returns:  FileMan Date/time | 
|---|
| 70 | N %,%H,%I,%T,GMTSDT,GMTSPM,X1,X2,X | 
|---|
| 71 | D NOW^%DTC S GMTSDT=$P(%,"."),GMTSPM=$S(+$E($P(%,".",2),1,2)>12:1,1:0) | 
|---|
| 72 | S X1=GMTSDT,X2=DAYS+GMTSPM D C^%DTC | 
|---|
| 73 | Q X | 
|---|
| 74 | ; | 
|---|
| 75 | NONWDAY(GMTSDT) ; Determines if non work day (i.e. Sat., Sun., or Holiday) | 
|---|
| 76 | ; Returns 1 if print day is weekend or holiday | 
|---|
| 77 | N DAYNAME | 
|---|
| 78 | S DAYNAME=$$DOW^XLFDT(GMTSDT) | 
|---|
| 79 | Q $S(DAYNAME="Saturday":1,DAYNAME="Sunday":1,$$HOLIDAY(GMTSDT):1,1:0) | 
|---|
| 80 | ; | 
|---|
| 81 | WKEND(DAY,BEGDT,ENDDT) ; Updates days in advance for weekend and holiday dates | 
|---|
| 82 | N GMI,X1,X2,X,%H,DAYNAME | 
|---|
| 83 | F GMI=1:1 S X1=BEGDT,X2=GMI D C^%DTC Q:X>ENDDT  D | 
|---|
| 84 | . S DAYNAME=$$DOW^XLFDT(X) | 
|---|
| 85 | . I DAYNAME="Saturday"!(DAYNAME="Sunday")!($$HOLIDAY(X)) S DAY=DAY+1,ENDDT=$$GETDATE(DAY) | 
|---|
| 86 | . ;   If one of days is Saturday, Sunday, or holiday, | 
|---|
| 87 | . ;   up days by one and recalculate ending date | 
|---|
| 88 | Q DAY | 
|---|
| 89 | ; | 
|---|
| 90 | HOLIDAY(GMDT) ; Determines if a date is a Holiday. | 
|---|
| 91 | ;   Requires that the Holiday (#40.5) file is updated | 
|---|
| 92 | ;   to determine if a date is a holiday. | 
|---|
| 93 | N GMDATE | 
|---|
| 94 | D FIND^DIC(40.5,"",.01,"QX",GMDT,1,"","","","GMDATE") | 
|---|
| 95 | Q +$G(GMDATE("DILIST",0)) | 
|---|
| 96 | ; | 
|---|
| 97 | GETIO(X) ; Get device for queueing | 
|---|
| 98 | N %,%Y,C,DIC,Y | 
|---|
| 99 | S DIC=3.5,DIC(0)="NXZ" D ^DIC S Y=$S(+Y'>0:"",1:$P(Y(0),U)) | 
|---|
| 100 | Q Y | 
|---|