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

SDEC40.m

Go to the documentation of this file.
  1. SDEC40 ;ALB/SAT,WTC,LEG - VISTA SCHEDULING RPCS ;Feb 12, 2020@15:22
  1. ;;5.3;Scheduling;**627,665,694,785,813**;Aug 13, 1993;Build 6
  1. ;
  1. ; ICR
  1. ; ---
  1. ; 7024 - #40.8
  1. ; 7025 - #43
  1. ; 7030 - #2 (appointment record)
  1. ; 7034 - DGNFUNC
  1. ; 10035 - #2 (demographics)
  1. ; 10060 - #200
  1. ; 10061 - VAPDT
  1. ;
  1. Q
  1. ;
  1. ; APL - Print Appointment Letter
  1. ;
  1. APPTLETR(SDECY,SDECAPID,LT) ;Print Appointment Letter
  1. ;APPTLETR(SDECY,SDECAPID,LT) external parameter tag is in SDEC
  1. ; SDECAPPT = Pointer to appointment in SDEC APPOINTMENT file 409.84
  1. ; LT = Letter type - "N"=No Show; "P"=Pre-Appointment; "A"=Cancelled by Patient; "C"=Cancelled by Clinic
  1. ; Called by SDEC PRINT APPT LETTER remote procedure
  1. N SDECI,SDECNOD,SDECTMP,DFN,IN,RES,SCLT,SDC,SDLET,SDS,SDT,X1,X2,Y,TIMEZONE
  1. N SDIV,SDFORM,SDNAM,SDSSN,VAPA
  1. S SDECI=0
  1. K ^TMP("SDEC",$J)
  1. S SDECY="^TMP(""SDEC"","_$J_")"
  1. S ^TMP("SDEC",$J,0)="T00080ERRORID"_$C(30)
  1. I '+SDECAPID D ERR^SDECERR("Invalid Appointment ID.") Q
  1. I '$D(^SDEC(409.84,SDECAPID,0)) D ERR^SDECERR("Invalid Appointment ID.") Q
  1. I $G(LT)="" S LT="P" ;D ERR^SDECERR("Invalid Letter Type.") Q
  1. S SDECNOD=^SDEC(409.84,SDECAPID,0)
  1. S SDT=$P(SDECNOD,U) ;Get appt time
  1. S DFN=$P(SDECNOD,U,5) ;Get patient pointer to VA PATIENT (^DPT) file 2
  1. S RES=$P(SDECNOD,U,7) S SDC=$P(^SDEC(409.831,RES,0),U,4) ;get resource and clinic
  1. S SDS=^DPT(DFN,"S",SDT,0)
  1. S SCLT=$S(LT="N":1,LT="P":2,LT="C":3,LT="A":4,1:"2") ;get storage position of LETTER pointer
  1. S SDLET=$P($G(^SC(SDC,"LTR")),U,SCLT)
  1. I SDLET="" D ERR^SDECERR($S(SCLT=1:"No-Show",SCLT=2:"Pre-Appointment",SCLT=3:"Clinic Cancellation",1:"Patient Cancellation")_" Letter not defined for Clinic "_$P(^SC(SDC,0),U)_".") Q ;LEG 5/17/2021 ; added missing space
  1. S SDIV=$P(^SC(SDC,0),"^",15),SDIV=$S(SDIV:SDIV,1:$O(^DG(40.8,0)))
  1. S SDFORM=$P($G(^DG(40.8,SDIV,"LTR")),U,1)
  1. ; data header
  1. S ^TMP("SDEC",$J,0)="T00080TEXT"_$C(30)
  1. D PRT(DFN,SDC,SDT,LT,SDLET,SDFORM)
  1. D WRAPP(DFN,SDC,SDT,LT,SDLET)
  1. D REST(DFN,SDC,SDT,LT,SDLET,SDFORM)
  1. S SDECI=SDECI+1 S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(30,31)
  1. Q
  1. ;
  1. ;
  1. PRT(DFN,SDC,SD,LT,SDLET,SDFORM) ;
  1. ; DFN - pointer to PATIENT file 2
  1. ; SDC - pointer to HOSPITAL LOCATION file 44
  1. ; SD - appointment time in FM format
  1. ; LT - Letter type - "N"=No Show; "P"=Pre-Appointment; "A"=Cancelled by Patient; "C"=Cancelled by Clinic
  1. ; SDLET - pointer to LETTER file 407.5
  1. ;WRITE GREETING AND OPENING TEXT OF LETTER
  1. N A,DPTNAME,IN,X,Y
  1. S A=DFN
  1. Q:DFN=""
  1. Q:LT=""
  1. S SDFORM=$G(SDFORM)
  1. S Y=DT D DTS^SDUTL
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(64," ")_Y_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(64," ")_$$LAST4(A)_$C(13,10)
  1. I 'SDFORM D
  1. .F I=1:1:4 S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. .D ADDR
  1. .F I=1:1:4 S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. ;
  1. S DPTNAME("FILE")=2,DPTNAME("FIELD")=".01",DPTNAME("IENS")=(+A)_","
  1. S X=$$NAMEFMT^XLFNAME(.DPTNAME,"G","M")
  1. ;S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)="Dear "_$S($P(^DPT(+A,0),"^",2)="M":"Mr. ",1:"Ms. ")_X_","_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)="Dear "_X_","_$C(13,10) ;VSE-693;LEG 5/12/21
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. ;loop and display initial section of Letter
  1. S IN=0 F S IN=$O(^VA(407.5,SDLET,1,IN)) Q:IN'>0 D
  1. . S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=^VA(407.5,SDLET,1,IN,0)_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. Q
  1. ;
  1. WRAPP(DFN,SDC,SD,LT,SDLET) ;WRITE APPOINTMENT INFORMATION
  1. N B,DOW,S,SDCL,SDDAT,SDHX,SDT0,SDTMP,SDX,SDX1,X
  1. S SDX=SD,S=$G(^DPT(DFN,"S",SD,0)) ;alb/sat 665 add S
  1. S SDCL=$P(^SC(+SDC,0),"^",1),SDCL=" Clinic: "_SDCL D FORM ; SD*5.3*622 end changes
  1. ;
  1. S SDX1=SDX S:$D(SDS) S=SDS F B=3,4,5 I $P(S,"^",B)]"" S SDCL=$S(B=3:"LAB",B=4:"XRAY",1:"EKG"),SDX=$P(S,"^",B) D FORM ;alb/sat 665
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10) ;alb/sat 665
  1. S (SDX,X)=SDX1 Q
  1. ; SD*5.3*622 - add more detail for appointment and format it
  1. FORM ;S:$D(SDX) X=SDX S SDHX=X D DW^%DTC S DOW=X,X=SDHX X ^DD("FUNC",2,1) S SDT0=X,SDDAT=$P("JAN^FEB^MAR^APR^MAY^JUN^JUL^AUG^SEP^OCT^NOV^DEC","^",$E(SDHX,4,5))_" "_+$E(SDHX,6,7)_", "_(1700+$E(SDHX,1,3)) ; See below wtc 6/7/18 694
  1. ;
  1. ; Change display time for noon and midnight from 12:00 PM to 12:00 Noon and 12:00 Midnight
  1. ;
  1. S TIMEZONE=$$TIMEZONEDATA^SDESUTIL($G(SDC)),TIMEZONE=$P($G(TIMEZONE),U)
  1. S:$D(SDX) X=SDX S SDHX=X D DW^%DTC S DOW=X,X=SDHX ;
  1. I $P(X,".",2)=12!($P(X,".",2)=24) S X="12:00 "_$S($P(X,".",2)=12:"N",1:"M") ;
  1. E X ^DD("FUNC",2,1) ;
  1. S SDT0=X,SDDAT=$P("JAN^FEB^MAR^APR^MAY^JUN^JUL^AUG^SEP^OCT^NOV^DEC","^",$E(SDHX,4,5))_" "_+$E(SDHX,6,7)_", "_(1700+$E(SDHX,1,3))
  1. I '$D(B) S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=" Date/Time: "_DOW_" "_$J(SDDAT,12)_$S('$D(B)&$D(SDC):$J(SDT0,9),1:"")_" "_TIMEZONE_$C(13,10)
  1. I '$D(B),$D(SDC) D
  1. .S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=" "_SDCL_$C(13,10)
  1. ; get default provider if defined for a given clinic, print it on the
  1. ; letter only if we have a YES on file, same for clinic location
  1. ; skip printing the provider label if the field is empty in file #44
  1. N J,SDLOC,SDPROV,SDPRNM,SDTEL,SDTELEXT
  1. S SDLOC=$P($G(^SC(+SDC,0)),"^",11) ; physical location of the clinic
  1. ;ajf ;050918 ;R16969456FY18
  1. S SDTEL=$P($G(^SC(+SDC,99)),"^",1) ; telephone number of clinic
  1. S SDTELEXT="" I SDTEL]"",$G(^SC(+SDC,99.1))]"" D
  1. .S SDTELEXT=^SC(+SDC,99.1) ; telephone ext of clinic
  1. ; get default provider, if any
  1. F J=0:0 S J=$O(^SC(+SDC,"PR",J)) Q:'J>0 I $P($G(^SC(+SDC,"PR",J,0)),U,2)=1 S SDPROV=+$P(^SC(+SDC,"PR",J,0),U,1)
  1. I $D(SDC),'$D(B),$P($G(^VA(407.5,SDLET,3)),U,2)="Y" D
  1. .I SDLOC]"" S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=" "_"Location: "_SDLOC_$C(13,10)
  1. I $D(SDC),'$D(B),SDTEL]"" D
  1. .S SDTMP=" Telephone: "_SDTEL
  1. .I SDTELEXT]"" S SDTMP=SDTMP_" Telephone Ext.: "_SDTELEXT
  1. .S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=SDTMP_$C(13,10)
  1. I $D(SDPROV) D
  1. .I $D(SDC),SDPROV>0 S SDPRNM=$P(^VA(200,SDPROV,0),U,1)
  1. .I $D(SDC),'$D(B),$P($G(^VA(407.5,SDLET,3)),U,1)="Y" I SDPRNM]"" S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=" Provider: "_$G(SDPRNM)_$C(13,10)
  1. ; call handler for LAB, XRAY, and EKG tests
  1. I $D(B) D TST
  1. Q
  1. REST(DFN,SDC,SD,LT,SDLET,SDFORM) ;WRITE THE REMAINDER OF LETTER
  1. N A,Z5,I,IN,X
  1. S A=DFN
  1. S SDFORM=$G(SDFORM)
  1. ;loop and display final section of Letter
  1. S IN=0 F S IN=$O(^VA(407.5,SDLET,2,IN)) Q:IN'>0 D
  1. . S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=^VA(407.5,SDLET,2,IN,0)_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. D:SDFORM=1 ADDR
  1. Q
  1. ADDR K VAHOW S DFN=+A S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_$$FML^DGNFUNC(DFN)_$C(13,10)
  1. I $D(^DG(43,1,"BT")),'$P(^("BT"),"^",3) S VAPA("P")=""
  1. S X1=DT,X2=5 D C^%DTC ;I '$D(VAPA("P")) S (VATEST("ADD",9),VATEST("ADD",10))=X
  1. D ADD^VADPT D
  1. .;CHANGE STATE TO ABBR.
  1. .N SDIENS,X
  1. .I $D(VAPA(5)) S SDIENS=+VAPA(5)_",",X=$$GET1^DIQ(5,SDIENS,1),$P(VAPA(5),U,2)=X
  1. .I $D(VAPA(17)) S SDIENS=+VAPA(17)_",",X=$$GET1^DIQ(5,SDIENS,1),$P(VAPA(17),U,2)=X
  1. .K SDIENS Q
  1. N SDCCACT1,SDCCACT2,LL
  1. S SDCCACT1=VAPA(12),SDCCACT2=$P($G(VAPA(22,2)),"^",3)
  1. ;if confidential address is not active for scheduling/appointment letters, print to regular address
  1. I ($G(SDCCACT1)=0)!($G(SDCCACT2)'="Y") D
  1. .F LL=1:1:3 I VAPA(LL)]"" S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_VAPA(LL)_$C(13,10)
  1. .;if country is blank display as USA
  1. .I (VAPA(25)="")!($P(VAPA(25),"^",2)="UNITED STATES") D ;display city,state,zip
  1. ..S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_VAPA(4)_" "_$P(VAPA(5),U,2)_" "_$P(VAPA(11),U,2)_$C(13,10)
  1. .E D ;display postal code,city,province
  1. ..S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_VAPA(24)_" "_VAPA(4)_" "_VAPA(23)_$C(13,10)
  1. .I ($P(VAPA(25),"^",2)'="UNITED STATES") S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_$P(VAPA(25),U,2)_$C(13,10) ;display country
  1. ;if confidential address is active for scheduling/appointment letters, print to confidential address
  1. I $G(SDCCACT1)=1,$G(SDCCACT2)="Y" D
  1. .F LL=13:1:15 I VAPA(LL)]"" S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_VAPA(LL)_$C(13,10)
  1. .I (VAPA(28)="")!($P(VAPA(28),"^",2)="UNITED STATES") D
  1. ..S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_VAPA(16)_" "_$P(VAPA(17),U,2)_" "_$P(VAPA(18),U,2)_$C(13,10)
  1. .E D
  1. ..S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_VAPA(27)_" "_VAPA(16)_" "_VAPA(26)_$C(13,10)
  1. .I ($P(VAPA(28),"^",2)'="UNITED STATES") S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(11," ")_$P(VAPA(28),U,2)_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. D KVAR^VADPT
  1. Q
  1. ;
  1. ;
  1. LAST4(DFN) ;Return patient "last four"
  1. N SDX
  1. S SDX=$G(^DPT(+DFN,0))
  1. Q $E(SDX)_$E($P(SDX,U,9),6,9)
  1. ;
  1. BADADD ;Print patients with a Bad Address Indicator
  1. I '$D(^TMP($J,"BADADD")) Q
  1. N SDHDR,SDHDR1
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(79,"*")_$C(13,10)
  1. S SDHDR="BAD ADDRESS INDICATOR LIST" S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU((80-$L(SDHDR)/2)," ")_SDHDR_$C(13,10)
  1. S SDHDR1="** THE LETTER FOR THESE PATIENT(S) DID NOT PRINT DUE TO A BAD ADDRESS INDICATOR."
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)="Last 4"_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)="of SSN "_"Patient Name"_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$FILL^SDECU(79,"*")_$C(13,10)
  1. N SDNAM,SDDFN
  1. S SDNAM="" F S SDNAM=$O(^TMP($J,"BADADD",SDNAM)) Q:SDNAM="" D
  1. . S SDDFN=0 F S SDDFN=$O(^TMP($J,"BADADD",SDNAM,SDDFN)) Q:'SDDFN D
  1. . . S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$$LAST4(SDDFN)_" "_SDNAM_$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10)
  1. S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=SDHDR1_$C(13,10)
  1. Q
  1. ;
  1. TST ; SD*5.3*622 - handle scheduled tests
  1. ;S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=$C(13,10) ;alb/sat 665 remove blank line
  1. I ($L(SDCL)=3&($E(SDCL,1,3)="LAB")) S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=" "_SDCL_" SCHEDULED: "_DOW_" "_$J(SDDAT,12)_" "_$J(SDT0,5)_$C(13,10) ;alb/sat 665 add space
  1. I ($L(SDCL)=4&($E(SDCL,1,4)="XRAY")) S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=SDCL_" SCHEDULED: "_DOW_" "_$J(SDDAT,12)_" "_$J(SDT0,5)_$C(13,10)
  1. I ($L(SDCL)=3&($E(SDCL,1,3)="EKG")) S SDECI=SDECI+1 S ^TMP("SDEC",$J,SDECI)=" "_SDCL_" SCHEDULED: "_DOW_" "_$J(SDDAT,12)_" "_$J(SDT0,5)_$C(13,10) ;alb/sat 665 add space
  1. Q