- SDECRT0 ;ALB/SAT - VISTA SCHEDULING RPCS ;JAN 15, 2016
- ;;5.3;Scheduling;**627**;Aug 13, 1993;Build 249
- ;
- Q
- ;
- FIND(CLN,APPT,APPN,ORDER,BSDMODE,SDX,SDSTART,SDSTOP,SDREP,SDATE) ;EP; -- set up ^tmp sort for patient's appt
- ; called by START^SDECRT and SINGLE^SDECRT
- ; assumes SD variables SDX,SDSTART,SDSTOP,SDREP,SDATE are set
- ; CLN=clinic ien, APPT=appt date/time, APPN=appt ien in ^SC
- ; ORDER=1 means sort by terminal digit (or chart # per site param)
- ; ORDER=2 means sort by clinic; ORDER=3 means sort by principal clinic
- ; ORDER=4 means sort by name; ORDER="" means single routing slip
- ; BSDMODE="WI" for walkins, "SD" for same day, "" for all others
- ; BSDMODE="CR" used for chart requests in routine BSDROUT
- ;
- ;
- NEW DFN,HRCN,TERM,FIRST
- NEW BSDSC,BSDGD,BSDL
- S DFN=$P(^SC(CLN,"S",APPT,1,APPN,0),U) ;patient ien
- S HRCN=$$HRCN^SDECF2(DFN,$$FAC^SDECU(CLN)) ;chart #
- S TERM=$$HRCNT^SDECF2(HRCN) ;terminal digit format
- I $$GET1^DIQ(9009020.2,+$$DIVC^SDECU(CLN),.18)="NO" D
- . S TERM=$$HRCND^SDECF2(HRCN) ;use chart # per site param
- ;
- Q:'$$PRTOK(DFN,APPT,TERM) ;okay to print this appt?
- ;
- S FIRST=$$FIRST(DFN,APPT) ;first appt that day?
- ;
- D STOPS(DFN,APPT,CLN,TERM,ORDER) ;xray, lab, ekg stops
- I ORDER=1 D TDO(DFN,APPT,CLN,TERM,"",FIRST) Q
- I ORDER=2 D CLO(DFN,APPT,CLN,TERM,"",FIRST) Q
- I ORDER=3 D PCO(DFN,APPT,CLN,TERM,"",FIRST) Q
- D NMO(DFN,APPT,CLN,TERM,"",FIRST) Q
- ;
- TDO(P,D,C,T,S,F) ; -- sort by terminal digit
- I $G(F) S ^TMP("SDRS",$J," "_T," "_T,P)=1 ;1st for patient for date
- S ^TMP("SDRS",$J," "_T," "_T,P,D)=C_U_$G(S)_U_$G(BSDMODE)
- Q
- ;
- CLO(P,D,C,T,S,F) ; -- sort by clinic
- NEW N S N=$$GET1^DIQ(44,C,.01) Q:N="" ;clinic name
- I SDX["ALL",SDSTART]"",SDSTART]N Q ;not in print range
- I SDX["ALL",SDSTOP]"",N]SDSTOP Q ;not in print range
- ;
- I $G(F),'$D(^TMP("SDRS",$J,P)) S ^TMP("SDRS",$J,P,N)=1 ;1st for patient for date
- S ^TMP("SDRS1",$J,P,D)=N
- ;
- S ^TMP("SDRS",$J,N," "_T,P,D)=C_U_$G(S)_U_$G(BSDMODE)
- Q
- ;
- PCO(P,D,C,T,S,F) ; -- sort by principal clinic
- NEW PRINC S PRINC=$$PRIN^SDECU(C)
- I PRINC="UNAFFILIATED CLINICS" S PRINC=$$GET1^DIQ(44,+C,.01)
- I SDX["ALL",SDSTART]"",SDSTART]PRINC Q ;not print range
- I SDX["ALL",SDSTOP]"",PRINC]SDSTOP Q ;not print range
- ;
- I $G(F),'$D(^TMP("SDRS",$J,P)) S ^TMP("SDRS",$J,P,PRINC)=1 ;1st 4 pat 4 dt
- S ^TMP("SDRS1",$J,P,D)=PRINC ;sort by patient then date/time
- ;
- S ^TMP("SDRS",$J,PRINC," "_T,P,D)=C_U_$G(S)_U_$G(BSDMODE)
- Q
- ;
- NMO(P,D,C,T,S,F) ; -- sort by name
- NEW N S N=$$GET1^DIQ(2,P,.01) ;patient name
- I $G(F) S ^TMP("SDRS",$J,N," "_T,P)=1 ;1st for patient for date
- S ^TMP("SDRS",$J,N," "_T,P,D)=C_U_$G(S)_U_$G(BSDMODE)
- Q
- ;
- ;
- STOPS(P,D,C,T,ORDER) ; checks for xray, lab or ekg stops
- NEW I,A,STOP
- F I=3,4,5 I $P(^DPT(P,"S",D,0),U,I)]"" D
- . S A=$P(^DPT(P,"S",D,0),U,I),STOP=$S(I=3:"LAB",I=4:"XRAY",1:"EKG")
- . I ORDER=1 D TDO(P,A,C,T,STOP) Q
- . I ORDER=2 D CLO(P,A,C,T,STOP) Q
- . I ORDER=3 D PCO(P,A,C,T,STOP) Q
- . D NMO(P,A,C,T,STOP)
- Q
- ;
- PRTOK(P,D,TERM) ; -- check to see if rs should be printed for patient
- ; remove cancelled appts from list
- I ('$G(^DPT(P,"S",D,0)))!($P($G(^DPT(P,"S",D,0)),U,2)["C") Q 0
- ;
- I SDX["ALL",SDSTART="" Q 1 ;1st printing of all routing slips
- ;
- ; can have range of items to print; checking range
- ; clinic ranges to be checked later
- ;NEW X S X=1 I SDX["ALL" D Q X
- NEW X S X=1 I 'SDREP D Q X
- . I SDX["ADD",$P(^DPT(P,"S",D,0),U,13)]"" S X=0 Q ;if add-on, don't print if already printed
- . I ORDER=1,SDSTART]"",SDSTART]$E(TERM,1,2) S X=0 Q ;before beginning
- . I ORDER=1,SDSTOP]"",$E(TERM,1,2)]SDSTOP S X=0 Q ;after end
- . I ORDER=4,SDSTART]$$GET1^DIQ(2,P,.01) S X=0 Q ;before beginning
- . I ORDER=4,$$GET1^DIQ(2,P,.01)]SDSTOP S X=0 Q ;before beginning
- ;
- ; if reprinting add-ons, only reprint those already printed that day
- I SDREP,SDX["ADD" Q $S($P($G(^DPT(P,"S",D,0)),U,13)\1=SDSTART:1,1:0)
- ;
- Q 1
- ;
- FIRST(DFN,DATE) ;EP -- returns 1 if first appt that day for patient
- I (ORDER'=2),(ORDER'=3) Q 0 ;for sorts by clinic only
- NEW X,Y
- S X=DATE\1
- F S X=$O(^DPT(DFN,"S",X)) Q:(X\1>DATE\1) Q:'X Q:$D(Y) D
- . Q:$P(^DPT(DFN,"S",X,0),U,2)["C" ;ignore cancelled appts
- . S Y=$S(X=DATE:1,1:0)
- Q $G(Y)
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HSDECRT0 4437 printed Mar 13, 2025@21:57:38 Page 2
- SDECRT0 ;ALB/SAT - VISTA SCHEDULING RPCS ;JAN 15, 2016
- +1 ;;5.3;Scheduling;**627**;Aug 13, 1993;Build 249
- +2 ;
- +3 QUIT
- +4 ;
- FIND(CLN,APPT,APPN,ORDER,BSDMODE,SDX,SDSTART,SDSTOP,SDREP,SDATE) ;EP; -- set up ^tmp sort for patient's appt
- +1 ; called by START^SDECRT and SINGLE^SDECRT
- +2 ; assumes SD variables SDX,SDSTART,SDSTOP,SDREP,SDATE are set
- +3 ; CLN=clinic ien, APPT=appt date/time, APPN=appt ien in ^SC
- +4 ; ORDER=1 means sort by terminal digit (or chart # per site param)
- +5 ; ORDER=2 means sort by clinic; ORDER=3 means sort by principal clinic
- +6 ; ORDER=4 means sort by name; ORDER="" means single routing slip
- +7 ; BSDMODE="WI" for walkins, "SD" for same day, "" for all others
- +8 ; BSDMODE="CR" used for chart requests in routine BSDROUT
- +9 ;
- +10 ;
- +11 NEW DFN,HRCN,TERM,FIRST
- +12 NEW BSDSC,BSDGD,BSDL
- +13 ;patient ien
- SET DFN=$PIECE(^SC(CLN,"S",APPT,1,APPN,0),U)
- +14 ;chart #
- SET HRCN=$$HRCN^SDECF2(DFN,$$FAC^SDECU(CLN))
- +15 ;terminal digit format
- SET TERM=$$HRCNT^SDECF2(HRCN)
- +16 IF $$GET1^DIQ(9009020.2,+$$DIVC^SDECU(CLN),.18)="NO"
- Begin DoDot:1
- +17 ;use chart # per site param
- SET TERM=$$HRCND^SDECF2(HRCN)
- End DoDot:1
- +18 ;
- +19 ;okay to print this appt?
- if '$$PRTOK(DFN,APPT,TERM)
- QUIT
- +20 ;
- +21 ;first appt that day?
- SET FIRST=$$FIRST(DFN,APPT)
- +22 ;
- +23 ;xray, lab, ekg stops
- DO STOPS(DFN,APPT,CLN,TERM,ORDER)
- +24 IF ORDER=1
- DO TDO(DFN,APPT,CLN,TERM,"",FIRST)
- QUIT
- +25 IF ORDER=2
- DO CLO(DFN,APPT,CLN,TERM,"",FIRST)
- QUIT
- +26 IF ORDER=3
- DO PCO(DFN,APPT,CLN,TERM,"",FIRST)
- QUIT
- +27 DO NMO(DFN,APPT,CLN,TERM,"",FIRST)
- QUIT
- +28 ;
- TDO(P,D,C,T,S,F) ; -- sort by terminal digit
- +1 ;1st for patient for date
- IF $GET(F)
- SET ^TMP("SDRS",$JOB," "_T," "_T,P)=1
- +2 SET ^TMP("SDRS",$JOB," "_T," "_T,P,D)=C_U_$GET(S)_U_$GET(BSDMODE)
- +3 QUIT
- +4 ;
- CLO(P,D,C,T,S,F) ; -- sort by clinic
- +1 ;clinic name
- NEW N
- SET N=$$GET1^DIQ(44,C,.01)
- if N=""
- QUIT
- +2 ;not in print range
- IF SDX["ALL"
- IF SDSTART]""
- IF SDSTART]N
- QUIT
- +3 ;not in print range
- IF SDX["ALL"
- IF SDSTOP]""
- IF N]SDSTOP
- QUIT
- +4 ;
- +5 ;1st for patient for date
- IF $GET(F)
- IF '$DATA(^TMP("SDRS",$JOB,P))
- SET ^TMP("SDRS",$JOB,P,N)=1
- +6 SET ^TMP("SDRS1",$JOB,P,D)=N
- +7 ;
- +8 SET ^TMP("SDRS",$JOB,N," "_T,P,D)=C_U_$GET(S)_U_$GET(BSDMODE)
- +9 QUIT
- +10 ;
- PCO(P,D,C,T,S,F) ; -- sort by principal clinic
- +1 NEW PRINC
- SET PRINC=$$PRIN^SDECU(C)
- +2 IF PRINC="UNAFFILIATED CLINICS"
- SET PRINC=$$GET1^DIQ(44,+C,.01)
- +3 ;not print range
- IF SDX["ALL"
- IF SDSTART]""
- IF SDSTART]PRINC
- QUIT
- +4 ;not print range
- IF SDX["ALL"
- IF SDSTOP]""
- IF PRINC]SDSTOP
- QUIT
- +5 ;
- +6 ;1st 4 pat 4 dt
- IF $GET(F)
- IF '$DATA(^TMP("SDRS",$JOB,P))
- SET ^TMP("SDRS",$JOB,P,PRINC)=1
- +7 ;sort by patient then date/time
- SET ^TMP("SDRS1",$JOB,P,D)=PRINC
- +8 ;
- +9 SET ^TMP("SDRS",$JOB,PRINC," "_T,P,D)=C_U_$GET(S)_U_$GET(BSDMODE)
- +10 QUIT
- +11 ;
- NMO(P,D,C,T,S,F) ; -- sort by name
- +1 ;patient name
- NEW N
- SET N=$$GET1^DIQ(2,P,.01)
- +2 ;1st for patient for date
- IF $GET(F)
- SET ^TMP("SDRS",$JOB,N," "_T,P)=1
- +3 SET ^TMP("SDRS",$JOB,N," "_T,P,D)=C_U_$GET(S)_U_$GET(BSDMODE)
- +4 QUIT
- +5 ;
- +6 ;
- STOPS(P,D,C,T,ORDER) ; checks for xray, lab or ekg stops
- +1 NEW I,A,STOP
- +2 FOR I=3,4,5
- IF $PIECE(^DPT(P,"S",D,0),U,I)]""
- Begin DoDot:1
- +3 SET A=$PIECE(^DPT(P,"S",D,0),U,I)
- SET STOP=$SELECT(I=3:"LAB",I=4:"XRAY",1:"EKG")
- +4 IF ORDER=1
- DO TDO(P,A,C,T,STOP)
- QUIT
- +5 IF ORDER=2
- DO CLO(P,A,C,T,STOP)
- QUIT
- +6 IF ORDER=3
- DO PCO(P,A,C,T,STOP)
- QUIT
- +7 DO NMO(P,A,C,T,STOP)
- End DoDot:1
- +8 QUIT
- +9 ;
- PRTOK(P,D,TERM) ; -- check to see if rs should be printed for patient
- +1 ; remove cancelled appts from list
- +2 IF ('$GET(^DPT(P,"S",D,0)))!($PIECE($GET(^DPT(P,"S",D,0)),U,2)["C")
- QUIT 0
- +3 ;
- +4 ;1st printing of all routing slips
- IF SDX["ALL"
- IF SDSTART=""
- QUIT 1
- +5 ;
- +6 ; can have range of items to print; checking range
- +7 ; clinic ranges to be checked later
- +8 ;NEW X S X=1 I SDX["ALL" D Q X
- +9 NEW X
- SET X=1
- IF 'SDREP
- Begin DoDot:1
- +10 ;if add-on, don't print if already printed
- IF SDX["ADD"
- IF $PIECE(^DPT(P,"S",D,0),U,13)]""
- SET X=0
- QUIT
- +11 ;before beginning
- IF ORDER=1
- IF SDSTART]""
- IF SDSTART]$EXTRACT(TERM,1,2)
- SET X=0
- QUIT
- +12 ;after end
- IF ORDER=1
- IF SDSTOP]""
- IF $EXTRACT(TERM,1,2)]SDSTOP
- SET X=0
- QUIT
- +13 ;before beginning
- IF ORDER=4
- IF SDSTART]$$GET1^DIQ(2,P,.01)
- SET X=0
- QUIT
- +14 ;before beginning
- IF ORDER=4
- IF $$GET1^DIQ(2,P,.01)]SDSTOP
- SET X=0
- QUIT
- End DoDot:1
- QUIT X
- +15 ;
- +16 ; if reprinting add-ons, only reprint those already printed that day
- +17 IF SDREP
- IF SDX["ADD"
- QUIT $SELECT($PIECE($GET(^DPT(P,"S",D,0)),U,13)\1=SDSTART:1,1:0)
- +18 ;
- +19 QUIT 1
- +20 ;
- FIRST(DFN,DATE) ;EP -- returns 1 if first appt that day for patient
- +1 ;for sorts by clinic only
- IF (ORDER'=2)
- IF (ORDER'=3)
- QUIT 0
- +2 NEW X,Y
- +3 SET X=DATE\1
- +4 FOR
- SET X=$ORDER(^DPT(DFN,"S",X))
- if (X\1>DATE\1)
- QUIT
- if 'X
- QUIT
- if $DATA(Y)
- QUIT
- Begin DoDot:1
- +5 ;ignore cancelled appts
- if $PIECE(^DPT(DFN,"S",X,0),U,2)["C"
- QUIT
- +6 SET Y=$SELECT(X=DATE:1,1:0)
- End DoDot:1
- +7 QUIT $GET(Y)