Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BSDROUT

BSDROUT.m

Go to the documentation of this file.
  1. BSDROUT ; IHS/ANMC/LJF,WAR - IHS CALLS FROM SDROUT ;
  1. ;;5.3;PIMS;**1001,1003,1005,1006,1007,1009,1010,1011**;DEC 01, 2006
  1. ;IHS/ITSC/WAR 8/19/2004 PATCH #1001 set date range for appt letter from tomorrow to a year from now
  1. ;IHS/ITSC/WAR 10/21/2004 PATCH 1001 Check for DFN if user enters by Clinic, but does not select a Pt
  1. ;IHS/ITSC/LJF 10/25/2004 PATCH 1001 Changed default for Want to print Appt Letter to YES
  1. ;IHS/ITSC/LJF 06/17/2005 PATCH 1003 added ability to call for single RS without a health summary
  1. ;IHS/OIT/LJF 02/16/2006 PATCH 1005 added RSCI subroutine to pull charts at checkin
  1. ; 07/07/2006 PATCH 1006 WISD now a PEP (public entry point); used by ERS
  1. ;cmi/anch/maw 11/22/2006 PATCH 1007 added modifications for items 1007.05 and 1007.16
  1. ;cmi/anch/maw 01/20/2007 PATCH 1007 added mods in APPT to check for mult appt book flab BSDMK item 1007.13
  1. ;cmi/anch/maw 04/07/2008 PATCH 1009 added code in RSCI and APPT for default prompt for chart request requirement 61
  1. ;cmi/anch/maw 05/01/2009 PATCH 1010 added code in RSCI and APPT to default BSDPAR to first entry if DIV is not defined
  1. ;cmi/flag/maw 10/15/2009 PATCH 1011 added code PWH to get patient wellness handout RQMT121
  1. ;
  1. ASK ;EP; called by SDROUT to ask rest of the questions
  1. NEW BSDI,BSDQ
  1. S BSDQ=0
  1. F BSDI="SORT","DATE","CLINIC","REPRINT" D @BSDI I BSDQ D END^SDROUT Q
  1. I 'BSDQ D DEVICE
  1. Q
  1. ;
  1. SORT ; ask user for sort choice
  1. S ORDER=$$READ^BDGF("S^1:TERMINAL DIGIT;2:CLINIC NAME;3:PRINCIPAL CLINIC;4:PATIENT NAME","Choose Sort Order","","^D R3HELP^BSDROUT")
  1. I (ORDER="")!(ORDER=U) S BSDQ=1
  1. Q
  1. ;
  1. DATE ; ask appt date to process
  1. S SDATE=$$READ^BDGF("DO^::EXF","PRINT ROUTING SLIPS FOR WHAT DATE")
  1. I SDATE<1 S BSDQ=1
  1. Q
  1. ;
  1. CLINIC ; ask clinic selection if sort 2 or 3
  1. ;
  1. I (ORDER=1)!(ORDER=4) S VAUTC=1 D Q
  1. . I $G(DIV)="" S VAUTD=1 Q ;set to all divisions
  1. . S VAUTD=0,VAUTD(DIV)=$$DIVNM^BSDU(DIV) ;division already set
  1. D CLINIC^BSDU(2,"",1) S BSDQ=$S($D(BSDQ):1,1:0) Q
  1. ;
  1. REPRINT ; ask if this is a reprint
  1. Q:$G(SDX)'["ADD" ;cmi/anch/maw added line for item 1007.16 patch 1007
  1. S SDREP=$$READ^BDGF("Y","IS THIS A REPRINT OF A PREVIOUS RUN","NO")
  1. I SDREP=U S BSDQ=1 Q
  1. I SDREP=0 D Q
  1. . I (ORDER=2)!(ORDER=3) Q
  1. . D RANGE("PRINT")
  1. ;
  1. I SDX["ADD" S SDSTART=$$READ^BDGF("DO^::EX","REPRINT ADD-ONS THAT WERE RUN ON WHAT DATE") S:SDSTART<1 BSDQ=1 Q
  1. I (ORDER=1)!(ORDER=4) D RANGE("REPRINT")
  1. Q
  1. ;
  1. RANGE(TYPE) ; ask to print a small batch
  1. NEW BSDX,HELP
  1. S BSDX=$S(ORDER=1:"TERMINAL DIGIT",1:"PATIENT NAME")
  1. S HELP="THE "_TYPE_" WILL BEGIN PRINTING AT THE "_BSDX_"YOU SPECIFY"
  1. S SDSTART=$$READ^BDGF("F^1:30","ENTER "_BSDX_" TO BEGIN "_TYPE_" FROM","FIRST",HELP)
  1. I SDSTART=U S BSDQ=1 Q
  1. I SDSTART="FIRST" S SDSTART="" Q
  1. I ORDER=1,SDSTART'?2N D MSG^BDGF("Must enter 2 digits",2,1) D RANGE(TYPE) Q
  1. ;
  1. RANGE2 ;
  1. S SDSTOP=$$READ^BDGF("F^1:30","ENTER "_BSDX_" ON WHICH TO STOP PRINT","LAST")
  1. I SDSTOP=U S BSDQ=1 Q
  1. I SDSTOP="LAST" S SDSTOP="" Q
  1. I ORDER=1,SDSTOP'?2N D MSG^BDGF("Must enter 2 digits",2,1) D RANGE2 Q
  1. Q
  1. ;
  1. DEVICE ; ask print device
  1. S VAR="DIV^VAUTC^VAUTC(^SDX^ORDER^SDATE^SDIQ^SDREP^SDSTART^SDSTOP^VAUTD^VAUTD("
  1. S DGPGM="START^BSDROUT"
  1. S BDGDEV=$$GET1^DIQ(40.8,$$DIV^BSDU,9) K:BDGDEV="" BDGDEV
  1. D ZIS^DGUTQ I POP D END^SDROUT1 Q
  1. D START^BSDROUT
  1. Q
  1. ;
  1. START ;EP; entry point when printing routing slip batch
  1. ; IHS modified version of START^SDROUT
  1. K ^TMP("SDRS",$J) U IO
  1. K ^TMP("SDRS1",$J)
  1. S Y=SDATE D DTS^SDUTL S APDATE=Y,Y=DT D DTS^SDUTL S PRDATE=Y
  1. ;
  1. NEW BSDSC,BSDGD,BSDL,SC
  1. I $G(VAUTC)=1 D
  1. .S BSDSCIND="S BSDSC=$O(^SC(BSDSC))"
  1. E D
  1. .S BSDSCIND="S BSDSC=$O(VAUTC(BSDSC))"
  1. S BSDSC=0 F X BSDSCIND Q:'BSDSC S SC=BSDSC D CHECK^SDROUT I $T D
  1. . S BSDGD=SDATE
  1. . F S BSDGD=$O(^SC(BSDSC,"S",BSDGD)) Q:('BSDGD)!(BSDGD>(SDATE+1)) D
  1. .. I $D(^SC(BSDSC,"S",BSDGD,1)) S BSDL=0 F S BSDL=$O(^SC(BSDSC,"S",BSDGD,1,BSDL)) Q:'BSDL I $D(^(BSDL,0)),$P(^(0),U,9)'="C" D FIND^BSDROUT0(BSDSC,BSDGD,BSDL,ORDER,"")
  1. D CRLOOP^BSDROUT2
  1. D PRINT^BSDROUT1(ORDER,SDATE)
  1. Q
  1. ;
  1. R3HELP ;EP; user help for Sort question
  1. D MSG^BDGF("Select the order in which you want the routing slips printed.",2,1)
  1. D MSG^BDGF(" Choose 1 to print by terminal digit order",1,0)
  1. D MSG^BDGF(" (Or by chart # order if site parameter set that way.)",1,0)
  1. D MSG^BDGF(" Choose 2 to print by name for selected clinics.",1,0)
  1. D MSG^BDGF(" Choose 3 to print by principal clinic names.",1,0)
  1. D MSG^BDGF(" (Subtotaled by terminal digit within these categories.)",1,0)
  1. D MSG^BDGF(" Choose 4 to print alphabetically by patient name.",1,1)
  1. Q
  1. ;
  1. ;IHS/ITSC/LJF 6/17/2005 PATCH 1003 added BSDNHS parameter
  1. ;IHS/OIT/LJF 07/07/2006 PATCH 1006 now a public entry point
  1. WISD(DFN,SDATE,BSDMODE,BSDDEV,BSDNHS) ;PEP; print routing slip for walkin/same day appt
  1. ; called by SDAMWI1 for walkins; BSDMODE="WI"
  1. ; called by ONE^BSDROUT for single patient rs; BSDMODE=""
  1. ; called by APPT for same day appt; BSDMODE="SD"
  1. ; called by BSDAPP for chart requests for today
  1. ; called by RS protocol with BSDNHS=1 so no health summary will print;PATCH 1003
  1. ;
  1. ;IHS/ITSC/WAR 10/21/04; PATCH #1001
  1. ; Check for DFN if user enters by Clinic, but does not select a Pt
  1. I +DFN=0 D
  1. .S DIR(0)="N^"_VALMBG_":"_VALMLST
  1. .D ^DIR
  1. .I +Y>0 S DFN=+$P($G(^TMP("SDAMIDX",$J,+Y)),U,2)
  1. I +DFN=0 Q
  1. ;***** END 10/21/04
  1. ;
  1. NEW DGPGM,VAR,VAR1,DEV,POP
  1. S SDX="ALL",ORDER="",SDREP=0,SDSTART="",DIV=$$DIV^BSDU
  1. ;
  1. ;IHS/ITSC/LJF 6/17/2005 PATCH 1003 adde BSDNHS to variable list
  1. ;S VAR="DIV^ORDER^SDX^SDATE^DFN^SDREP^SDSTART^BSDMODE"
  1. ;S VAR1="DIV;ORDER;SDX;SDATE;DFN;SDREP;SDSTART;BSDMODE"
  1. S VAR="DIV^ORDER^SDX^SDATE^DFN^SDREP^SDSTART^BSDMODE^BSDNHS"
  1. S VAR1="DIV;ORDER;SDX;SDATE;DFN;SDREP;SDSTART;BSDMODE;BSDNHS"
  1. ;end of these PATCH 1003 changes
  1. ;
  1. S DGPGM="SINGLE^BSDROUT"
  1. I $G(BSDDEV)]"",$G(DGQUIET) D ZIS^BDGF("F","SINGLE^BSDROUT","ROUTING SLIP",VAR1,BSDDEV) Q
  1. S DEV=$S(BSDMODE="CR":".05",1:".11") ;default printer fields
  1. S BDGDEV=$$GET1^DIQ(9009020.2,$$DIV^BSDU,DEV)
  1. I BDGDEV="" K BDGDEV I $G(DGQUIET) Q
  1. S %ZIS("A")="FILE ROOM PRINTER: " D ZIS^DGUTQ I POP D END^SDROUT1 Q
  1. D SINGLE
  1. Q
  1. ;
  1. ONE ;EP; called by SDROUT to print one patient's routing slip
  1. S DFN=+$$READ^BDGF("PO^2:EQM","Select PATIENT") I DFN<1 D END^SDROUT Q
  1. D WISD(DFN,DT,"")
  1. Q
  1. ;
  1. SINGLE ;EP; queued entry point for single routing slips
  1. ; called by WISD subroutine
  1. U IO K ^TMP("SDRS",$J)
  1. NEW BSDT,CLN,IEN,BSDMOD2
  1. ;
  1. ; find all appts for patient
  1. I BSDMODE="CR" S BSDMOD2="CR",BSDMODE=""
  1. S BSDT=SDATE\1
  1. F S BSDT=$O(^DPT(DFN,"S",BSDT)) Q:'BSDT Q:(BSDT\1>SDATE) D
  1. . S CLN=+$G(^DPT(DFN,"S",BSDT,0)) Q:'CLN ;clinic ien
  1. . S IEN=0 F S IEN=$O(^SC(CLN,"S",BSDT,1,IEN)) Q:'IEN Q:$P($G(^SC(CLN,"S",BSDT,1,IEN,0)),U)=DFN
  1. . Q:'IEN ;appt ien in ^sc
  1. . D FIND^BSDROUT0(CLN,BSDT,IEN,ORDER,BSDMODE)
  1. I $D(BSDMOD2) S BSDMODE=BSDMOD2
  1. ;
  1. ; find all chart requests for patient
  1. S CLN=0 F S CLN=$O(^SC("AIHSCR",DFN,CLN)) Q:'CLN D
  1. . S BSDT=(SDATE\1)-.0001
  1. . F S BSDT=$O(^SC("AIHSCR",DFN,CLN,BSDT)) Q:'BSDT D
  1. .. D CRSET^BSDROUT2(CLN,BSDT,DFN,ORDER)
  1. ;
  1. ; if no future appts, set something so RS will print
  1. I '$D(^TMP("SDRS",$J)) S ^TMP("SDRS",$J,$$GET1^DIQ(2,DFN,.01),$$TERM(DFN),DFN)=""
  1. ;
  1. D PRINT^BSDROUT1(ORDER,SDATE)
  1. Q
  1. ;
  1. APPT(EVENT,DFN,DATE) ;EP; called by BSDAM APPT SLIP protocol
  1. ; which is called by BSDAM APPOINTMENT EVENTS protocol
  1. ; which is called by EVT^SDAMEVT via MAKE^SDAMEVT via ^SDM1A
  1. ; from making appointment
  1. ;
  1. ;cmi/maw 1/20/2007 check for mult appt book flag BSDMK, if there quit until it is not patch 1007 item 1007.13'
  1. Q:$G(BSDMK)
  1. ;cmi/maw 1/20/2007 end of mods
  1. ;
  1. Q:$G(SDMODE)=2 ;quiet mode
  1. ; save variables not used that event driver needs back
  1. NEW SDT,SDCL,SDDA,SDATA,SDAMEVT,SDMODE
  1. NEW SDC
  1. Q:IOST'["C-" ;quit if printer is device
  1. Q:$G(BSDNO) ;quit if rebook
  1. Q:EVENT'=1 ;not make appt
  1. Q:$P($G(^DPT(DFN,"S",DATE,0)),U,7)'=3 ;not sched appt
  1. ;
  1. ; print routing slip for same day appt
  1. N BSDPAR ;cmi/maw 5/2/2009 patch 1010
  1. S BSDPAR=$O(^BSDPAR("B",0)) ;cmi/maw 5/2/2009 patch 1010
  1. I (DATE\1)=($P(^DPT(DFN,"S",DATE,0),U,19)\1) D Q
  1. . I '$G(DIV) Q:$$READ^BDGF("Y","Want Chart Requested",$S($P($G(^BSDPAR(BSDPAR,0)),U,25):"YES",1:"NO"),"^D HELPA^BSDROUT")'=1 ;cmi/maw 04/07/2008 orig line
  1. . I $G(DIV) Q:$$READ^BDGF("Y","Want Chart Requested",$S($P($G(^BSDPAR(DIV,0)),U,25):"YES",1:"NO"),"^D HELPA^BSDROUT")'=1 ;cmi/maw 04/07/2008 PATCH 1009 mod line for default
  1. . D WISD(DFN,DATE,"SD",$$GET1^DIQ(9009020.2,$$DIV^BSDU,.05))
  1. ;
  1. ; ask to print appt letter for patient
  1. Q:$$GET1^DIQ(9009020.2,$$DIV^BSDU,.02)'="YES" ;site parameter
  1. ;Q:$$READ^BDGF("Y","Want to Print Appointment Letter for Patient","NO","^D HELPB^BSDROUT")'=1
  1. Q:$$READ^BDGF("Y","Want to Print Appointment Letter for Patient","YES","^D HELPB^BSDROUT")'=1 ;IHS/ITSC/LJF 10/25/2004 PATCH 1001
  1. ;
  1. ; set up variables for call
  1. NEW X,L2,SDCONC,SDLT,DIV,SDV1,SDFORM,SDLET,SDLT1,SDBD,SDED,SDTIME
  1. NEW S1,VAUTD,VAUTN,L0
  1. NEW SDDAT ;saved for multibook rtn
  1. S L2="^SDL1",SDCONC="B",SDLT=1,L0="P"
  1. S DIV=$$DIV^BSDU,SDV1=DIV,SDFORM=+$$GET1^DIQ(40.8,DIV,30.01,"I")
  1. S VAUTD=0,VAUTD(DIV)=$$GET1^DIQ(40.8,DIV,.01)
  1. ;cmi/anch/maw 11/22/06 split below line to get letter format
  1. ;cmi/anch/maw 11/22/2006 adding code to select letter format if field .23 of IHS SCHEDULING PARAMETER file is set to yes item 1007.04 and 1007.05 patch 1007
  1. S X=+$G(^DPT(DFN,"S",DATE,0)) ;cmi/anch/maw 11/22/06 added item 1007.04 patch 1007
  1. S SDLET="" ;cmi/anch/maw 11/22/06 added line for item 1007.04 patch 1007
  1. I $$GET1^DIQ(9009020.2,DIV,.23,"I") D ;cmi/anch/maw 11/22/06 added for item 1007.04 patch 1007
  1. . S SDLET=+$$READ^BDGF("P^407.5:EMQZ","Select Letter",$$GET1^DIQ(44,X,2509)) ;cmi/anch/maw 11/22/06 added for item 1007.04 patch 1007
  1. I $G(SDLET) D MSG^BDGF($$GET1^DIQ(407.5,SDLET,.01)_" letter selected",2,1) ;cmi/anch/maw 12/5/2006 added to display letter selected
  1. ;
  1. ;S X=+$G(^DPT(DFN,"S",DATE,0)),SDLET=$$GET1^DIQ(44,X,2509,"I") ;cmi/anch/maw 11/22/06 orig line item 1007.04 patch 1007
  1. I SDLET="" S SDLET=$$GET1^DIQ(44,X,2509,"I") ;cmi/anch/maw 11/22/06 item 1007.04 patch 1007
  1. I SDLET="" S SDLET=$O(^VA(407.5,"B","APPOINTMENT SLIP",0))
  1. I SDLET="" D MSG^BDGF("Sorry, no letter set up to print. See Application Coordinator.",2,1) Q
  1. ;
  1. ;IHS/ITSC/WAR 8/19/2004 PATCH #1001 set date range starting with tomorrow
  1. ;S SDLT1=SDLET,SDBD=DT,SDED=$$FMADD^XLFDT(DT,365),SDTIME="*"
  1. S SDLT1=SDLET,SDBD=$$FMADD^XLFDT(DT,1),SDED=$$FMADD^XLFDT(DT,365),SDTIME="*"
  1. S VAUTN=0,VAUTN(DFN)=$$GET1^DIQ(2,DFN,.01),S1="P"
  1. ;
  1. D QUE^SDLTP
  1. Q
  1. ;
  1. PWH(EVENT,DFN,DATE) ;EP; called by BSDAM PWH AT CHECKIN protocol;cmi/flag/maw 10/19/2009 PATCH 1011
  1. Q:$T(EN2^APCHPWHG)="" ;pcc v2.0 not loaded
  1. I '$G(DATE) S DATE=DT
  1. ; which is called by BSDAM APPOINTMENT EVENTS protocol
  1. ; Used at sites with so many no-shows that charts are not pulled until patients arrive
  1. ;
  1. Q:$G(SDMODE)=2 ;quiet mode
  1. ; save variables not used that event driver needs back
  1. NEW SDDA,SDATA,SDAMEVT,SDMODE,SDC,VALMY,SDI,SDAT,BSDPWH
  1. Q:IOST'["C-" ;quit if printer is device
  1. I $G(EVENT)'="OR" Q:EVENT'=4 ;not checkin
  1. ;Q:$$GET1^DIQ(9009020.2,$$DIV^BSDU,.22)'="YES" ;parameter not turned on
  1. I $G(EVENT)'="OR" Q:$P($G(^DPT(DFN,"S",DATE,0)),U,7)'=3 ;not sched appt
  1. I $G(EVENT)'="OR" Q:'$$CI^BSDU2(DFN,SDCL,DATE,$$SCIEN^BSDU2(DFN,SDCL,DATE)) ;quit if check in deleted
  1. ;
  1. S DIV=$$DIV^BSDU
  1. Q:$$READ^BDGF("Y","Want Patient Wellness Handout","NO","^D HELPA^BSDROUT")'=1
  1. S BSDPWH=$$SELTYP
  1. Q:'$G(BSDPWH)
  1. D EN2^APCHPWHG(BSDPWH,DFN)
  1. I $D(VALMBCK),VALMBCK="R" D REFRESH^VALM S VALMBCK=$P(VALMBCK,"R")_$P(VALMBCK,"R",2)
  1. Q
  1. ;
  1. SELTYP() ;
  1. K DIADD,DLAYGO
  1. N BSDPWHT
  1. D ^XBFMK
  1. K DIC S DIC="^APCHPWHT(",DIC("A")="Select Patient Wellness Handout type: ",DIC(0)="AEQM"
  1. S X="" I DUZ(2),$D(^APCCCTRL(DUZ(2),0))#2 S X=$P(^(0),U,16)
  1. I $D(^DISV(DUZ,"^APCHPWHT(")) S Y=^("^APCHPWHT(") I $D(^APCHPWHT(Y,0)) S X=$P(^(0),U,1)
  1. S:X="" X="ADULT REGULAR"
  1. S DIC("B")=X
  1. D ^DIC K DIC
  1. I Y=-1 Q 0
  1. S BSDPWHT=+Y
  1. Q BSDPWHT
  1. ;
  1. RSCI(EVENT,DFN,DATE) ;EP; called by BSDAM RS AT CHECKIN protocol;IHS/OIT/LJF 02/16/2006 PATCH 1005
  1. ; which is called by BSDAM APPOINTMENT EVENTS protocol
  1. ; Used at sites with so many no-shows that charts are not pulled until patients arrive
  1. ;
  1. Q:$G(SDMODE)=2 ;quiet mode
  1. ; save variables not used that event driver needs back
  1. NEW SDDA,SDATA,SDAMEVT,SDMODE,SDC,VALMY,SDI,SDAT
  1. Q:IOST'["C-" ;quit if printer is device
  1. Q:EVENT'=4 ;not checkin
  1. Q:$$GET1^DIQ(9009020.2,$$DIV^BSDU,.22)'="YES" ;parameter not turned on
  1. Q:$P($G(^DPT(DFN,"S",DATE,0)),U,7)'=3 ;not sched appt
  1. Q:'$$CI^BSDU2(DFN,SDCL,DATE,$$SCIEN^BSDU2(DFN,SDCL,DATE)) ;quit if check in deleted
  1. ;
  1. ;Q:$$READ^BDGF("Y","Want Chart Requested","YES","^D HELPA^BSDROUT")'=1 ;cmi/maw 04/07/2008 orig line
  1. ;cmi/maw 7/17/2008 PATCH 1009 the following 2 lines are now part of patch 1009 due to DIV being undefined as various times
  1. S DIV=$$DIV^BSDU
  1. N BSDPAR ;cmi/maw 5/2/2009 patch 1010
  1. S BSDPAR=$O(^BSDPAR("B",0)) ;cmi/maw 5/2/2009 patch 1010
  1. I $G(DIV) Q:$$READ^BDGF("Y","Want Chart Requested",$S($P($G(^BSDPAR(DIV,0)),U,25):"YES",1:"YES"),"^D HELPA^BSDROUT")'=1 ;cmi/maw 04/07/2008 PATCH 1009 mod line for default
  1. I '$G(DIV) Q:$$READ^BDGF("Y","Want Chart Requested",$S($P($G(^BSDPAR(BSDPAR,0)),U,25):"YES",1:"YES"),"^D HELPA^BSDROUT")'=1
  1. ;cmi/maw 7/17/2008 PATCH 1009 end of mods
  1. D WISD(DFN,DATE,"RS",$$GET1^DIQ(9009020.2,$$DIV^BSDU,.05))
  1. Q
  1. ;
  1. TERM(PAT) ; returns chart # in terminal digit format
  1. NEW N,T
  1. S N=$$HRCN^BDGF2(PAT,$G(DUZ(2))) ;chart #
  1. S T=$$HRCNT^BDGF2(N) ;terminal digit format
  1. I $$GET1^DIQ(9009020.2,+$$DIV^BSDU,.18)="NO" D
  1. . S T=$$HRCND^BDGF2(N) ;use chart # per site param
  1. Q T
  1. ;
  1. HELPA ;EP; called as help for "Want Chart Requested?" question
  1. W !,"Since this is a same day appointment, do you need the paper"
  1. W !,"chart pulled? Answer YES to have the routing slip print in"
  1. W !,"medical records."
  1. Q
  1. ;
  1. HELPB ;EP; called as help for "Print Appt Letter?" question
  1. W !,"Answer YES to print a reminder letter for this appointment." Q