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

SDRRRECL.m

Go to the documentation of this file.
  1. SDRRRECL ;10N20/MAH - Recall Reminder Manual Printing;09/20/2004
  1. ;;5.3;Scheduling;**536,561,569,579,654,685**;Aug 13, 1993;Build 3
  1. ;;This routine is called from SDRRLRP
  1. ;;If the site has set TYPE OF NOTIFICATION to LETTER this routine
  1. ;;will run.
  1. ;
  1. ; SD*654
  1. ; - do not update date if letter printed to a computer screen.
  1. ; - adds missing var DFN when calling $$BADADR^DGUTL3 and
  1. ; quits updating date and printing ltr if bad addr.
  1. ; - changes word 'card' to 'letter' in the message.
  1. ; - fixes incomplete Canadian address.
  1. ;
  1. K TYPE
  1. MEN ;SET UP WHAT ARE THEY WOULD LIKE TO PRINT FOR LETTERS
  1. K DIR,Y,DTOUT,DIROUT,DIRUT,DUOUT
  1. S DIR(0)="SO^1:Print Letters by Clinic;2:Print Letters by Provider;3:Print Letters by Team;4:Print a Letter by Patient;5:Print Letters for Nonresponsive Patients"
  1. W ! S DIR("A")="Please select what you are looking for"
  1. D ^DIR G:$D(DUOUT)!($D(DTOUT)!($D(DIRUT))) QUIT S Q=Y
  1. I Q=1 G EN
  1. I Q=2 G EN1
  1. I Q=3 G EN3
  1. I Q=4 G EN4
  1. I Q=5 G EN5
  1. Q
  1. EN ;PRINT BY CLINIC
  1. S DIC="^SC(",DIC(0)="AEQMZ" D ^DIC Q:Y<0 S DIV=+Y G:Y<0 QUIT
  1. I '$D(^SD(403.52,"B",DIV)) W !,?5,"**NO RECALL LETTER ON FILE**" G QUIT
  1. D SELDT G:Y<0 QUIT ;SD*561 quit if no date range entered
  1. S %ZIS="QM" D ^%ZIS G:POP QUIT I $D(IO("Q")) S ZTDESC="Print Recall Letters by Clinic",ZTRTN="DQD^SDRRRECL" S ZTSAVE("*")="" D ^%ZTLOAD G QUIT
  1. DQD K ^TMP($J)
  1. U IO S D0=0 F S D0=$O(^SD(403.5,"E",DIV,D0)) Q:D0="" S DTA=$G(^SD(403.5,D0,0)) D:DTA]""
  1. .S TIME=""
  1. .I $P(^SD(403.5,D0,0),"^",9)>30 S TIME=$P(^SD(403.5,D0,0),"^",9) S TIME="**"_TIME_"**"
  1. .S LAB=$S($P($G(^SD(403.5,D0,0)),"^",8)="f":"Lab test(s) have been ordered that require you to FAST",$P(^SD(403.5,D0,0),"^",8)="n":"Lab test(s) have been ordered, which need to be done before an appointment is made",1:"")
  1. .S DFN=+DTA
  1. .Q:$P(DTA,U,6)<SDT!($P(DTA,U,6)>EDT)
  1. .Q:$$TESTPAT^VADPT(DFN)
  1. .D ADD^VADPT,DEM^VADPT
  1. .S STATE=$P(VAPA(5),"^",1),STATE=$$GET1^DIQ(5,STATE_",",1)
  1. .S PN=$P(VADM(1),U)
  1. .I $G(VADM(6),U)'="" Q
  1. .; SD*654 - add missing var DFN
  1. .; - quit updating date and printing ltr if bad addr
  1. .S CHECK=$$BADADR^DGUTL3(DFN) I CHECK>0 S XMSUB="Bad Address for Recall Reminder Patient",XMTEXT="SDRR(" D Q
  1. ..S XMY("G.SDRR BAD ADDRESS")="",XMDUZ=.5
  1. ..S SDRR(1)="Bad Address - letter will not be printed for:"_" "_PN_" "_VA("BID")
  1. ..D ^XMD
  1. ..K XMY,XMSUB,XMTEXT,XMDUZ
  1. .;ADDED THE DATE INFORMATION
  1. .; SD*654 - do not update date if displaying to a computer screen.
  1. .I $E(IOST,1,2)'="C-" S $P(^SD(403.5,D0,0),"^",10)=DT
  1. .D PR
  1. D ^%ZISC G QUIT
  1. ;;done and tested
  1. QUIT K ADTA,D0,DFN,DIC,DIR,DIRUT,DTA,I,L,PN,POP,Y,DIV,EDT,PR,SDT,FAST,TIME,ACC
  1. K LINE,LETTER,MESSAGE,TEST,DOD,CLINIC,FAIL,TEAM,LAB,SDRR,Q,%DT,%ZIS,CHECK,VA,ZTDESC,ZTIO,ZTRTN,ZTSAVE,STATE Q
  1. D KVAR^VADPT
  1. Q
  1. SELDT S %DT="AEX",%DT("A")="Start with RECALL DATE: " D ^%DT Q:Y<0 S SDT=Y,%DT("A")="End with RECALL DATE: " D ^%DT I Y<SDT W $C(7)," ??" G SELDT
  1. S EDT=Y Q
  1. PR S LETTER=0
  1. ; SD*579 - Add date printed and last 4
  1. S PRNDT=$TR($$FMTE^XLFDT(DT,"5DF")," ","0")
  1. S LAST4=$E($P(VA("BID"),U),1,4)
  1. W @IOF
  1. W !,?65,PRNDT
  1. W !,?65,$E(PN,1)_LAST4
  1. F L=1:1:9 W !
  1. ;
  1. ; SD*579 - Fix suffix listed problem
  1. S PNAME=$$NAMEFMT^XLFNAME(PN,"G","")
  1. W !?20,PNAME
  1. D ADDR
  1. I $D(MESSAGE) W !!!!!,?25,MESSAGE
  1. ; SD*569 - Adjust the tab starting position
  1. I TIME'="" W !!!!?2,TIME
  1. I LAB'="" W !!!!!,?2,"*"_LAB
  1. W !!!
  1. S:'$D(MESSAGE) LETTER=$O(^SD(403.52,"B",DIV,LETTER))
  1. I LETTER>0 S LINE=0 F S LINE=$O(^SD(403.52,LETTER,1,LINE)) Q:'LINE W !,?2,$P(^SD(403.52,LETTER,1,LINE,0),"^",1)
  1. K MESSAGE,PRNDT,LAST4,PNAME
  1. Q
  1. EN1 ;print letters by provider
  1. S DIC="^SD(403.54,",DIC(0)="AEQMZ",DIC("A")="Select Provider: " D ^DIC G:Y<0 QUIT S PR=+Y
  1. D SELDT G:Y<0 QUIT ;SD*5.3*561 quit if no date range entered
  1. S %ZIS="QM" D ^%ZIS G:POP QUIT I $D(IO("Q")) S ZTDESC="Print Recall Letters by Provider",ZTRTN="DQD1^SDRRRECL" S ZTSAVE("*")="" D ^%ZTLOAD G QUIT
  1. DQD1 K ^TMP($J)
  1. U IO S D0=0 F S D0=$O(^SD(403.5,"C",PR,D0)) Q:D0="" S (CLINIC,FAIL)=0 S CLINIC=$P($G(^SD(403.5,D0,0)),"^",2) D
  1. .; SD*579 - If entry not exist, kill x-refs and quit.
  1. .I '$D(^SD(403.5,D0)) D KXREF Q
  1. .S DTA=$G(^SD(403.5,D0,0))
  1. .I CLINIC="" S FAIL=1 S MESSAGE="***NO CLINIC ON FILE**"
  1. .I CLINIC'="" I '$D(^SD(403.52,"B",CLINIC)) S MESSAGE="***NO CLINIC LETTER ON FILE**" S FAIL=1
  1. .I CLINIC'="",(FAIL=0) S DIV=CLINIC S LETTER=0,LETTER=$O(^SD(403.52,"B",CLINIC,LETTER))
  1. .S TIME=""
  1. .I $P($G(^SD(403.5,D0,0)),"^",9)>30 S TIME=$P($G(^SD(403.5,D0,0)),"^",9) S TIME="**"_TIME_"**"
  1. .S LAB=$S($P($G(^SD(403.5,D0,0)),"^",8)="f":"Lab test(s) have been ordered that require you to FAST",$P(^SD(403.5,D0,0),"^",8)="n":"Lab test(s) have been ordered, which need to be done before an appointment is made",1:"")
  1. .S DFN=+DTA
  1. .Q:$P(DTA,U,6)<SDT!($P(DTA,U,6)>EDT)
  1. .Q:$$TESTPAT^VADPT(DFN)
  1. .D ADD^VADPT,DEM^VADPT
  1. .S STATE=$P(VAPA(5),"^",1),STATE=$$GET1^DIQ(5,STATE_",",1)
  1. .S PN=$P(VADM(1),U)
  1. .I $G(VADM(6),U)'="" Q
  1. .; SD*654 - add missing var DFN
  1. .; - quit updating date and printing ltr if bad addr
  1. .S CHECK=$$BADADR^DGUTL3(DFN) I CHECK>0 S XMSUB="Bad Address for Recall Reminder Patient",XMTEXT="SDRR(" D Q
  1. ..S XMY("G.SDRR BAD ADDRESS")="",XMDUZ=.5
  1. ..S SDRR(1)="Bad Address - letter will not be printed for:"_" "_PN_" "_VA("BID")
  1. ..D ^XMD
  1. ..K XMY,XMSUB,XMTEXT,XMDUZ
  1. .;ADDED THE DATE INFORMATION
  1. .; SD*654 - do not update date if letter printed to a computer screen.
  1. .I $E(IOST,1,2)'="C-" S $P(^SD(403.5,D0,0),"^",10)=DT
  1. .D PR
  1. D ^%ZISC G QUIT
  1. EN3 ;PRINT LETTER FOR A TEAM
  1. W ! S DIC="^SD(403.55,",DIC(0)="AEQMZ",DIC("A")="Select Clinic Recall Team: " D ^DIC S TEAM=+Y K DIC G:Y<0 QUIT
  1. D SELDT G:Y<0 QUIT ;SD*561 quit if no date range entered
  1. S %ZIS="QM" D ^%ZIS G:POP QUIT I $D(IO("Q")) S ZTDESC="Print Recall Letters for a Team",ZTRTN="DQD4^SDRRRECL" S ZTSAVE("*")="" D ^%ZTLOAD G QUIT
  1. DQD4 S PR=0 F S PR=$O(^SD(403.54,"C",TEAM,PR)) Q:'PR S D0=0 D
  1. .F S D0=$O(^SD(403.5,"C",PR,D0)) Q:D0="" S (CLINIC,FAIL)=0 S CLINIC=$P($G(^SD(403.5,D0,0)),"^",2) D
  1. ..; SD*579 - If entry not exist, kill x-refs and quit.
  1. ..I '$D(^SD(403.5,D0)) D KXREF Q
  1. ..S DTA=$G(^SD(403.5,D0,0))
  1. ..I CLINIC="" S FAIL=1 S MESSAGE="***NO CLINIC ON FILE**"
  1. ..I CLINIC'="" I '$D(^SD(403.52,"B",CLINIC)) S MESSAGE="***NO CLINIC LETTER ON FILE**" S FAIL=1
  1. ..I CLINIC'="",(FAIL=0) S DIV=CLINIC S LETTER=0,LETTER=$O(^SD(403.52,"B",CLINIC,LETTER))
  1. ..S TIME=""
  1. ..I $P($G(^SD(403.5,D0,0)),"^",9)>30 S TIME=$P($G(^SD(403.5,D0,0)),"^",9) S TIME="**"_TIME_"**"
  1. ..S LAB=$S($P($G(^SD(403.5,D0,0)),"^",8)="f":"Lab test(s) have been ordered that require you to FAST",$P(^SD(403.5,D0,0),"^",8)="n":"Lab test(s) have been ordered, which need to be done before an appointment is made",1:"")
  1. ..S DFN=+DTA
  1. ..Q:$P(DTA,U,6)<SDT!($P(DTA,U,6)>EDT) ;SD*561 check selected date range
  1. ..Q:$$TESTPAT^VADPT(DFN)
  1. ..D ADD^VADPT,DEM^VADPT
  1. ..S STATE=$P(VAPA(5),"^",1),STATE=$$GET1^DIQ(5,STATE_",",1)
  1. ..S PN=$P(VADM(1),U)
  1. ..I $G(VADM(6),U)'="" Q
  1. ..; SD*654 - add missing var DFN
  1. ..; - quit updating date and printing ltr if bad addr
  1. ..S CHECK=$$BADADR^DGUTL3(DFN) I CHECK>0 S XMSUB="Bad Address for Recall Reminder Patient",XMTEXT="SDRR(" D Q
  1. ...S XMY("G.SDRR BAD ADDRESS")="",XMDUZ=.5
  1. ...S SDRR(1)="Bad Address - letter will not be printed for:"_" "_PN_" "_VA("BID")
  1. ...D ^XMD
  1. ...K XMY,XMSUB,XMTEXT,XMDUZ
  1. ..;ADDED THE DATE INFORMATION
  1. ..; SD*654 - do not update date if letter printed to a computer screen.
  1. ..I $E(IOST,1,2)'="C-" S $P(^SD(403.5,D0,0),"^",10)=DT
  1. ..D PR
  1. D ^%ZISC G QUIT
  1. ;done and tested
  1. EN4 ;PRINT LETTER FOR ONE PATIENT
  1. K X W ! S DIC="^SD(403.5,",DIC(0)="AEQMZ",DIC("A")="Select Patient: " D ^DIC S D0=+Y K DIC G:Y<0 QUIT
  1. S DIC="^SC(",DIC(0)="AEQMZ" D ^DIC Q:Y<0 S DIV=+Y K DIC G:Y<0 QUIT
  1. I '$D(^SD(403.52,"B",DIV)) W !,?5,"**NO RECALL LETTER ON FILE**" G QUIT
  1. I '$D(^SD(403.5,"E",DIV,D0)) W *7,!!,?5,"**This patient does not have a recall reminder for the selected clinic**",!! G QUIT
  1. ;
  1. ; SD*654 - Check if it needs to quit before prompting for device
  1. S DFN=+$G(^SD(403.5,D0,0))
  1. D DEM^VADPT
  1. S PN=$P(VADM(1),U)
  1. ; SD*654 - add missing var DFN
  1. ; - quit updating date and printing ltr if bad addr
  1. S CHECK=$$BADADR^DGUTL3(DFN) I CHECK>0 S XMSUB="Bad Address for Recall Reminder Patient",XMTEXT="SDRR(" D W !!,?5,"**This patient has been flagged with a Bad Address Indicator.**",!! G QUIT
  1. . S XMY("G.SDRR BAD ADDRESS")="",XMDUZ=.5
  1. . S SDRR(1)="Bad Address - letter will not be printed for:"_" "_PN_" "_VA("BID")
  1. . D ^XMD
  1. . K XMY,SMSUB,XMTEXT,XMDUZ
  1. ; quit if DoD
  1. I $G(VADM(6),U)'="" W !!,?5,VADM(7),!! G QUIT
  1. ; quit if test pat
  1. I $$TESTPAT^VADPT(DFN) W !!,?5,"**You may have selected a test patient.**",!! G QUIT
  1. ; SD*654 - End
  1. ;
  1. S %ZIS="QM" D ^%ZIS G:POP QUIT I $D(IO("Q")) S ZTDESC="Print Recall Letters for a Patient",ZTRTN="DQD3^SDRRRECL" S ZTSAVE("*")="" D ^%ZTLOAD G QUIT
  1. DQD3 K ^TMP($J)
  1. S DTA=$G(^SD(403.5,D0,0)) D:DTA]""
  1. .; SD*569 - Quit if patient's clinic does not match the selected hospital location.
  1. .I $P(DTA,"^",2)'=DIV Q
  1. .S TIME=""
  1. .I $P(^SD(403.5,D0,0),"^",9)>30 S TIME=$P(^SD(403.5,D0,0),"^",9) S TIME="**"_TIME_"**"
  1. .S LAB=$S($P($G(^SD(403.5,D0,0)),"^",8)="f":"Lab test(s) have been ordered that require you to FAST",$P(^SD(403.5,D0,0),"^",8)="n":"Lab test(s) have been ordered, which need to be done before an appointment is made",1:"")
  1. .S DFN=+DTA
  1. .D ADD^VADPT
  1. .S STATE=$P(VAPA(5),"^",1),STATE=$$GET1^DIQ(5,STATE_",",1)
  1. .;ADDED THE DATE INFORMATION
  1. .; SD*654 - do not update date if letter printed to a computer screen.
  1. .I $E(IOST,1,2)'="C-" S $P(^SD(403.5,D0,0),"^",10)=DT
  1. .D PR
  1. D ^%ZISC G QUIT
  1. EN5 ;Print LETTERS for Nonresponsive
  1. S TEAM=""
  1. S DIC="^SD(403.55,",DIC(0)="AEQMZ",DIC("A")="Select Clinic Recall Team: " D ^DIC S TEAM=+Y K DIC G:TEAM<0 QUIT
  1. S %ZIS="QM" D ^%ZIS G:POP QUIT I $D(IO("Q")) S ZTDESC="Print Recall Letters for Nonresponsive",ZTRTN="DQD5^SDRRRECL" S ZTSAVE("*")="" D ^%ZTLOAD G QUIT
  1. DQD5 N CHKDATE
  1. ;SD*5.3*561 remove extraneous write command following $O on next line
  1. S PR=0,CHKDATE=5 F S PR=$O(^SD(403.54,"C",TEAM,PR)) Q:'PR D
  1. .S D0=0 F S D0=$O(^SD(403.5,"C",PR,D0)) Q:'D0 S (CLINIC,FAIL)=0 S CLINIC=$P($G(^SD(403.5,D0,0)),"^",2) D
  1. ..; SD*579 - If entry not exist, kill x-refs and quit
  1. ..I '$D(^SD(403.5,D0)) D KXREF Q
  1. ..I $P($G(^SD(403.5,D0,0)),"^",10)="" QUIT
  1. ..; SD*569 - Prevent from printing more than ONE second letter.
  1. ..I $P($G(^SD(403.5,D0,0)),"^",13)'="" QUIT
  1. ..S RDATE=$P($G(^SD(403.5,D0,0)),"^",6) S CHECK=$$FMDIFF^XLFDT(RDATE,DT) I CHECK>CHKDATE K RDATE QUIT
  1. ..S DTA=$G(^SD(403.5,D0,0))
  1. ..I CLINIC="" S FAIL=1 S MESSAGE="***NO CLINIC ON FILE**"
  1. ..I CLINIC'="" I '$D(^SD(403.52,"B",CLINIC)) S MESSAGE="***NO CLINIC LETTER ON FILE**" S FAIL=1
  1. ..I CLINIC'="",(FAIL=0) S DIV=CLINIC S LETTER=0,LETTER=$O(^SD(403.52,"B",CLINIC,LETTER))
  1. ..S TIME=""
  1. ..I $P(^SD(403.5,D0,0),"^",9)>30 S TIME=$P(^SD(403.5,D0,0),"^",9) S TIME="**"_TIME_"**"
  1. ..S LAB=$S($P($G(^SD(403.5,D0,0)),"^",8)="f":"Lab test(s) have been ordered that require you to FAST",$P(^SD(403.5,D0,0),"^",8)="n":"Lab test(s) have been ordered, which need to be done before an appointment is made",1:"")
  1. ..S DFN=+DTA
  1. ..Q:$$TESTPAT^VADPT(DFN)
  1. ..D ADD^VADPT,DEM^VADPT
  1. ..S STATE=$P(VAPA(5),"^",1),STATE=$$GET1^DIQ(5,STATE_",",1)
  1. ..S PN=$P(VADM(1),U)
  1. ..I $G(VADM(6),U)'="" Q
  1. ..; SD*654 - add missing var DFN
  1. ..; - quit updating date and printing ltr if bad addr
  1. ..S CHECK=$$BADADR^DGUTL3(DFN) I CHECK>0 S XMSUB="Bad Address for Recall Reminder Patient",XMTEXT="SDRR(" D Q
  1. ...S XMY("G.SDRR BAD ADDRESS")="",XMDUZ=.5
  1. ...S SDRR(1)="Bad Address - letter will not be printed for:"_" "_PN_" "_VA("BID")
  1. ...D ^XMD
  1. ...K XMY,XMSUB,XMTEXT,XMDUZ
  1. ..;ADDED THE DATE INFORMATION
  1. ..; SD*654 - do not update date if letter printed to a computer screen.
  1. ..I $E(IOST,1,2)'="C-" S $P(^SD(403.5,D0,0),"^",13)=DT
  1. ..D PR
  1. D ^%ZISC G QUIT
  1. Q
  1. ;
  1. KXREF ; SD*579 - kill x-refs if entry not exist
  1. S STR="BCDE"
  1. F I=1:1:$L(STR) D
  1. .S X=$E(STR,I,I)
  1. .S N3=0 F S N3=$O(^SD(403.5,X,N3)) Q:N3'>0 D
  1. ..S N4=0 F S N4=$O(^SD(403.5,X,N3,N4)) Q:N4'>0 D
  1. ...I N4=D0 K ^SD(403.5,X,N3,N4)
  1. K I,STR,X,N3,N4
  1. Q
  1. ;
  1. ADDR ; SD*654 - Patient address
  1. ; Change state to abbr.
  1. N SDRRIENS,SDRRX
  1. I $D(VAPA(5)) S SDRRIENS=+VAPA(5)_",",SDRRX=$$GET1^DIQ(5,SDRRIENS,1),$P(VAPA(5),U,2)=SDRRX
  1. I $D(VAPA(17)) S SDRRIENS=+VAPA(17)_",",SDRRX=$$GET1^DIQ(5,SDRRIENS,1),$P(VAPA(17),U,2)=SDRRX
  1. K SDRRIENS,SDRRX
  1. ;
  1. N SDRRACT1,SDRRACT2,LL
  1. ; Check Confidential Address Indicator (0=Inactive,1=Active)
  1. S SDRRACT1=VAPA(12),SDRRACT2=$P($G(VAPA(22,2)),U,3)
  1. ; If Confidential address is not active, print regular address
  1. I ($G(SDRRACT1)=0)!($G(SDRRACT2)'="Y") D
  1. . F LL=1:1:3 W:VAPA(LL)]"" !,?20,VAPA(LL)
  1. . ; If country is blank, display as USA
  1. . I (VAPA(25)="")!($P(VAPA(25),U,2)="UNITED STATES") D
  1. . . ; Display city, state, zip
  1. . . W !?20,VAPA(4)_" "_$P(VAPA(5),U,2)_" "_$P(VAPA(11),U,2)
  1. . E D
  1. . . ; Display city, province, postal code
  1. . . W !?20,VAPA(4)_" "_VAPA(23)_" "_VAPA(24)
  1. . ; Display country
  1. . W:($P(VAPA(25),U,2)'="UNITED STATES") !,?20,$P(VAPA(25),U,2)
  1. ; If Confidential address is active, print confidential address
  1. I $G(SDRRACT1)=1,$G(SDRRACT2)="Y" D
  1. . F LL=13:1:15 W:VAPA(LL)]"" !,?20,VAPA(LL) ;*685
  1. . I (VAPA(28)="")!($P(VAPA(28),"^",2)="UNITED STATES") D
  1. . . W !,?20,VAPA(16)_" "_$P(VAPA(17),U,2)_" "_$P(VAPA(18),U,2)
  1. . E D
  1. . . W !,?20,VAPA(27)_" "_VAPA(16)_" "_VAPA(26)
  1. . I ($P(VAPA(28),"^",2)'="UNITED STATES") W !?20,$P(VAPA(28),U,2)
  1. Q