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

SDMHAP.m

Go to the documentation of this file.
  1. SDMHAP ;MAF/ALB - MENTAL HEALTH AD HOC PROACTIVE HIGH RISK REPORT;JULY 14, 2010
  1. ;;5.3;Scheduling;**588**;Aug 13,1993;Build 53
  1. ;
  1. EN ;entry point for the manual generation of the Proactive Report
  1. N SDBEG,SDEND,VAUTD,Y,SDUP,SDXFLG,SDTL,SDALL,SDDAT,Y,X,SDDAT,VADAT,ZTRTN,ZTSAVE,VADATE,%ZIS,%
  1. I '$$RANGE G QUIT
  1. I '$$DIV G QUIT
  1. SORT ;sort is by clinic
  1. S SDTL="CLIN"
  1. D @(SDTL) G:Y=-1 QUIT
  1. W !!,*7,"This output requires 80 column output",!
  1. D NOW^%DTC S Y=$E(%,1,12) S SDDAT=$$FMTE^XLFDT(Y,"5")
  1. S IOM=80 S %ZIS="QM",%ZIS("A")="Select Device: ",%ZIS("B")="" D ^%ZIS G:POP QUIT I $D(IO("Q")) S ZTRTN="START^SDMHAP",ZTSAVE("SD*")="",ZTSAVE("VA*")="" D ^%ZTLOAD K IO("Q"),ZTSK Q
  1. ;
  1. START ;
  1. I $E(IOST)="C" D WAIT^DICD I $D(SDXFLG) D
  1. .W !!,?10,"This report option generates a mail message containing the"
  1. .W !,?10,"High Risk Mental Health Proactive Nightly Report which is sent only"
  1. .W !,?10,"to individuals in the SD MH NO SHOW NOTIFICATION mailgroup.",!
  1. N SDDIV,SDPAG,SDCL,SDSC,SDRLL,SDPAG,NAMSPC,NAMSPC1,SDSTOP,VAUTRR,SDLINE,Y,TOTAL,SDPAT
  1. N X S X="DGPFAPIH" X ^%ZOSF("TEST") S X="" I '$T D Q
  1. .I '$D(SDXFLG) W !!,"Patch DG*5.3*836 needs to be installed - ICR 4903.",!,"Routines required to run report. Aborting!",! Q
  1. .N SDX S SDX=""
  1. .S SDX=$$SETSTR^SDMHPRO1("Patch DG*5.3*836 needs to be installed - ICR 4903.",X,1,80) D SET1^SDMHPRO1(SDX)
  1. .S SDX="" S SDX=$$SETSTR^SDMHPRO1("Routines required to run report. Report Aborted!",X,1,80) D SET1^SDMHPRO1(SDX)
  1. .S SDX=""
  1. S Y=0 D LIST Q:Y=1
  1. S NAMSPC=$$NAMSPC
  1. S NAMSPC1=$$NAMSPC1
  1. K ^TMP(NAMSPC),^TMP(NAMSPC1)
  1. S (SDPAG,SDCL,SDSC,SDRLL)=0
  1. I $D(SDXFLG),SDXFLG=1 S VAUTCL=1
  1. ;I $D(SDXFLG) D PXRMD
  1. I $D(SDALL) I SDALL="M" D PXRMD
  1. I VAUTD=1 D
  1. .S SDDIV=0 F SDDIV=0:0 S SDDIV=$O(^DG(40.8,SDDIV)) Q:'SDDIV I $D(^DG(40.8,SDDIV,0)) S VAUTD(SDDIV)=$P(^DG(40.8,SDDIV,0),"^",1)
  1. I SDTL'="MEN" F SDCL=0:0 S SDCL=$O(^SC(SDCL)) Q:'SDCL I $D(^SC(SDCL,0)),$P($G(^SC(SDCL,0)),"^",3)="C" D
  1. .S SDSC=$P($G(^SC(SDCL,0)),"^",7),SDDIV=$S('$P($G(^SC(SDCL,0)),"^",15):"NOT SPECIFIED",1:$P($G(^SC(SDCL,0)),"^",15)) I SDSC D CHK ;S ^TMP("SDCLST",$J,SDCL,SDSC)=$P(^SC(SDCL,0),"^",1)
  1. I SDTL="MEN" S SDRLL=$O(^PXRMD(810.9,"B","VA-MH NO SHOW APPT CLINICS LL",0)) D
  1. .F SDDIV=0:0 S SDDIV=$O(VAUTRR(SDDIV)) Q:'SDDIV F SDSC=0:0 S SDSC=$O(VAUTRR(SDDIV,SDSC)) Q:'SDSC F SDCL=0:0 S SDCL=$O(VAUTRR(SDDIV,SDSC,SDCL)) Q:'SDCL I SDCL D CHK
  1. S SDLINE=$S($D(^TMP(NAMSPC,$J)):"PROCESS",1:"END")
  1. D @SDLINE
  1. G QUIT
  1. ;
  1. ;
  1. PROCESS ;find patients in date range that have scheduled appt for a clinic in the date range.
  1. N SDIV,SDC,SDR,SDS,SDHFL,SDUP,SDMHFLG,SDMHNFLG,SDACT
  1. S (SDIV,SDC,SDR,SDS,SDUP)=0
  1. S SDMHFLG=$$GET^XPAR("PKG.REGISTRATION","DGPF SUICIDE FLAG",1,"E")
  1. S SDMHFLG("L")=$$GETFLAG^DGPFAPIU(SDMHFLG,"L")
  1. S SDMHNFLG="HIGH RISK FOR SUICIDE"
  1. S SDMHFLG("N")=$$GETFLAG^DGPFAPIU(SDMHNFLG,"N")
  1. F SDIV=0:0 S SDIV=$O(^TMP(NAMSPC,$J,SDIV)) Q:SDIV=""!(SDUP) F SDC=SDC:0 S SDC=$O(^TMP(NAMSPC,$J,SDIV,SDC)) Q:SDC=""!(SDUP) F SDS=SDS:0 S SDS=$O(^TMP(NAMSPC,$J,SDIV,SDC,SDS)) Q:SDS=""!(SDUP) D
  1. .I SDTL="MEN" S SDR=$P($G(^TMP(NAMSPC,$J,SDIV,SDC,SDS)),"^",4)
  1. .N SDDT,SDNUM,SDNUM1,DFN,SDSTAT,ACT,SDRR
  1. .S (SDDT,SDNUM,SDNUM1,DFN,SDSTAT)=0
  1. .F SDDT=SDBEG:0 S SDDT=$O(^SC(SDC,"S",SDDT)) Q:'SDDT!(SDDT>SDEND)!(SDUP) F SDNUM=0:0 S SDNUM=$O(^SC(SDC,"S",SDDT,SDNUM)) Q:'SDNUM!(SDUP) F SDNUM1=0:0 S SDNUM1=$O(^SC(SDC,"S",SDDT,SDNUM,SDNUM1)) Q:'SDNUM1!(SDUP) D
  1. ..Q:'$D(^SC(SDC,"S",SDDT,SDNUM,SDNUM1,0))
  1. ..S DFN=$P($G(^SC(SDC,"S",SDDT,SDNUM,SDNUM1,0)),"^",1) Q:'DFN Q:$D(^SC(SDC,"S",SDDT,SDNUM,SDNUM1,"C"))
  1. ..;I $D(^DPT(DFN,0)),$D(^DPT(DFN,"S",SDDT)) S SDSTAT=$P($G(^DPT(DFN,"S",SDDT,0)),"^",2) I $$GETINF^DGPFAPIH(DFN,SDMHFLG("L"),SDDT,SDDT,"ACT")!($$GETINF^DGPFAPIH(DFN,SDMHFLG("N"),SDDT,SDDT,"ACT")) D Q:SDUP
  1. ..I $D(^DPT(DFN,0)),$D(^DPT(DFN,"S",SDDT)) S SDSTAT=$P($G(^DPT(DFN,"S",SDDT,0)),"^",2) Q:SDSTAT="N"!(SDSTAT="NA") D ACT I SDACT D Q:SDUP
  1. ...N PATNM,SDCLNM,SDDIVNM,SDSCNM,SDZERO
  1. ...S SDDIVNM=$S($P(^DG(40.8,SDIV,0),"^",1)="NOT SPECIFIED":"NOT SPECIFIED",1:$P(^DG(40.8,SDIV,0),"^",1))
  1. ...S SDCLNM=$S($P($G(^SC(SDC,0)),"^",1)="NOT SPECIFIED":"NOT SPECIFIED",1:$P(^SC(SDC,0),"^",1))
  1. ...S SDSCNM=$S($P($G(^DIC(40.7,SDS,0)),"^",1)="NOT SPECIFIED":"NOT SPECIFIED",1:$P(^DIC(40.7,SDS,0),"^",1))
  1. ...S PATNM=$S($P($G(^DPT(DFN,0)),"^",1)="NOT SPECIFIED":"NOT SPECIFIED",1:$P(^DPT(DFN,0),"^",1))
  1. ...I SDTL="CLIN" S ^TMP(NAMSPC1,$J,SDDIVNM,PATNM,SDDT,SDCLNM,SDS)=DFN_"^"_SDDT_"^"_SDSTAT_"^"_$E(PATNM,1)_$$PID(DFN)_"^"_SDC_"^"_SDS ;D TOTAL(SDDIVNM,SDCLNM)
  1. ...I SDTL="STOP" S ^TMP(NAMSPC1,$J,SDDIVNM,SDSCNM,PATNM,SDCLNM,SDDT)=DFN_"^"_SDDT_"^"_SDSTAT_"^"_$E(PATNM,1)_$$PID(DFN)_"^"_SDC_"^"_SDS
  1. ...I SDTL="MEN" S SDRR=$P(^PXRMD(810.9,SDR,0),"^",1) S ^TMP(NAMSPC1,$J,SDDIVNM,SDRR,SDCLNM,PATNM,SDDT)=DFN_"^"_SDDT_"^"_SDSTAT_"^"_$E(PATNM,1)_$$PID(DFN)_"^"_SDC_"^"_SDS
  1. ...D TOTAL(SDDIVNM)
  1. BGJ I $D(SDXFLG) D Q
  1. .I '$D(^TMP(NAMSPC1,$J)) D HEAD^SDMHPRO
  1. .D ^SDMHPRO1 Q
  1. I '$D(^TMP(NAMSPC1,$J)) G END
  1. D ^SDMHAP1
  1. Q
  1. CHK ;Check to see if Division/Clinic/Stop have been selected & if Clinic and Stop code are a valid mental health pair.
  1. N SDFLG,SDCLNM,SDDIVNM,SDSCNM
  1. S SDFLG=0
  1. I $D(VAUTD) D Q:SDFLG
  1. . I SDDIV="NOT SPECIFIED" S SDFLG=1 Q
  1. . I 'VAUTD,'$D(VAUTD(SDDIV)) S SDFLG=1 Q
  1. I $D(VAUTCL) D Q:SDFLG
  1. . I SDCL="NOT SPECIFIED" S SDFLG=1 Q
  1. . I 'VAUTCL,'$D(VAUTCL(SDCL)) S SDFLG=1 Q
  1. I $D(VAUTSC) D Q:SDFLG
  1. . I SDSC="NOT SPECIFIED" S SDFLG=1 Q
  1. . I 'VAUTSC,'$D(VAUTSC(SDSC)) S SDFLG=1 Q
  1. Q:'$D(^DG(40.8,SDDIV,0))
  1. S SDDIVNM=$S($P($G(^DG(40.8,SDDIV,0)),"^",1)="":"NOT SPECIFIED",1:$P(^DG(40.8,SDDIV,0),"^",1))
  1. Q:'$D(^SC(SDCL,0))
  1. S SDCLNM=$S($P($G(^SC(SDCL,0)),"^",1)="":"NOT SPECIFIED",1:$P(^SC(SDCL,0),"^",1))
  1. Q:'$D(^DIC(40.7,SDSC,0))
  1. S SDSCNM=$S($P($G(^DIC(40.7,SDSC,0)),"^",1)="":"NOT SPECIFIED",1:$P(^DIC(40.7,SDSC,0),"^",1))
  1. S ^TMP(NAMSPC,$J,SDDIV,SDCL,SDSC)=SDDIVNM_"^"_SDCLNM_"^"_SDSCNM_"^"_$S(SDRLL="NOT SPECIFIED":"NOT SPECIFIED",1:SDRLL)
  1. Q
  1. ;
  1. ACT ;Make sure patient has active patient record flag
  1. N SDDTNT
  1. S SDDTNT=$P(SDDT,".",1)
  1. I $$GETINF^DGPFAPIH(DFN,SDMHFLG("L"),SDDTNT,SDDTNT,"ACT") S SDACT=1 Q
  1. I $$GETINF^DGPFAPIH(DFN,SDMHFLG("N"),SDDTNT,SDDTNT,"ACT") S SDACT=1 Q ;For increment 3
  1. S SDACT=0
  1. Q
  1. W @IOF
  1. W "HIGH RISK MENTAL HEALTH PROACTIVE ADHOC REPORT BY",?70,"PAGE " S SDPAG=SDPAG+1 W SDPAG,!
  1. W $S(SDTL="MEN":"MENTAL HEALTH",SDTL="STOP":"STOP CODE",1:"CLINIC")_" for Appointments "_$$FMTE^XLFDT(SDBEG,"2")_"-"_$$FMTE^XLFDT($P(SDEND,".",1),"2"),?56,"Run: "_SDDAT
  1. I $D(SDTOTPG) W !!,"Totals Page"
  1. I '$D(SDTOTPG) W !!,"#",?4,"PATIENT",?25,"PT ID",?32,"APPT D/T",?49,"CLINIC"
  1. W !,$$LINE(""),!
  1. HEAD1 I $D(^TMP(NAMSPC1,$J)),'$D(SDTOTPG) D
  1. . N SDHEAD2
  1. .I SDTL'="STOP" S SDHEAD2="DIVISION: "_$E(SDXDIV,1,30)
  1. .W SDHEAD2,!
  1. Q
  1. ;
  1. ;
  1. RANGE() ;Select Start and End date for report
  1. W !!,$$LINE(" High Risk Mental Health Proactive Adhoc Report")
  1. Q $$RANGE1(.SDBEG,.SDEND)
  1. ;
  1. DIV() ;Division selection for multidivisional facility
  1. D ASK2^SDDIV I Y<0 K VAUTD
  1. Q $D(VAUTD)>0
  1. ;
  1. LIST N X I '$D(^PXRMD(810.9,"B","VA-MH NO SHOW APPT CLINICS LL")) D Q
  1. .I '$D(SDXFLG) W !!!,"Reminder location List file is not current.",!,"Missing reminder location list 'VA-MH NO SHOW APPT CLINICS LL' in file 810.9.",!,"Report Aborting!",! S Y=1 Q
  1. .N SDX S SDX="",X=""
  1. .S SDX=$$SETSTR^SDMHPRO1("Reminder location List file is not current.",X,1,80) D SET1^SDMHPRO1(SDX)
  1. .S SDX="",X="" S SDX=$$SETSTR^SDMHPRO1("Missing reminder location list 'VA-MH NO SHOW APPT CLINICS LL' in file 810.9.",X,1,80) D SET1^SDMHPRO1(SDX)
  1. .S SDX="",X="" S SDX=$$SETSTR^SDMHPRO1("Report Aborted!",X,1,80) D SET1^SDMHPRO1(SDX)
  1. .S SDX=""
  1. .S Y=1
  1. LINE(STR) ; Print display prompts
  1. N X
  1. S:STR]"" STR=" "_STR_" "
  1. S $P(X,"*",(IOM/2)-($L(STR)/2))=""
  1. Q X_STR_X
  1. ;
  1. LINE1(STR) ; Print display prompts
  1. N X
  1. S:STR]"" STR=" "_STR_" "
  1. S $P(X," ",(IOM/2)-($L(STR)/2))=""
  1. Q X_STR_X
  1. ;
  1. ;
  1. TOTAL(DIV) ;INITIALIZE total(DIV,CLIN/STOP)
  1. I '$D(TOTAL(DIV)) D
  1. .N SDCNTT S SDCNTT=0
  1. .S TOTAL(DIV)="0^0^0^0^0"
  1. I $D(TOTAL(DIV)) D
  1. .S $P(TOTAL(DIV),"^",1)=$P($G(TOTAL(DIV)),"^",1)+1
  1. .N X S X=$S(SDSTAT="NS":2,SDSTAT="NSA":3,1:4) S $P(TOTAL(DIV),"^",X)=$P(TOTAL(DIV),"^",X)+1
  1. .I '$D(SDPAT(DIV,DFN)) S SDPAT(DIV,DFN)="",$P(TOTAL(DIV),"^",5)=$P(TOTAL(DIV),"^",5)+1
  1. Q
  1. ;
  1. ;
  1. CLIN ;select clinics
  1. W !!,"Sort the report by:",!,?20,"A All clinics",!,?20,"M Mental Health clinics only",!
  1. R !,"Sort by: (A)ll clinics A//",X:DTIME S:X["^"!('$T) Y=-1 Q:Y=-1 S X=$S(X="":"A",1:$E(X)) I "AMam"'[X W !,"Enter a 'A' for All clinics or 'M' for Mental Health clinics only" G CLIN
  1. S SDALL=X
  1. N DIC,K,VAUTVB,VAUTSTR,VAUTNI
  1. S VAUTVB="VAUTCL",DIC="^SC("
  1. I SDALL="M" S DIC("S")="N X,K S X=$O(^PXRMD(810.9,""B"",""VA-MH NO SHOW APPT CLINICS LL"",0)) I $D(^SC(+Y,0)) S K=$P(^SC(+Y,0),""^"",7) I $D(^PXRMD(810.9,X,40.7,""B"",+K))"
  1. S VAUTSTR="Clinic",VAUTNI=2 D FIRST^VAUTOMA S:Y=-1 SDFL=1 Q:$D(SDFL)
  1. Q
  1. ;
  1. PID(DFN) ; Return PID
  1. ; INPUT - DFN
  1. ; OUTPUT - PID or 'UNKNOWN'
  1. N VA
  1. D PID^VADPT6
  1. Q $S(VA("BID")]"":VA("BID"),1:"UNKNOWN")
  1. ;
  1. RANGE1(SDBEG,SDEND,SDAMETH) ; -- select range
  1. N SDWITCH,SDT,X1,X2,X
  1. S (SDBEG,SDEND)=0,SDT=DT
  1. I $G(SDAMETH)>0 S X1=DT,X2=-1 D C^%DTC S SDT=X
  1. S DIR("B")=$$FDATE^VALM1(SDT),SDWITCH=$$SWITCH^SDAMU
  1. S DIR("?",1)="Dates in the past (after "_$$FDATE^VALM1(SDWITCH)_" ) and into the future can be entered",DIR("?")=" "
  1. S DIR(0)="DA",DIR("A")="Select Beginning Date: "
  1. W ! D ^DIR K DIR G RANGEQ:Y'>0 S SDBEG=Y
  1. S DIR("B")=$$FDATE^VALM1(SDT)
  1. S DIR(0)="DA",DIR("A")="Select Ending Date: "
  1. S DIR("?",1)="Dates between "_$$FDATE^VALM1(SDBEG)_"and into the future can be entered. ",DIR("?")=" "
  1. D ^DIR K DIR G RANGEQ:Y'>0 S SDEND=Y_".24"
  1. RANGEQ Q SDEND
  1. ;
  1. NAMSPC() ; API returns the name space for this patch
  1. Q "SDPRO"
  1. NAMSPC1() ; API returns the name space for this patch
  1. Q "SDPRO1"
  1. PXRMD ;Set up Reminder Location List valid Stop Codes for Proactive Report
  1. N SDX,SDY,SDI,SDSFL,SDCFL
  1. S SDY=0
  1. S SDX=$O(^PXRMD(810.9,"B","VA-MH NO SHOW APPT CLINICS LL",0)) Q:SDX']"" F S SDY=$O(^PXRMD(810.9,SDX,40.7,"B",SDY)) Q:SDY']"" D
  1. .S SDSTOP(+SDY)=""
  1. .I SDTL="MEN" N SDI S SDI=0 F S SDI=$O(^SC("AST",+SDY,SDI)) Q:SDI']"" S VAUTRR(+$P($G(^SC(+SDI,0)),"^",15),+SDY,+SDI)=""
  1. .I $D(VAUTSC),$G(VAUTSC)=1 S VAUTSC(+SDY)=$P($G(^DIC(40.7,+SDY,0)),"^",1) S SDSFL=1
  1. .I $D(VAUTCL),$G(VAUTCL)=1 N SDI S SDI=0 F S SDI=$O(^SC("AST",+SDY,SDI)) Q:SDI']"" D
  1. ..S VAUTCL(+SDI)=$P($G(^SC(+SDI,0)),"^",1) S SDCFL=1
  1. I $D(SDSFL) S VAUTSC=0
  1. I $D(SDCFL) S VAUTCL=0
  1. Q
  1. END ;NO RECORDS
  1. D HEAD
  1. W !!,$$LINE1(">>>>>> NO RECORDS FOUND <<<<<<")
  1. QUIT K %DT,DIR,SDTBEG,SDTEND,SDDIV,SDFL,SDTOTPG,SDXDIV,SDMHNFLG,VAUTD,VAUTCL,VAUTR,VAUTSC,VADAT,VADATE,POP,X,Y
  1. K ^TMP("SDPRO",$J),^TMP("SDPRO1",$J)
  1. D CLOSE^DGUTQ Q