YSBDD1 ;SLC/DSB - MHA DASHBOARD Drilldown ; Apr 01, 2021@16:30
;;5.01;MENTAL HEALTH;**202**;Dec 30, 1994;Build 47
;
; Reference to DEM^VADPT in ICR #7109
; Reference to ^DGPF(26.15,"B") in ICR #5991
; Reference to SDAPI^SDAMA301 in ICR #4433
; Reference to GETINF^DGPFAPIH in ICR #4903
; Reference to TIUSRVL in ICR #2812
Q
PATIENT(DFN,DATAOUT) ;
N VADM,VAPA
D DEM^VADPT
D ADD^VADPT
S DATAOUT("patient_information","name")=VADM(1)
S DATAOUT("patient_information","sex")=$P(VADM(5),U,2)
S DATAOUT("patient_information","dob")=$P(VADM(3),U,2)
S DATAOUT("patient_information","age")=VADM(4)
S DATAOUT("patient_information","social")=$P(VADM(2),U,2)
S DATAOUT("patient_information","address1")=VAPA(1)
S DATAOUT("patient_information","address2")=VAPA(2)
S DATAOUT("patient_information","address3")=VAPA(3)
S DATAOUT("patient_information","city")=VAPA(4)
S DATAOUT("patient_information","state")=$P(VAPA(5),U,2)
S DATAOUT("patient_information","zipcode")=VAPA(6)
S DATAOUT("patient_information","phone_number")=VAPA(8)
S DATAOUT("patient_information","cell_phone")=$P($G(^DPT(DFN,.13)),U,4)
Q
;
HRPTPROF(JSONOUT,DFN) ;
N PRFNAME,IDX,YSDARRAY,SDCOUNT,NOW,YSDT,SDTIME,HRRVWDT,DHRR,TIUIDX,DATAOUT,ERRARY,PIDX,FIDX,TIUINVDT,DATEFOUND,SAFHEAD,SAFDCL,CSREHEAD
N APPTLIST,NODE,OUTPXENC,IEN,PRV,PRVLIST,FTRLIST,DATE,ENCOUNTER,I,YSVISIT,NIDX,STATUS,PREFS,OPCUT
N PATTYP
N SAFSCNO,SAFSCYES,CSRENEW,CSREUPD,SITES,HFCLIST,SAFREV
S NOW=$$NOW^XLFDT
S YSDT=$P(NOW,".",1)
D HRINIT^YSBRPC(.SAFHEAD,.SAFDCL,.SAFREV,.SAFSCNO,.SAFSCYES,.CSREHEAD,.CSRENEW,.CSREUPD,.SITES)
;D GETLST^XPAR(.SAFHFC,"SYS","YSB SAFETY PLAN HF CATEGORY")
;D GETLST^XPAR(.SAFHEAD,"SYS","YSB SAFETY PLAN HEADER TEXT")
;D GETLST^XPAR(.SAFDCL,"SYS","YSB SAFETY PLAN DECLINE")
;D GETLST^XPAR(.CSREHFC,"SYS","YSB CSRE HF CATEGORY")
;D GETLST^XPAR(.CSREHEAD,"SYS","YSB CSRE HEADER TEXT")
S DATAOUT("high_risk_patient_profile","patient_record_flag",1,"flag_name")=""
S DATAOUT("high_risk_patient_profile","patient_record_flag",1,"review_date")=""
S DATAOUT("high_risk_patient_profile","patient_record_flag",1,"due/overdue")=""
S DATAOUT("high_risk_patient_profile","patient_record_flag",1,"prf_actions")=""
S DATAOUT("high_risk_patient_profile","patient_record_flag",1,"action_date")=""
S (HRRVWDT,DHRR)=0
S (PRFNAME,PRFIEN,IDX)=0 F S PRFNAME=$O(^DGPF(26.15,"B",PRFNAME)) Q:PRFNAME']"" D
.N PRFIEN,RSLT,PRFDATA,HISTIDX,LSTHIST,PRFACT,NXTHIDX,NXTHDT
.S PRFIEN=$O(^DGPF(26.15,"B",PRFNAME,""))
.S RSLT=$$GETINF^DGPFAPIH(DFN,PRFIEN_";DGPF(26.15,","","","PRFDATA")
.I RSLT=0 Q
.S LSTHIST=$O(PRFDATA("HIST",""),-1)
.S HISTIDX="A" F S HISTIDX=$O(PRFDATA("HIST",HISTIDX),-1) Q:'HISTIDX D
..S IDX=IDX+1
..S PRFACT=$P(PRFDATA("HIST",HISTIDX,"ACTION"),U,2)
..S NXTHIDX=$O(PRFDATA("HIST",HISTIDX))
..S NXTHDT="UNK" ;I NXTHIDX]"" S NXTHDT=$P($P($G(PRFDATA("HIST",NXTHIDX,"DATETIME")),U,2),"@")
..S DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"flag_name")=PRFNAME
..I $P(PRFDATA("REVIEWDT"),U,2)="" S $P(PRFDATA("REVIEWDT"),U,2)="N/A"
..S DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"review_date")=$S(HISTIDX=LSTHIST:$P(PRFDATA("REVIEWDT"),U,2),PRFACT="INACTIVATE":"N/A",1:NXTHDT) ;Need to review this later
..I PRFIEN=2 D ;save the High Risk dates for later use
...I $$FMTH^XLFDT($P(PRFDATA("REVIEWDT"),U,1),1)'>DHRR Q
...S HRRVWDT=$P(PRFDATA("REVIEWDT"),U,1),DHRR=$$FMTH^XLFDT($P(PRFDATA("REVIEWDT"),U,1),1)
..S DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"due/overdue")=$S(HISTIDX=LSTHIST:$$GETDUE^YSBWHIGH($P(PRFDATA("REVIEWDT"),U),YSDT),PRFACT="INACTIVATE":"N/A",1:"UNK")
..S DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"prf_actions")=PRFACT
..S DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"action_date")=$P($P(PRFDATA("HIST",HISTIDX,"DATETIME"),U,2),"@")
; scheduled appointments
K ^TMP($J,"SDAMA301")
N FROMTO
;S FROMTO=91
S FROMTO=365
S YSDARRAY(1)=$$FMADD^XLFDT(YSDT,-FROMTO)_";"_$$FMADD^XLFDT(YSDT,FROMTO)
S YSDARRAY(3)="R;I;NS;NSR;CC;CCR;CP;CPR;NT;"
S YSDARRAY(4)=DFN
S YSDARRAY("FLDS")="1;2;12;13;18;22"
S YSDARRAY("SORT")="P"
S SDCOUNT=$$SDAPI^SDAMA301(.YSDARRAY)
M APPTLIST=^TMP($J,"SDAMA301",DFN)
;add ^SCE("ADFN" loop to detect Outpatient Encounters with no visit. These will be marked as unscheduled
S (PIDX,FIDX)=0
S SDTIME=$$FMADD^XLFDT(YSDT,-FROMTO-1),OPCUT=$$FMADD^XLFDT(YSDT,FROMTO)
F S SDTIME=$O(^SCE("ADFN",DFN,SDTIME)) Q:'SDTIME!(SDTIME>OPCUT) D
.I $D(APPTLIST(SDTIME)) Q ;already got this visit, must be scheduled
.S OUTPXENC=$O(^SCE("ADFN",DFN,SDTIME,0))
.S NODE=^SCE(OUTPXENC,0)
.S APPTLIST(SDTIME)=SDTIME_U_$P(NODE,U,4)_";"_$$GET1^DIQ(44,$P(NODE,U,4),.01)_"^^^^^^^^^^"_OUTPXENC_U_$P(NODE,U,3)_";"_$$GET1^DIQ(40.7,$P(NODE,U,3),1)_"^^^^^4;UV^^^^;;WALK-IN"
; split appointments into past and previous
;sort previous appointments by reverse date
S SDTIME=NOW-.000001
F S SDTIME=$O(APPTLIST(SDTIME),-1) Q:'SDTIME D
.I '$$CHKCLIN(APPTLIST(SDTIME)) K APPTLIST(SDTIME) Q ;not ED or MH clinic - delete
.I $P(APPTLIST(SDTIME),U,22)="11;FUTURE;FUTURE" Q ;in the future, possible for an appt later today
.S PIDX=PIDX+1
.S PRVLIST(PIDX)=APPTLIST(SDTIME)
.K APPTLIST(SDTIME)
;sort future appointments - all previous appts are deleted
S SDTIME=0 F S SDTIME=$O(APPTLIST(SDTIME)) Q:'SDTIME D
.I '$$CHKCLIN(APPTLIST(SDTIME)) Q
.S FIDX=FIDX+1
.S FTRLIST(FIDX)=APPTLIST(SDTIME)
; handle previous appointments
N PSTAT
S PIDX=0 F S PIDX=$O(PRVLIST(PIDX)) Q:'PIDX D
.S NIDX=0
.S NODE=PRVLIST(PIDX)
.S STATUS=$P(NODE,U,22),PSTAT=$P(STATUS,";",3)
.S STATUS=$P($P($P(NODE,U,22),";",3)," &") ; also removes " & AUTO-REBOOK"
.I STATUS["NO ACTION TAKEN",(PSTAT'["CHECKED") Q ;No positive state of this encounter.
.I STATUS["NO ACT TAKN",(PSTAT'["CHECKED") Q ;Inpatient No action taken
.I PSTAT["CHECKED" S STATUS=PSTAT ;For Checked In/Checked Out replace NO ACTION TAKEN status
.S SDTIME=+NODE
.S ENCOUNTER=$P(NODE,U,12)
.S YSVISIT="" I ENCOUNTER S YSVISIT=$P(^SCE(ENCOUNTER,0),U,5)
.S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"location")=$P($P(NODE,U,2),";",2)
.S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"date")=$$FMTE^XLFDT(SDTIME,5)
.S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"provider")="N/A"
.S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"status")=$P($P(NODE,U,22),";",3)
.I YSVISIT D
..S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"status")="COMPLETED"
..I $P(NODE,U,18)="4;UV" S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"status")="WALK-IN"
..S (IEN,PRV)="" F S IEN=$O(^AUPNVPRV("AD",YSVISIT,IEN)) Q:'IEN D Q:PRV ;DBIA 2316
...S NODE=^AUPNVPRV(IEN,0)
...I $P(NODE,U,4)="P" S PRV=+NODE
...Q
..I PRV D
...S PRV=$$GET1^DIQ(200,PRV_",",.01)
...S $P(PRV,",",2)=" "_$P(PRV,",",2) ;add a space between last and first name so GUI column can wrap
...S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"provider")=PRV
..K ^TMP("TIULIST",$J)
..D NOTES^TIUSRVLV("",YSVISIT)
..;loop through ^TMP("TIULIST",$J) and set TIUDA to each value
..S DATE="" F S DATE=$O(^TMP("TIULIST",$J,DATE)) Q:'DATE D
...S I="" F S I=$O(^TMP("TIULIST",$J,DATE,I)) Q:'I D
....I $P(^TMP("TIULIST",$J,DATE,I),U,7)'="completed" Q ;only completed (signed) notes.
....S NIDX=NIDX+1
....S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"notes",NIDX,"docID")=+^TMP("TIULIST",$J,DATE,I)
....S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"notes",NIDX,"docName")=$P(^TMP("TIULIST",$J,DATE,I),U,2)
.I 'NIDX S DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"notes")=""
; handle future appointments
S FIDX=0 F S FIDX=$O(FTRLIST(FIDX)) Q:'FIDX D
.S NODE=FTRLIST(FIDX)
.S SDTIME=+NODE
.S DATAOUT("high_risk_patient_profile","future_appointments",FIDX,"location")=$P($P(NODE,U,2),";",2)
.S DATAOUT("high_risk_patient_profile","future_appointments",FIDX,"date")=$$FMTE^XLFDT(SDTIME,5)
K ^TMP($J,"SDAMA301")
I '$D(DATAOUT("high_risk_patient_profile","previous_activity")) S DATAOUT("high_risk_patient_profile","previous_activity",1)=""
I '$D(DATAOUT("high_risk_patient_profile","future_appointments")) S DATAOUT("high_risk_patient_profile","future_appointments",1)=""
; review status
N DSTAT
S PATTYP=$$MHDCDT^YSBWHIG2(DFN) S:PATTYP'="INPT" PATTYP="" ;Will return INPT if still an inpatient.
S DSTAT=$$DONE7^YSBWHIGH(DFN,YSDT,.SAFHEAD,.SAFDCL,.SAFREV,.SAFSCNO,.SAFSCYES)
S DATAOUT("high_risk_patient_profile","review_status","review_due")=$$GETDUE^YSBWHIGH(HRRVWDT,YSDT)
S DATAOUT("high_risk_patient_profile","review_status","on_track")=$$ONTRK^YSBWHIGH(DFN,"")
S DATAOUT("high_risk_patient_profile","review_status","done_in_7")=DSTAT
S DATAOUT("high_risk_patient_profile","review_status","done_in_7_number")=$$DONENUM(NOW)
S DATAOUT("high_risk_patient_profile","review_status","inpatient")=PATTYP
; safety plan
N TIUFND
S TIUINVDT=0,IDX=0,TIUFND=1
D SAFLST^YSBWHIGH(.SAFDCL,.SAFREV,.SAFSCNO,.SAFSCYES,.HFCLIST)
F S DATEFOUND=$$FINDDOC^YSBWHIGH(DFN,.TIUINVDT,.HFCLIST,.SAFHEAD,.TIUIDX,TIUFND) Q:'TIUINVDT D
.S IDX=IDX+1
.S DATAOUT("high_risk_patient_profile","safety_plan",IDX,"docID")=TIUIDX
.I $$SAFDECL^YSBWHIGH(DFN,TIUINVDT) S DATAOUT("high_risk_patient_profile","safety_plan",IDX,"date")="Declined" Q
.S DATAOUT("high_risk_patient_profile","safety_plan",IDX,"date")=$$FMTE^XLFDT($P(DATEFOUND,"."),5)
I 'IDX S DATAOUT("high_risk_patient_profile","safety_plan",1,"date")="Not Done"
;CSRE
K HFCLIST
D CSRELST^YSBWHIGH(.CSRENEW,.CSREUPD,.HFCLIST)
S TIUINVDT=0,IDX=0 F S DATEFOUND=$$FINDDOC^YSBWHIGH(DFN,.TIUINVDT,.HFCLIST,.CSREHEAD,.TIUIDX,TIUFND) Q:'TIUINVDT D
.S IDX=IDX+1
.S DATAOUT("high_risk_patient_profile","CSRE",IDX,"date")=$$FMTE^XLFDT($P(DATEFOUND,"."),5)
.S DATAOUT("high_risk_patient_profile","CSRE",IDX,"docID")=TIUIDX
I 'IDX S DATAOUT("high_risk_patient_profile","CSRE",1,"date")="Not Done"
D ENCODE^YSBJSON("DATAOUT","JSONOUT","ERRARY")
K ^TMP($J,"SDAMA301")
K ^TMP("TIULIST",$J)
Q
WEBPROF(ARGS,RESULTS) ; MHA Web call for HRPTPROF
N DFN,JSONOUT
S DFN=$G(ARGS("dfn"))
I DFN="" D SETERROR^YTQRUTL(404,"Patient ID not sent.") QUIT
D HRPTPROF(.JSONOUT,DFN)
D TOTMP^YSBRPC(.JSONOUT)
S RESULTS=$NA(^TMP("YTQ-JSON",$J))
Q
;
DONENUM(TDT) ; Calculate the number of days for Done in 7
N ACTDT,II,LST,RCNT,DIFF
N NMSTR,NMARR,ACTSTR,ACTARR,LSTNM
S NMARR("HIGH RISK FOR SUICIDE")=""
S NMARR("BEHAVIORAL")=""
S NMARR("MISSING PATIENT")=""
S ACTARR("REACTIVATE")=""
S ACTARR("CONTINUE")=""
S ACTARR("NEW ASSIGNMENT")=""
S RCNT=0,LST=0,LSTNM=""
S II=0 F S II=$O(DATAOUT("high_risk_patient_profile","patient_record_flag",II)) Q:II="" D
. S NMSTR=$G(DATAOUT("high_risk_patient_profile","patient_record_flag",II,"flag_name"))
. I NMSTR]"" S LSTNM=NMSTR
. I LSTNM]"" Q:'$D(NMARR(LSTNM)) ;Quit if we are not in a sequence of NEW/REACTIVATE/CONTINUE the Patient Record flags of interest
. S ACTSTR=$G(DATAOUT("high_risk_patient_profile","patient_record_flag",II,"prf_actions"))
. I ACTSTR]"" Q:'$D(ACTARR(ACTSTR))
. S RCNT=$G(DATAOUT("high_risk_patient_profile","patient_record_flag",II,"action_date"))
. S RCNT=$$ETF(RCNT)
. I RCNT>LST S LST=RCNT
S LST=$$FMTH^XLFDT(LST,1),LST=LST+7,LST=$$HTFM^XLFDT(LST,1)
S DIFF=$$FMDIFF^XLFDT(LST,TDT,1)
Q DIFF
ETF(X) ; External to Fileman format
N %DT,Y S X=$G(X),%DT="PST" D ^%DT S X=Y S:+X'>0 X="" Q X
Q
CHKCLIN(NODE) ;
N STOPCODE
S STOPCODE=$P($P(NODE,U,13),";",2)
I STOPCODE=130 Q 1 ;ED clinic
I (STOPCODE>499),(STOPCODE<600) Q 1 ;MH clinic
Q 0 ;not ED or MH clinic
;
GETNOTE(JSONOUT,YSTIUDA) ;
N DATAOUT,YSTEXT
;note text
D TGET^TIUSRVR1(.YSTEXT,YSTIUDA) ;TEXT just contains the string "^TMP("TIUVIEW",TIUDA)"
S IDX=0 F S IDX=$O(@YSTEXT@(IDX)) Q:'IDX S DATAOUT("note_text",IDX,"line")=@YSTEXT@(IDX)
I IDX=0 S DATAOUT("note_text",1)=""
D ENCODE^YSBJSON("DATAOUT","JSONOUT","ERRARY")
Q
WEBNOTE(ARGS,RESULTS) ;MHA Web call for GETNOTE
N YSTIUDA,JSONOUT
S YSTIUDA=$G(ARGS("noteId"))
I YSTIUDA="" D SETERROR^YTQRUTL(404,"Note ID not sent") QUIT
D GETNOTE(.JSONOUT,YSTIUDA)
D TOTMP^YSBRPC(.JSONOUT)
S RESULTS=$NA(^TMP("YTQ-JSON",$J))
Q
;
GETRPRT(JSONOUT,ADMIN) ;
N REPORT,DATAOUT,ERRARY
K ^TMP("YTQRERRS",$J)
D BLDRPT^YTQRRPT(.REPORT,ADMIN)
I $D(REPORT) D
.N IDX
.S IDX=0 F S IDX=$O(REPORT(IDX)) Q:'IDX D
..S DATAOUT("report",IDX,"line")=REPORT(IDX)
I '$D(REPORT) S DATAOUT("report",1,"line")="<no text>"
I $D(^TMP("YTQRERRS",$J,1,"error")) D
.S DATAOUT("report",1,"line")=^TMP("YTQRERRS",$J,1,"error","code")
.S DATAOUT("report",2,"line")=^TMP("YTQRERRS",$J,1,"error","message")
.S DATAOUT("report",3,"line")=^TMP("YTQRERRS",$J,1,"error","errors",1,"message")
D ENCODE^YSBJSON("DATAOUT","JSONOUT","ERRARY")
K ^TMP("YTQRERRS",$J)
Q
WEBRPRT(ARGS,RESULTS) ;
N REPORT,DATAOUT,ERRARY,ADMIN,JSONOUT
S ADMIN=$G(ARGS("adminId"))
I ADMIN="" D SETERROR^YTQRUTL(404,"Admin ID not sent.") QUIT
D GETRPRT(.JSONOUT,ADMIN)
D TOTMP^YSBRPC(.JSONOUT)
S RESULTS=$NA(^TMP("YTQ-JSON",$J))
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HYSBDD1 13311 printed Dec 13, 2024@02:13:26 Page 2
YSBDD1 ;SLC/DSB - MHA DASHBOARD Drilldown ; Apr 01, 2021@16:30
+1 ;;5.01;MENTAL HEALTH;**202**;Dec 30, 1994;Build 47
+2 ;
+3 ; Reference to DEM^VADPT in ICR #7109
+4 ; Reference to ^DGPF(26.15,"B") in ICR #5991
+5 ; Reference to SDAPI^SDAMA301 in ICR #4433
+6 ; Reference to GETINF^DGPFAPIH in ICR #4903
+7 ; Reference to TIUSRVL in ICR #2812
+8 QUIT
PATIENT(DFN,DATAOUT) ;
+1 NEW VADM,VAPA
+2 DO DEM^VADPT
+3 DO ADD^VADPT
+4 SET DATAOUT("patient_information","name")=VADM(1)
+5 SET DATAOUT("patient_information","sex")=$PIECE(VADM(5),U,2)
+6 SET DATAOUT("patient_information","dob")=$PIECE(VADM(3),U,2)
+7 SET DATAOUT("patient_information","age")=VADM(4)
+8 SET DATAOUT("patient_information","social")=$PIECE(VADM(2),U,2)
+9 SET DATAOUT("patient_information","address1")=VAPA(1)
+10 SET DATAOUT("patient_information","address2")=VAPA(2)
+11 SET DATAOUT("patient_information","address3")=VAPA(3)
+12 SET DATAOUT("patient_information","city")=VAPA(4)
+13 SET DATAOUT("patient_information","state")=$PIECE(VAPA(5),U,2)
+14 SET DATAOUT("patient_information","zipcode")=VAPA(6)
+15 SET DATAOUT("patient_information","phone_number")=VAPA(8)
+16 SET DATAOUT("patient_information","cell_phone")=$PIECE($GET(^DPT(DFN,.13)),U,4)
+17 QUIT
+18 ;
HRPTPROF(JSONOUT,DFN) ;
+1 NEW PRFNAME,IDX,YSDARRAY,SDCOUNT,NOW,YSDT,SDTIME,HRRVWDT,DHRR,TIUIDX,DATAOUT,ERRARY,PIDX,FIDX,TIUINVDT,DATEFOUND,SAFHEAD,SAFDCL,CSREHEAD
+2 NEW APPTLIST,NODE,OUTPXENC,IEN,PRV,PRVLIST,FTRLIST,DATE,ENCOUNTER,I,YSVISIT,NIDX,STATUS,PREFS,OPCUT
+3 NEW PATTYP
+4 NEW SAFSCNO,SAFSCYES,CSRENEW,CSREUPD,SITES,HFCLIST,SAFREV
+5 SET NOW=$$NOW^XLFDT
+6 SET YSDT=$PIECE(NOW,".",1)
+7 DO HRINIT^YSBRPC(.SAFHEAD,.SAFDCL,.SAFREV,.SAFSCNO,.SAFSCYES,.CSREHEAD,.CSRENEW,.CSREUPD,.SITES)
+8 ;D GETLST^XPAR(.SAFHFC,"SYS","YSB SAFETY PLAN HF CATEGORY")
+9 ;D GETLST^XPAR(.SAFHEAD,"SYS","YSB SAFETY PLAN HEADER TEXT")
+10 ;D GETLST^XPAR(.SAFDCL,"SYS","YSB SAFETY PLAN DECLINE")
+11 ;D GETLST^XPAR(.CSREHFC,"SYS","YSB CSRE HF CATEGORY")
+12 ;D GETLST^XPAR(.CSREHEAD,"SYS","YSB CSRE HEADER TEXT")
+13 SET DATAOUT("high_risk_patient_profile","patient_record_flag",1,"flag_name")=""
+14 SET DATAOUT("high_risk_patient_profile","patient_record_flag",1,"review_date")=""
+15 SET DATAOUT("high_risk_patient_profile","patient_record_flag",1,"due/overdue")=""
+16 SET DATAOUT("high_risk_patient_profile","patient_record_flag",1,"prf_actions")=""
+17 SET DATAOUT("high_risk_patient_profile","patient_record_flag",1,"action_date")=""
+18 SET (HRRVWDT,DHRR)=0
+19 SET (PRFNAME,PRFIEN,IDX)=0
FOR
SET PRFNAME=$ORDER(^DGPF(26.15,"B",PRFNAME))
if PRFNAME']""
QUIT
Begin DoDot:1
+20 NEW PRFIEN,RSLT,PRFDATA,HISTIDX,LSTHIST,PRFACT,NXTHIDX,NXTHDT
+21 SET PRFIEN=$ORDER(^DGPF(26.15,"B",PRFNAME,""))
+22 SET RSLT=$$GETINF^DGPFAPIH(DFN,PRFIEN_";DGPF(26.15,","","","PRFDATA")
+23 IF RSLT=0
QUIT
+24 SET LSTHIST=$ORDER(PRFDATA("HIST",""),-1)
+25 SET HISTIDX="A"
FOR
SET HISTIDX=$ORDER(PRFDATA("HIST",HISTIDX),-1)
if 'HISTIDX
QUIT
Begin DoDot:2
+26 SET IDX=IDX+1
+27 SET PRFACT=$PIECE(PRFDATA("HIST",HISTIDX,"ACTION"),U,2)
+28 SET NXTHIDX=$ORDER(PRFDATA("HIST",HISTIDX))
+29 ;I NXTHIDX]"" S NXTHDT=$P($P($G(PRFDATA("HIST",NXTHIDX,"DATETIME")),U,2),"@")
SET NXTHDT="UNK"
+30 SET DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"flag_name")=PRFNAME
+31 IF $PIECE(PRFDATA("REVIEWDT"),U,2)=""
SET $PIECE(PRFDATA("REVIEWDT"),U,2)="N/A"
+32 ;Need to review this later
SET DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"review_date")=$SELECT(HISTIDX=LSTHIST:$PIECE(PRFDATA("REVIEWDT"),U,2),PRFACT="INACTIVATE":"N/A",1:NXTHDT)
+33 ;save the High Risk dates for later use
IF PRFIEN=2
Begin DoDot:3
+34 IF $$FMTH^XLFDT($PIECE(PRFDATA("REVIEWDT"),U,1),1)'>DHRR
QUIT
+35 SET HRRVWDT=$PIECE(PRFDATA("REVIEWDT"),U,1)
SET DHRR=$$FMTH^XLFDT($PIECE(PRFDATA("REVIEWDT"),U,1),1)
End DoDot:3
+36 SET DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"due/overdue")=$SELECT(HISTIDX=LSTHIST:$$GETDUE^YSBWHIGH($PIECE(PRFDATA("REVIEWDT"),U),YSDT),PRFACT="INACTIVATE":"N/A",1:"UNK")
+37 SET DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"prf_actions")=PRFACT
+38 SET DATAOUT("high_risk_patient_profile","patient_record_flag",IDX,"action_date")=$PIECE($PIECE(PRFDATA("HIST",HISTIDX,"DATETIME"),U,2),"@")
End DoDot:2
End DoDot:1
+39 ; scheduled appointments
+40 KILL ^TMP($JOB,"SDAMA301")
+41 NEW FROMTO
+42 ;S FROMTO=91
+43 SET FROMTO=365
+44 SET YSDARRAY(1)=$$FMADD^XLFDT(YSDT,-FROMTO)_";"_$$FMADD^XLFDT(YSDT,FROMTO)
+45 SET YSDARRAY(3)="R;I;NS;NSR;CC;CCR;CP;CPR;NT;"
+46 SET YSDARRAY(4)=DFN
+47 SET YSDARRAY("FLDS")="1;2;12;13;18;22"
+48 SET YSDARRAY("SORT")="P"
+49 SET SDCOUNT=$$SDAPI^SDAMA301(.YSDARRAY)
+50 MERGE APPTLIST=^TMP($JOB,"SDAMA301",DFN)
+51 ;add ^SCE("ADFN" loop to detect Outpatient Encounters with no visit. These will be marked as unscheduled
+52 SET (PIDX,FIDX)=0
+53 SET SDTIME=$$FMADD^XLFDT(YSDT,-FROMTO-1)
SET OPCUT=$$FMADD^XLFDT(YSDT,FROMTO)
+54 FOR
SET SDTIME=$ORDER(^SCE("ADFN",DFN,SDTIME))
if 'SDTIME!(SDTIME>OPCUT)
QUIT
Begin DoDot:1
+55 ;already got this visit, must be scheduled
IF $DATA(APPTLIST(SDTIME))
QUIT
+56 SET OUTPXENC=$ORDER(^SCE("ADFN",DFN,SDTIME,0))
+57 SET NODE=^SCE(OUTPXENC,0)
+58 SET APPTLIST(SDTIME)=SDTIME_U_$PIECE(NODE,U,4)_";"_$$GET1^DIQ(44,$PIECE(NODE,U,4),.01)_"^^^^^^^^^^"_OUTPXENC_U_$PIECE(NODE,U,3)_";"_$$GET1^DIQ(40.7,$PIECE(NODE,U,3),1)_"^^^^^4;UV^^^^;;WALK-IN"
End DoDot:1
+59 ; split appointments into past and previous
+60 ;sort previous appointments by reverse date
+61 SET SDTIME=NOW-.000001
+62 FOR
SET SDTIME=$ORDER(APPTLIST(SDTIME),-1)
if 'SDTIME
QUIT
Begin DoDot:1
+63 ;not ED or MH clinic - delete
IF '$$CHKCLIN(APPTLIST(SDTIME))
KILL APPTLIST(SDTIME)
QUIT
+64 ;in the future, possible for an appt later today
IF $PIECE(APPTLIST(SDTIME),U,22)="11;FUTURE;FUTURE"
QUIT
+65 SET PIDX=PIDX+1
+66 SET PRVLIST(PIDX)=APPTLIST(SDTIME)
+67 KILL APPTLIST(SDTIME)
End DoDot:1
+68 ;sort future appointments - all previous appts are deleted
+69 SET SDTIME=0
FOR
SET SDTIME=$ORDER(APPTLIST(SDTIME))
if 'SDTIME
QUIT
Begin DoDot:1
+70 IF '$$CHKCLIN(APPTLIST(SDTIME))
QUIT
+71 SET FIDX=FIDX+1
+72 SET FTRLIST(FIDX)=APPTLIST(SDTIME)
End DoDot:1
+73 ; handle previous appointments
+74 NEW PSTAT
+75 SET PIDX=0
FOR
SET PIDX=$ORDER(PRVLIST(PIDX))
if 'PIDX
QUIT
Begin DoDot:1
+76 SET NIDX=0
+77 SET NODE=PRVLIST(PIDX)
+78 SET STATUS=$PIECE(NODE,U,22)
SET PSTAT=$PIECE(STATUS,";",3)
+79 ; also removes " & AUTO-REBOOK"
SET STATUS=$PIECE($PIECE($PIECE(NODE,U,22),";",3)," &")
+80 ;No positive state of this encounter.
IF STATUS["NO ACTION TAKEN"
IF (PSTAT'["CHECKED")
QUIT
+81 ;Inpatient No action taken
IF STATUS["NO ACT TAKN"
IF (PSTAT'["CHECKED")
QUIT
+82 ;For Checked In/Checked Out replace NO ACTION TAKEN status
IF PSTAT["CHECKED"
SET STATUS=PSTAT
+83 SET SDTIME=+NODE
+84 SET ENCOUNTER=$PIECE(NODE,U,12)
+85 SET YSVISIT=""
IF ENCOUNTER
SET YSVISIT=$PIECE(^SCE(ENCOUNTER,0),U,5)
+86 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"location")=$PIECE($PIECE(NODE,U,2),";",2)
+87 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"date")=$$FMTE^XLFDT(SDTIME,5)
+88 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"provider")="N/A"
+89 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"status")=$PIECE($PIECE(NODE,U,22),";",3)
+90 IF YSVISIT
Begin DoDot:2
+91 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"status")="COMPLETED"
+92 IF $PIECE(NODE,U,18)="4;UV"
SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"status")="WALK-IN"
+93 ;DBIA 2316
SET (IEN,PRV)=""
FOR
SET IEN=$ORDER(^AUPNVPRV("AD",YSVISIT,IEN))
if 'IEN
QUIT
Begin DoDot:3
+94 SET NODE=^AUPNVPRV(IEN,0)
+95 IF $PIECE(NODE,U,4)="P"
SET PRV=+NODE
+96 QUIT
End DoDot:3
if PRV
QUIT
+97 IF PRV
Begin DoDot:3
+98 SET PRV=$$GET1^DIQ(200,PRV_",",.01)
+99 ;add a space between last and first name so GUI column can wrap
SET $PIECE(PRV,",",2)=" "_$PIECE(PRV,",",2)
+100 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"provider")=PRV
End DoDot:3
+101 KILL ^TMP("TIULIST",$JOB)
+102 DO NOTES^TIUSRVLV("",YSVISIT)
+103 ;loop through ^TMP("TIULIST",$J) and set TIUDA to each value
+104 SET DATE=""
FOR
SET DATE=$ORDER(^TMP("TIULIST",$JOB,DATE))
if 'DATE
QUIT
Begin DoDot:3
+105 SET I=""
FOR
SET I=$ORDER(^TMP("TIULIST",$JOB,DATE,I))
if 'I
QUIT
Begin DoDot:4
+106 ;only completed (signed) notes.
IF $PIECE(^TMP("TIULIST",$JOB,DATE,I),U,7)'="completed"
QUIT
+107 SET NIDX=NIDX+1
+108 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"notes",NIDX,"docID")=+^TMP("TIULIST",$JOB,DATE,I)
+109 SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"notes",NIDX,"docName")=$PIECE(^TMP("TIULIST",$JOB,DATE,I),U,2)
End DoDot:4
End DoDot:3
End DoDot:2
+110 IF 'NIDX
SET DATAOUT("high_risk_patient_profile","previous_activity",PIDX,"notes")=""
End DoDot:1
+111 ; handle future appointments
+112 SET FIDX=0
FOR
SET FIDX=$ORDER(FTRLIST(FIDX))
if 'FIDX
QUIT
Begin DoDot:1
+113 SET NODE=FTRLIST(FIDX)
+114 SET SDTIME=+NODE
+115 SET DATAOUT("high_risk_patient_profile","future_appointments",FIDX,"location")=$PIECE($PIECE(NODE,U,2),";",2)
+116 SET DATAOUT("high_risk_patient_profile","future_appointments",FIDX,"date")=$$FMTE^XLFDT(SDTIME,5)
End DoDot:1
+117 KILL ^TMP($JOB,"SDAMA301")
+118 IF '$DATA(DATAOUT("high_risk_patient_profile","previous_activity"))
SET DATAOUT("high_risk_patient_profile","previous_activity",1)=""
+119 IF '$DATA(DATAOUT("high_risk_patient_profile","future_appointments"))
SET DATAOUT("high_risk_patient_profile","future_appointments",1)=""
+120 ; review status
+121 NEW DSTAT
+122 ;Will return INPT if still an inpatient.
SET PATTYP=$$MHDCDT^YSBWHIG2(DFN)
if PATTYP'="INPT"
SET PATTYP=""
+123 SET DSTAT=$$DONE7^YSBWHIGH(DFN,YSDT,.SAFHEAD,.SAFDCL,.SAFREV,.SAFSCNO,.SAFSCYES)
+124 SET DATAOUT("high_risk_patient_profile","review_status","review_due")=$$GETDUE^YSBWHIGH(HRRVWDT,YSDT)
+125 SET DATAOUT("high_risk_patient_profile","review_status","on_track")=$$ONTRK^YSBWHIGH(DFN,"")
+126 SET DATAOUT("high_risk_patient_profile","review_status","done_in_7")=DSTAT
+127 SET DATAOUT("high_risk_patient_profile","review_status","done_in_7_number")=$$DONENUM(NOW)
+128 SET DATAOUT("high_risk_patient_profile","review_status","inpatient")=PATTYP
+129 ; safety plan
+130 NEW TIUFND
+131 SET TIUINVDT=0
SET IDX=0
SET TIUFND=1
+132 DO SAFLST^YSBWHIGH(.SAFDCL,.SAFREV,.SAFSCNO,.SAFSCYES,.HFCLIST)
+133 FOR
SET DATEFOUND=$$FINDDOC^YSBWHIGH(DFN,.TIUINVDT,.HFCLIST,.SAFHEAD,.TIUIDX,TIUFND)
if 'TIUINVDT
QUIT
Begin DoDot:1
+134 SET IDX=IDX+1
+135 SET DATAOUT("high_risk_patient_profile","safety_plan",IDX,"docID")=TIUIDX
+136 IF $$SAFDECL^YSBWHIGH(DFN,TIUINVDT)
SET DATAOUT("high_risk_patient_profile","safety_plan",IDX,"date")="Declined"
QUIT
+137 SET DATAOUT("high_risk_patient_profile","safety_plan",IDX,"date")=$$FMTE^XLFDT($PIECE(DATEFOUND,"."),5)
End DoDot:1
+138 IF 'IDX
SET DATAOUT("high_risk_patient_profile","safety_plan",1,"date")="Not Done"
+139 ;CSRE
+140 KILL HFCLIST
+141 DO CSRELST^YSBWHIGH(.CSRENEW,.CSREUPD,.HFCLIST)
+142 SET TIUINVDT=0
SET IDX=0
FOR
SET DATEFOUND=$$FINDDOC^YSBWHIGH(DFN,.TIUINVDT,.HFCLIST,.CSREHEAD,.TIUIDX,TIUFND)
if 'TIUINVDT
QUIT
Begin DoDot:1
+143 SET IDX=IDX+1
+144 SET DATAOUT("high_risk_patient_profile","CSRE",IDX,"date")=$$FMTE^XLFDT($PIECE(DATEFOUND,"."),5)
+145 SET DATAOUT("high_risk_patient_profile","CSRE",IDX,"docID")=TIUIDX
End DoDot:1
+146 IF 'IDX
SET DATAOUT("high_risk_patient_profile","CSRE",1,"date")="Not Done"
+147 DO ENCODE^YSBJSON("DATAOUT","JSONOUT","ERRARY")
+148 KILL ^TMP($JOB,"SDAMA301")
+149 KILL ^TMP("TIULIST",$JOB)
+150 QUIT
WEBPROF(ARGS,RESULTS) ; MHA Web call for HRPTPROF
+1 NEW DFN,JSONOUT
+2 SET DFN=$GET(ARGS("dfn"))
+3 IF DFN=""
DO SETERROR^YTQRUTL(404,"Patient ID not sent.")
QUIT
+4 DO HRPTPROF(.JSONOUT,DFN)
+5 DO TOTMP^YSBRPC(.JSONOUT)
+6 SET RESULTS=$NAME(^TMP("YTQ-JSON",$JOB))
+7 QUIT
+8 ;
DONENUM(TDT) ; Calculate the number of days for Done in 7
+1 NEW ACTDT,II,LST,RCNT,DIFF
+2 NEW NMSTR,NMARR,ACTSTR,ACTARR,LSTNM
+3 SET NMARR("HIGH RISK FOR SUICIDE")=""
+4 SET NMARR("BEHAVIORAL")=""
+5 SET NMARR("MISSING PATIENT")=""
+6 SET ACTARR("REACTIVATE")=""
+7 SET ACTARR("CONTINUE")=""
+8 SET ACTARR("NEW ASSIGNMENT")=""
+9 SET RCNT=0
SET LST=0
SET LSTNM=""
+10 SET II=0
FOR
SET II=$ORDER(DATAOUT("high_risk_patient_profile","patient_record_flag",II))
if II=""
QUIT
Begin DoDot:1
+11 SET NMSTR=$GET(DATAOUT("high_risk_patient_profile","patient_record_flag",II,"flag_name"))
+12 IF NMSTR]""
SET LSTNM=NMSTR
+13 ;Quit if we are not in a sequence of NEW/REACTIVATE/CONTINUE the Patient Record flags of interest
IF LSTNM]""
if '$DATA(NMARR(LSTNM))
QUIT
+14 SET ACTSTR=$GET(DATAOUT("high_risk_patient_profile","patient_record_flag",II,"prf_actions"))
+15 IF ACTSTR]""
if '$DATA(ACTARR(ACTSTR))
QUIT
+16 SET RCNT=$GET(DATAOUT("high_risk_patient_profile","patient_record_flag",II,"action_date"))
+17 SET RCNT=$$ETF(RCNT)
+18 IF RCNT>LST
SET LST=RCNT
End DoDot:1
+19 SET LST=$$FMTH^XLFDT(LST,1)
SET LST=LST+7
SET LST=$$HTFM^XLFDT(LST,1)
+20 SET DIFF=$$FMDIFF^XLFDT(LST,TDT,1)
+21 QUIT DIFF
ETF(X) ; External to Fileman format
+1 NEW %DT,Y
SET X=$GET(X)
SET %DT="PST"
DO ^%DT
SET X=Y
if +X'>0
SET X=""
QUIT X
+2 QUIT
CHKCLIN(NODE) ;
+1 NEW STOPCODE
+2 SET STOPCODE=$PIECE($PIECE(NODE,U,13),";",2)
+3 ;ED clinic
IF STOPCODE=130
QUIT 1
+4 ;MH clinic
IF (STOPCODE>499)
IF (STOPCODE<600)
QUIT 1
+5 ;not ED or MH clinic
QUIT 0
+6 ;
GETNOTE(JSONOUT,YSTIUDA) ;
+1 NEW DATAOUT,YSTEXT
+2 ;note text
+3 ;TEXT just contains the string "^TMP("TIUVIEW",TIUDA)"
DO TGET^TIUSRVR1(.YSTEXT,YSTIUDA)
+4 SET IDX=0
FOR
SET IDX=$ORDER(@YSTEXT@(IDX))
if 'IDX
QUIT
SET DATAOUT("note_text",IDX,"line")=@YSTEXT@(IDX)
+5 IF IDX=0
SET DATAOUT("note_text",1)=""
+6 DO ENCODE^YSBJSON("DATAOUT","JSONOUT","ERRARY")
+7 QUIT
WEBNOTE(ARGS,RESULTS) ;MHA Web call for GETNOTE
+1 NEW YSTIUDA,JSONOUT
+2 SET YSTIUDA=$GET(ARGS("noteId"))
+3 IF YSTIUDA=""
DO SETERROR^YTQRUTL(404,"Note ID not sent")
QUIT
+4 DO GETNOTE(.JSONOUT,YSTIUDA)
+5 DO TOTMP^YSBRPC(.JSONOUT)
+6 SET RESULTS=$NAME(^TMP("YTQ-JSON",$JOB))
+7 QUIT
+8 ;
GETRPRT(JSONOUT,ADMIN) ;
+1 NEW REPORT,DATAOUT,ERRARY
+2 KILL ^TMP("YTQRERRS",$JOB)
+3 DO BLDRPT^YTQRRPT(.REPORT,ADMIN)
+4 IF $DATA(REPORT)
Begin DoDot:1
+5 NEW IDX
+6 SET IDX=0
FOR
SET IDX=$ORDER(REPORT(IDX))
if 'IDX
QUIT
Begin DoDot:2
+7 SET DATAOUT("report",IDX,"line")=REPORT(IDX)
End DoDot:2
End DoDot:1
+8 IF '$DATA(REPORT)
SET DATAOUT("report",1,"line")="<no text>"
+9 IF $DATA(^TMP("YTQRERRS",$JOB,1,"error"))
Begin DoDot:1
+10 SET DATAOUT("report",1,"line")=^TMP("YTQRERRS",$JOB,1,"error","code")
+11 SET DATAOUT("report",2,"line")=^TMP("YTQRERRS",$JOB,1,"error","message")
+12 SET DATAOUT("report",3,"line")=^TMP("YTQRERRS",$JOB,1,"error","errors",1,"message")
End DoDot:1
+13 DO ENCODE^YSBJSON("DATAOUT","JSONOUT","ERRARY")
+14 KILL ^TMP("YTQRERRS",$JOB)
+15 QUIT
WEBRPRT(ARGS,RESULTS) ;
+1 NEW REPORT,DATAOUT,ERRARY,ADMIN,JSONOUT
+2 SET ADMIN=$GET(ARGS("adminId"))
+3 IF ADMIN=""
DO SETERROR^YTQRUTL(404,"Admin ID not sent.")
QUIT
+4 DO GETRPRT(.JSONOUT,ADMIN)
+5 DO TOTMP^YSBRPC(.JSONOUT)
+6 SET RESULTS=$NAME(^TMP("YTQ-JSON",$JOB))
+7 QUIT