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

BSDROUT1.m

Go to the documentation of this file.
  1. BSDROUT1 ; IHS/ANMC/LJF,WAR - ROUTING SLIPS PRINT ;
  1. ;;5.3;PIMS;**1001,1003,1004,1007,1009**;DEC 01, 2006
  1. ;IHS/ITSC/LJF 04/22/2004 PATCH 1001 centered duplicate routings slips on paper
  1. ;IHS/ITSC/LJF 06/17/2005 PATCH 1003 if BSDHS set to 1, don't print other documents
  1. ;IHS/OIT/LJF 07/15/2005 PATCH 1004 increment count when reprinting add-ons; needed for form feed
  1. ;cmi/anch/maw 11/22/2006 PATCH 1007 modified line in APPT for item 1007.15
  1. ;cmi/anch/maw 05/09/2008 PATCH 1009 requirement 64 added check of device in OTHER to reopen the printer if closed after med profile, added CHKDV subroutine
  1. ;
  1. PRINT(ORDER,SDATE) ;EP; called to print routing slips
  1. ; called by SDROUT0
  1. ; assumes the following variables are set: SDSTART,SDSTOP,SDX,SDREP,DIV
  1. ; loop by sort criteria and get patient
  1. NEW SORT,TERM,DFN,BSDI,CNT,SDCNT,SECOND
  1. S SORT=0
  1. F S SORT=$O(^TMP("SDRS",$J,SORT)) Q:SORT="" D
  1. . S TERM=0 F S TERM=$O(^TMP("SDRS",$J,SORT,TERM)) Q:TERM="" D
  1. .. S DFN=0 F S DFN=$O(^TMP("SDRS",$J,SORT,TERM,DFN)) Q:'DFN D
  1. ... ;
  1. ... I $$FORMAT="DUPLICATE" S SECOND=0 ;print 2 per page
  1. ... D RS(SORT,TERM,DFN,1) ;print one rs for file room
  1. ... ;
  1. ... ; now print a copy for each appt if parameter set that way
  1. ... I $$MORERS S CNT=$$APPTCNT(SORT,TERM,DFN) F BSDI=1:1:CNT D RS(SORT,TERM,DFN,0)
  1. ... ;
  1. ... D OTHER(DFN) ;print other forms
  1. K SDCNT ;remove this line to print # of rs printed on end of report
  1. K BDGSDEV ;cmi/anch/maw 5/9/2008 PATCH 1009 rqmt 64 kill storage of device name after printing of all RS and other docs
  1. K SDSTOP D END^SDROUT1
  1. Q
  1. ;
  1. RS(SORT,TERM,DFN,FIRST) ; -- print rs
  1. ; quit if not first appt that day when sorting by clinic
  1. ;
  1. ;If printing >1 RS and is second or more time through, sorting by clinic, quit if not first appt that day
  1. I (FIRST=0)&(ORDER=2) Q:'$G(^TMP("SDRS",$J,DFN,SORT))
  1. I (FIRST=0)&(ORDER=3) Q:'$G(^TMP("SDRS",$J,DFN,SORT))
  1. ;
  1. ;if printing only one RS and sorting by clinic, quit if this is not first appt
  1. I ($$FIRST^BSDROUT0(DFN,+$O(^TMP("SDRS",$J,SORT,TERM,DFN,0)))=0),(ORDER=2),($$MORERS=0) Q
  1. I ($$FIRST^BSDROUT0(DFN,+$O(^TMP("SDRS",$J,SORT,TERM,DFN,0)))=0),(ORDER=3),($$MORERS=0) Q
  1. ;
  1. NEW DATE,CLN,BSDPG
  1. D RSHED(DFN) ;rs heading
  1. S DATE=0 D CURHED ;current appt heading
  1. F S DATE=$O(^TMP("SDRS",$J,SORT,TERM,DFN,DATE)) Q:'DATE D
  1. . S CLN=^TMP("SDRS",$J,SORT,TERM,DFN,DATE)
  1. . ;
  1. . ; make sure RS by clinic contains all appts for date
  1. . I (ORDER=2)!(ORDER=3) D APPTC(DFN,TERM,DATE),PRTDT(DFN,DATE,CLN,$P(CLN,U,3)) S DATE=9999999 Q
  1. . ;
  1. . D APPT(DFN,DATE,CLN) ;display appt info
  1. . D PRTDT(DFN,DATE,CLN,$P(CLN,U,3)) ;record date printed
  1. I $$FORMAT="LONG" D FUTURE(DFN) ;find future appts
  1. D PRINTED ;date printed
  1. ;
  1. I $$FORMAT="DUPLICATE",'SECOND D
  1. . S SECOND=1 ;mark as second one per page
  1. . ;F Q:$Y>((IOSL-4)\2) W ! ;move to middle of piece of paper
  1. . F Q:$Y>((IOSL)\2) W ! ;move to middle of piece of paper ;IHS/ITSC/LJF 4/22/2004 PATCH #1001
  1. . W !,$$REPEAT^XLFSTR("-",IOM) ;dashed line between routing slips
  1. . D RS(SORT,TERM,DFN,FIRST)
  1. Q
  1. ;
  1. APPTC(DFN,TERM,DATE) ; -- loop through all patient's appts for date
  1. NEW APDT,CLN,ARRAY,SORT
  1. S APDT=(DATE\1)-.0001
  1. F S APDT=$O(^TMP("SDRS1",$J,DFN,APDT)) Q:'APDT D
  1. . S SORT=$G(^TMP("SDRS1",$J,DFN,APDT))
  1. . S CLN=$G(^TMP("SDRS",$J,SORT,TERM,DFN,APDT))
  1. . D APPT(DFN,APDT,CLN)
  1. Q
  1. ;
  1. APPT(DFN,DATE,CLN) ; -- print individual appointments
  1. I $Y>(IOSL-3) D RSHED(DFN),CURHED
  1. NEW X,Y
  1. I $P(CLN,U,3)'="CR" S X=DATE D TM^SDROUT0 W !,$J(X,8) ;appt time
  1. ;I $P(CLN,U,3)="CR" W !,$J("****",7) ;no time for cr ;cmi/anch/maw 11/11/2006 orig line item 1007.16 patch 1007
  1. ;cmi/anch/maw 8/15/2007 added time at ft defiance request
  1. I $P(CLN,U,3)="CR" D
  1. . ;S X=DATE D TM^SDROUT0
  1. . W !,"CR-"_$E(DATE,4,5)_"/"_$E(DATE,6,7)_"-"_($E(DATE,1,3)+1700) ;cmi/anch/maw 11/11/2006 new line item 1007.15 patch 1007
  1. ;
  1. ; mark walkins, same day appts and chart requests
  1. ;W ?9,$P(CLN,U,3) ;cmi/anch/maw orig line 3/23/2007 PATCH 1007 item 1007.15
  1. I $P(CLN,U,3)'="CR" W ?9,$P(CLN,U,3) ;cmi/anch/maw 3/23/2007 PATCH 1007 item 1007.15
  1. ;
  1. S X=CLN I $P(CLN,U,2)]"" S X=$P(CLN,U,2)_" Stop" ;xray or lab stop
  1. E S X=$$GET1^DIQ(44,+CLN,.01) ;clinic name
  1. W ?13,$E(X,1,25) ;print it
  1. I $P(CLN,U,2)="" D
  1. . I $$FORMAT="SHORT" W !?11 ;adjust print head
  1. . E W ?40
  1. . W $$GET1^DIQ(44,+CLN,10) ;physical location
  1. . W:$$FORMAT'="SHORT" ?68,$$GET1^DIQ(44,+CLN,99) ;clinic telephone
  1. ;
  1. S X=$$OI^BSDU2(DFN,+CLN,DATE) I X]"" W !?13,X ;other info
  1. ;
  1. ;chart request
  1. S X=0 F S X=$O(^SC(+CLN,"C",DATE\1,1,X)) Q:'X D
  1. . Q:+$G(^SC(+CLN,"C",DATE\1,1,X,0))'=DFN
  1. . S Y=$G(^SC(+CLN,"C",DATE\1,1,X,9999999))
  1. . ;
  1. . NEW COL S COL=$S($$FORMAT="SHORT":3,1:13)
  1. . W !?COL,$P(Y,U,3) ;deliver to info
  1. . W !?COL,"Requested at "_$$FMTE^XLFDT($E(+Y,1,12))_" by "_$$GET1^DIQ(200,+$P(Y,U,2),.01)_" x"_$$GET1^DIQ(200,+$P(Y,U,2),.132)
  1. Q
  1. ;
  1. PRTDT(P,D,C,MODE) ; -- called to set date routing slip printed
  1. NEW DIE,DA,DR
  1. I MODE="CR" D PRTCR(P,D,C) Q ;chart request printed
  1. Q:'$D(^DPT(P,"S",D,0))
  1. Q:$P(^DPT(P,"S",D,0),U,2)["C"
  1. S DIE="^DPT("_P_",""S"",",DA=D,DA(1)=P
  1. S DR="8///Y" S:$P(^DPT(P,"S",D,0),U,13)="" DR=DR_";8.5///^S X=""NOW"""
  1. D ^DIE
  1. Q
  1. ;
  1. PRTCR(PAT,DATE,CLN) ; -- set date/time chart request printed
  1. NEW X,DIE,DA,DR,IEN
  1. S IEN=0 F S IEN=$O(^SC(+CLN,"C",(DATE\1),1,IEN)) Q:'IEN D
  1. . Q:+$G(^SC(+CLN,"C",(DATE\1),1,IEN,0))'=PAT ;wrong patient
  1. . S DIE="^SC("_(+CLN)_",""C"","_(DATE\1)_",1,"
  1. . S DA=IEN,DA(1)=DATE\1,DA(2)=+CLN,DR="9999999.04///^S X=""NOW"""
  1. . D ^DIE
  1. Q
  1. ;
  1. FUTURE(DFN) ; -- print future appts
  1. NEW BSDX,BSDY,BSDI,X,Y
  1. ; print subheading (and page heading if needed)
  1. I $O(^DPT(DFN,"S",SDATE_".9"))>0 D
  1. . I $Y>(IOSL-5) D RSHED(DFN)
  1. . D FUTHED
  1. ;
  1. ; loop through future appts and print
  1. F BSDX=SDATE_".9":0 S BSDX=$O(^DPT(DFN,"S",BSDX)) Q:BSDX="" D
  1. . I $Y>(IOSL-5) D RSHED(DFN),FUTHED
  1. . S BSDY=$G(^DPT(DFN,"S",BSDX,0)) ;appt data
  1. . Q:$P(BSDY,U,2)["C" ;skip cancelled appts
  1. . ;
  1. . ; display extra stops if scheduled
  1. . F BSDI=3,4,5 I $P(BSDY,U,BSDI)]"" D
  1. .. I $Y>(IOSL-5) D RSHED(DFN),FUTHED
  1. .. S (X,Y)=$P(BSDY,U,BSDI)
  1. .. D TM^SDROUT0,DTS^SDUTL W !,Y,?13,$J(X,8) ;date and time
  1. .. W ?22,$S(BSDI=3:"LAB",BSDI=4:"XRAY",1:"EKG")," Stop"
  1. . ;
  1. . ; display main appt
  1. . S (X,Y)=BSDX D TM^SDROUT0,DTS^SDUTL W !,Y,?13,$J(X,8) ;date/time
  1. . W ?21,$$GET1^DIQ(44,+BSDY,.01) ;clinic
  1. . W ?55,$$GET1^DIQ(44,+BSDY,10) ;location
  1. Q
  1. ;
  1. PRINTED ; add date printed, requested by and increment count of rs printed
  1. I SDREP,SDX'["ALL" D Q
  1. . W !!,"DATE ORIGINALLY PRINTED : ",$$FMTE^XLFDT(SDSTART)
  1. . W !,"DATE REPRINTED: ",$$FMTE^XLFDT(DT)
  1. . S SDCNT=$G(SDCNT)+1 ;increment # of routing slips printed;IHS/OIT/LJF 7/15/2005 PATCH 1004
  1. W !!,"DATE PRINTED: ",$$FMTE^XLFDT($$NOW^XLFDT)
  1. W !,"Requested by: ",$$GET1^DIQ(200,$G(DUZ),.01)
  1. S SDCNT=$G(SDCNT)+1 ;increment # of routing slips printed
  1. Q
  1. ;
  1. CURHED ; -- print current appt heading
  1. W !!?9,"**CURRENT APPOINTMENTS**"
  1. W !?3,"TIME",?13,"CLINIC" Q:$$FORMAT="SHORT" ;short and narrow
  1. W ?40,"LOCATION",?68,"PHONE"
  1. Q
  1. ;
  1. FUTHED ; -- print future appt heading
  1. W !!,?9,"**FUTURE APPOINTMENTS**",!,$$REPEAT^XLFSTR("=",79)
  1. W !," DATE",?13,"TIME",?21,"CLINIC",?55,"LOCATION",!
  1. Q
  1. ;
  1. RSHED(DFN) ; -- routing slip heading
  1. I $$FORMAT="SHORT" D HED^BSDROUT2 Q ;different heading for short form
  1. ;I $G(SDCNT)>0 W @IOF
  1. I $$FORMAT="DUPLICATE",SECOND W ! ;IHS/ITSC/LJF 4/22/2004 PATCH #1001
  1. E I $G(SDCNT)>0 W @IOF ;IHS/ITSC/LJF 4/22/2004 PATCH #1001
  1. W !,"FACILITY: ",$$GET1^DIQ(40.8,$$DIV,.01)
  1. W ?40,"**",$E($$CONF^BSDU,1,25),"**"
  1. S BSDPG=$G(BSDPG)+1 W !,"PAGE ",BSDPG,?10,"OUTPATIENT ROUTING SLIP"
  1. ;
  1. W !!,$$GET1^DIQ(2,DFN,.01),?30,"HRCN: ",$$HRCN^BDGF2(DFN,+$G(DUZ(2)))
  1. ;
  1. W !?5,"DOB: ",$$GET1^DIQ(2,DFN,.03)
  1. W ?44,"APPT DT: ",$$FMTE^XLFDT(SDATE,5)
  1. ;
  1. I $$DEAD^BDGF2(DFN) W !?10,"**** PATIENT DIED ON ",$$DOD^BDGF2(DFN)," ****"
  1. ;
  1. Q:BSDPG>1 ;rest only needs to be on first page
  1. ;
  1. I $$FORMAT="LONG" D
  1. . NEW VAPA,I D ADD^VADPT F I=1:1:3 W:VAPA(I)]"" !,VAPA(I) ;street
  1. . W !,VAPA(4),", ",$P(VAPA(5),U,2)," ",VAPA(6) ;city,state,zip
  1. ;
  1. D STATUS^BSDROUT2(DFN)
  1. Q
  1. ;
  1. OTHER(DFN) ; -- calls other forms
  1. Q:$$GET1^DIQ(9009020.2,$$DIV,.04)'="YES" ;print forms with rs?
  1. Q:$G(BSDNHS) ;IHS/ITSC/LJF 6/17/2005 PATCH 1003 if set to 1, don't print other documents
  1. ;
  1. ; only print extra forms with first routing slip for day
  1. I (ORDER=2)!(ORDER=3) Q:'$G(^TMP("SDRS",$J,DFN,SORT))
  1. ;
  1. D HS(DFN,SDATE) ; health summary
  1. D MP(DFN,SDATE) ; med profile
  1. S IO=$$CHKDV($G(BDGSDEV)) ;cmi/anch/maw 5/9/2008 add check to see if device is still open
  1. D APRO(DFN,SDATE) ; action profile
  1. D AIU(DFN,SDATE) ; address/insurance update
  1. Q
  1. ;
  1. HS(DFN,SDATE) ; -- health summary
  1. NEW Y
  1. S Y=$$ONE(DFN,SDATE,.04) I 'Y Q
  1. D HS^BSDFORM(DFN,$P(Y,U,2)) Q
  1. ;
  1. MP(DFN,SDATE) ; -- med profile
  1. NEW BSDRX
  1. S BSDRX=$$ONE(DFN,SDATE,.06) I 'BSDRX Q
  1. I $P(BSDRX,U,2)'=2 D MP^BSDFORM(DFN)
  1. Q
  1. ;
  1. APRO(DFN,SDATE) ; -- action profiles (one for each appt where needed)
  1. NEW BSDX,CLN,Y
  1. S BSDX=SDATE\1
  1. F S BSDX=$O(^DPT(DFN,"S",BSDX)) Q:BSDX="" Q:BSDX>(SDATE+.2400) D
  1. . S CLN=$P($G(^DPT(DFN,"S",BSDX,0)),U) Q:CLN="" Q:$P(^(0),U,2)["C"
  1. . S Y=$$GET1^DIQ(9009017.2,CLN,.06,"I") Q:Y=0 Q:Y=1
  1. . D APRO^BSDFORM(CLN,DFN,SDATE)
  1. Q
  1. ;
  1. AIU(DFN,SDATE) ; -- insurance update
  1. Q:'$$ONE(DFN,SDATE,.07) D AIU^BSDFORM(DFN,DIV) Q
  1. ;
  1. ;
  1. ONE(DFN,SDATE,FORM) ; -- returns 1 if at least one clinic for pat wants form
  1. NEW X,Y,Z,C
  1. S Y=0,X=SDATE\1
  1. F S X=$O(^DPT(DFN,"S",X)) Q:X="" Q:X>(SDATE+.2400) Q:(+Y=1) D
  1. . S C=$P($G(^DPT(DFN,"S",X,0)),U) Q:C="" Q:$P(^(0),U,2)["C"
  1. . S Z=$$GET1^DIQ(9009017.2,C,FORM,"I") Q:+Z=0 ;form not turned on
  1. . I FORM=.06 S Y=1_U_Z Q
  1. . I FORM=.04 S Y=1_U_$$GET1^DIQ(9009017.2,C,.05,"I") Q ;hs type ien
  1. . S Y=1
  1. ;
  1. ; if none found, check chart requests
  1. I Y=0 D
  1. . S C=0 F S C=$O(^SC("AIHSCR",DFN,C)) Q:'C Q:Y=1 D
  1. .. I $O(^SC("AIHSCR",DFN,C,(SDATE\1),0)) D
  1. ... S Z=$$GET1^DIQ(9009017.2,C,FORM,"I") Q:+Z=0 ;form not turned on
  1. ... I FORM=.06 S Y=1_U_Z Q
  1. ... I FORM=.04 S Y=1_U_$$GET1^DIQ(9009017.2,C,.05,"I") Q ;hs type ien
  1. ... S Y=1
  1. Q Y
  1. ;
  1. ;
  1. MORERS() ; -- returns 1 if want >1 rs
  1. Q $$GET1^DIQ(9009020.2,$$DIV,.03,"I")
  1. ;
  1. DIV() ; -- returns division ien
  1. Q $$DIV^BSDU
  1. ;
  1. FORMAT() ; -- returns format used - short, long or duplicate
  1. Q $$GET1^DIQ(9009020.2,$$DIV,.16)
  1. ;
  1. APPTCNT(A,B,C) ; -- count how many appts patient has for date
  1. NEW CNT,X S (CNT,X)=0
  1. F S X=$O(^TMP("SDRS",$J,A,B,C,X)) Q:'X D
  1. . Q:$P(^TMP("SDRS",$J,A,B,C,X),U,2)]"" ;don't count test stops
  1. . S CNT=CNT+1
  1. Q CNT
  1. ;
  1. CHKDV(SDEV) ;-- lets check to see if the original device got closed and if so reopen it
  1. I SDEV="" Q IO
  1. I IO=SDEV Q IO
  1. S IOP=SDEV D ^%ZIS
  1. Q IO
  1. ;