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

EDPRPT1.m

Go to the documentation of this file.
  1. EDPRPT1 ;SLC/MKB - Activity Report ;4/25/13 3:15pm
  1. ;;2.0;EMERGENCY DEPARTMENT;**6,2**;Feb 24, 2012;Build 23
  1. ;
  1. ACT(BEG,END,CSV) ; Get Activity Report for EDPSITE by date range
  1. N LOG,X,X0,X1,X3,DX,IN,OUT,ROW,PROV,I,CUTOFF
  1. N ELAPSE,TRIAGE,WAIT,ADMDEC,ADMDEL,ALL,ADM,NOT,DISP
  1. D INIT ;set counters, sums to 0
  1. D:'$G(CSV) XML^EDPX("<logEntries>") I $G(CSV) D ;headers
  1. . N TAB S TAB=$C(9)
  1. . ;***pij 4/19/2013 changed ED to IEN
  1. . ;S X="ED"_TAB_"Time In"_TAB_"Time Out"_TAB_"Complaint"_TAB_"MD"_TAB_"Acuity"_TAB_"Elapsed"_TAB_"Triage"_TAB_"Wait"_TAB_"Dispo"_TAB_"Adm Dec"_TAB_"Adm Delay"_TAB_"Diagnosis"_TAB_"ICD9"
  1. . ;DRP EDP*2.0*2 Begin
  1. . ;***
  1. . S X="IEN"_TAB_"Time In"_TAB_"Time Out"_TAB_"Complaint"_TAB_"MD"_TAB_"Acuity"_TAB_"Elapsed"_TAB_"Triage"_TAB_"Wait"_TAB_"Dispo"_TAB_"Adm Dec"_TAB_"Adm Delay"_TAB_"Diagnosis"_TAB_"ICD"_TAB_"ICD Type"
  1. . ;End EDP*2.0*2 Changes
  1. . D ADD^EDPCSV(X)
  1. S IN=BEG-.000001
  1. LOOP F S IN=$O(^EDP(230,"ATI",EDPSITE,IN)) Q:'IN Q:IN>END D I '$D(ZTQUEUED),$$LONG D ZTSAVE Q
  1. . S LOG=0 F S LOG=+$O(^EDP(230,"ATI",EDPSITE,IN,LOG)) Q:LOG<1 D
  1. .. S X0=^EDP(230,LOG,0),X1=$G(^(1)),X3=$G(^(3))
  1. .. S OUT=$P(X0,U,9),DX=$$DXPRI^EDPQPCE(+$P(X0,U,3),LOG)
  1. .. K ROW S ROW("id")=LOG,ALL=ALL+1
  1. .. S ROW("inTS")=$S($G(CSV):$$EDATE^EDPRPT(IN),1:IN)
  1. .. S ROW("outTS")=$S($G(CSV):$$EDATE^EDPRPT(OUT),1:OUT)
  1. .. S ROW("complaint")=$P(X1,U)
  1. .. S DISP=$$ECODE^EDPRPT($P(X1,U,2))
  1. .. ;TDP - Patch 2 mod to catch all dispositions
  1. .. I DISP="" S DISP=$$DISP^EDPRPT($P(X1,U,2))
  1. .. S ROW("disposition")=DISP
  1. .. S ROW("arrival")=$$ENAME^EDPRPT($P(X1,U,10))
  1. .. S ROW("acuity")=$$ECODE^EDPRPT($P(X3,U,3))
  1. .. S ROW("md")=$$EPERS^EDPRPT($P(X3,U,5))
  1. .. S:$P(X3,U,5) PROV(+$P(X3,U,5))=""
  1. .. ;DRP Begin EDP*2.0*2 Changes
  1. .. S ROW("icd")=$P(DX,U,1),ROW("dx")=$P(DX,U,2),ROW("icdType")=$P(DX,U,3)
  1. .. ;End EDP*2.0*2 Changes
  1. .. S:'$L(DISP) DISP="none" S DISP(DISP)=DISP(DISP)+1
  1. .. ;
  1. A1 .. ; calculate times
  1. .. ; S:OUT="" OUT=NOW ;for calculations
  1. .. S ELAPSE=$S(OUT:($$FMDIFF^XLFDT(OUT,IN,2)\60),1:0)
  1. .. S ROW("elapsed")=ELAPSE_$S(ELAPSE>359:" *",1:"")
  1. .. S ALL("elapsed")=ALL("elapsed")+ELAPSE
  1. .. S DISP(DISP,"elapsed")=DISP(DISP,"elapsed")+ELAPSE
  1. .. ;
  1. .. S X=$$ACUITY^EDPRPT(LOG),TRIAGE=0 ;S:X<1 X=OUT
  1. .. S:X TRIAGE=($$FMDIFF^XLFDT(X,IN,2)\60)
  1. .. S ROW("triage")=TRIAGE,ALL("triage")=ALL("triage")+TRIAGE
  1. .. S DISP(DISP,"triage")=DISP(DISP,"triage")+TRIAGE
  1. .. ;
  1. .. S X=$$LVWAITRM^EDPRPT(LOG),WAIT=0
  1. .. S:X WAIT=($$FMDIFF^XLFDT(X,IN,2)\60)
  1. .. S ROW("wait")=WAIT,ALL("wait")=ALL("wait")+WAIT
  1. .. S DISP(DISP,"wait")=DISP(DISP,"wait")+WAIT
  1. .. ;
  1. .. S X=$$ADMIT^EDPRPT(LOG) I X<1 D
  1. ... S NOT=NOT+1,NOT("elapsed")=NOT("elapsed")+ELAPSE
  1. ... S NOT("triage")=NOT("triage")+TRIAGE
  1. ... S NOT("wait")=NOT("wait")+WAIT
  1. ... ;***pij 4/19/2013 if variables are null, change to zero
  1. ... S ROW("admDec")=0
  1. ... S ROW("admDel")=0
  1. ... ;***
  1. .. E D ;decision to admit
  1. ... S ADMDEC=($$FMDIFF^XLFDT(X,IN,2)\60)
  1. ... S ADMDEL=$S(OUT:($$FMDIFF^XLFDT(OUT,X,2)\60),1:0)
  1. ... S ROW("admDec")=ADMDEC,ROW("admDel")=ADMDEL
  1. ... S ADM=ADM+1,ADM("elapsed")=ADM("elapsed")+ELAPSE
  1. ... S ADM("triage")=ADM("triage")+TRIAGE
  1. ... S ADM("wait")=ADM("wait")+WAIT
  1. ... S ADM("admDec")=ADM("admDec")+ADMDEC
  1. ... S ADM("admDel")=ADM("admDel")+ADMDEL
  1. ... S DISP(DISP,"admDec")=DISP(DISP,"admDec")+ADMDEC
  1. ... S DISP(DISP,"admDel")=DISP(DISP,"admDel")+ADMDEL
  1. .. ;
  1. .. I '$G(CSV) S X=$$XMLA^EDPX("log",.ROW) D XML^EDPX(X) Q
  1. .. S X=ROW("id")
  1. .. ;Begin EDP*2.0*2 Changes
  1. .. F I="inTS","outTS","complaint","md","acuity","elapsed","triage","wait","disposition","admDec","admDel","dx","icd","icdType" S X=X_$C(9)_$G(ROW(I))
  1. .. ;End EDP*2.0*2 Changes
  1. .. D ADD^EDPCSV(X)
  1. I $D(ZTSAVE) D TASK^EDPRPT Q ;too long -> queue rest of report
  1. D:'$G(CSV) XML^EDPX("</logEntries>")
  1. ;
  1. A2 ; calculate & include averages
  1. Q:ALL<1 ;no visits found
  1. S ALL("type")="All Patients",NOT("type")="Not Admitted",ADM("type")="Admitted"
  1. F I="elapsed","triage","wait" S ALL(I)=$$ETIME^EDPRPT(ALL(I)\ALL)
  1. F I="elapsed","triage","wait" S NOT(I)=$S(NOT:$$ETIME^EDPRPT(NOT(I)\NOT),1:"00:00")
  1. F I="elapsed","triage","wait","admDec","admDel" S ADM(I)=$S(ADM:$$ETIME^EDPRPT(ADM(I)\ADM),1:"00:00")
  1. F I="admDec","admDel" S ALL(I)=ADM(I)
  1. S ALL("total")=ALL,NOT("total")=NOT,ADM("total")=ADM
  1. S X="" F S X=$O(DISP(X)) Q:X="" I DISP(X) D
  1. . S DISP(X,"total")=DISP(X),DISP(X,"type")=X
  1. . F I="elapsed","triage","wait","admDec","admDel" S DISP(X,I)=$$ETIME^EDPRPT(DISP(X,I)\DISP(X))
  1. ;
  1. A3 I $G(CSV) D Q ;CSV format
  1. . N TAB,D S TAB=$C(9)
  1. . D BLANK^EDPCSV
  1. . S X=TAB_"Total Patients"_TAB_ALL_TAB_TAB_TAB_TAB_ALL("elapsed")_TAB_ALL("triage")_TAB_ALL("wait")_TAB_TAB_ALL("admDec")_TAB_ALL("admDel")
  1. . D ADD^EDPCSV(X),BLANK^EDPCSV
  1. . S X=TAB_TAB_TAB_TAB_"Total"_TAB_"Visit"_TAB_"Triage"_TAB_"Wait"_TAB_"Adm Dec"_TAB_"Adm Del"
  1. . D ADD^EDPCSV(X),BLANK^EDPCSV
  1. . S X=TAB_TAB_TAB_"Patients Not Admitted"_TAB_NOT_TAB_NOT("elapsed")_TAB_NOT("triage")_TAB_NOT("wait")
  1. . D ADD^EDPCSV(X),BLANK^EDPCSV
  1. . S X=TAB_TAB_TAB_"Patients Admitted"_TAB_ADM_TAB_ADM("elapsed")_TAB_ADM("triage")_TAB_ADM("wait")_TAB_ADM("admDec")_TAB_ADM("admDel")
  1. . D ADD^EDPCSV(X),BLANK^EDPCSV
  1. . S X=TAB_TAB_TAB_"Disposition" D ADD^EDPCSV(X)
  1. . S D="" F S D=$O(DISP(D)) Q:D="" I DISP(D) D
  1. .. S X=D_TAB_DISP(D)_TAB_DISP(D,"elapsed")_TAB_DISP(D,"triage")_TAB_DISP(D,"wait")_TAB_DISP(D,"admDec")_TAB_DISP(D,"admDel")
  1. .. D ADD^EDPCSV(X)
  1. D XML^EDPX("<averages>")
  1. S X=$$XMLA^EDPX("average",.ALL) D XML^EDPX(X)
  1. S X=$$XMLA^EDPX("average",.NOT) D XML^EDPX(X)
  1. S X=$$XMLA^EDPX("average",.ADM) D XML^EDPX(X)
  1. S I="" F S I=$O(DISP(I)) Q:I="" I DISP(I) K ROW M ROW=DISP(I) S X=$$XMLA^EDPX("average",.ROW) D XML^EDPX(X)
  1. D XML^EDPX("</averages>")
  1. ; include list of providers assigned
  1. I $O(PROV(0)) D PROV^EDPRPT(.PROV)
  1. Q
  1. ;
  1. INIT ; Initialize counters and sums
  1. N I,DA,X,Y,J S (ALL,ADM,NOT)=0
  1. F I="elapsed","triage","wait" S (ALL(I),NOT(I),ADM(I))=0
  1. F I="admDec","admDel" S ADM(I)=0
  1. S X="" F S X=$O(^EDPB(233.1,"AB","disposition",X)) Q:X="" D
  1. . S DA=0 F S DA=$O(^EDPB(233.1,"AB","disposition",X,DA)) Q:DA<1 D
  1. .. S Y=$$ECODE^EDPRPT(DA) Q:'$L(Y) S DISP(Y)=0
  1. .. F I="elapsed","triage","wait","admDec","admDel" S DISP(Y,I)=0
  1. ;TDP - Patch 2, Added additional disposition inits to prevent undefined
  1. ; errors.
  1. ;S I=EDPSTA_"."_$P($P(X0,U),".",2)
  1. S I=EDPSTA_".disposition"
  1. S X=0 F S X=$O(^EDPB(233.2,"AS",I,X)) Q:X="" D
  1. . S DA=0 F S DA=$O(^EDPB(233.2,"AS",I,X,DA)) Q:DA="" D
  1. .. S Y=$P($G(^EDPB(233.2,"AS",I,X,DA)),U)
  1. .. I '$L(Y) S Y=$E($TR($P($G(^EDPB(233.2,"AS",I,X,DA)),U,2)," ","_"),1,30)
  1. .. I $L(Y),'$D(DISP(Y)) D
  1. ... S DISP(Y)=0
  1. ... F J="elapsed","triage","wait","admDec","admDel" S DISP(Y,J)=0
  1. S DISP("none")=0 F I="elapsed","triage","wait","admDec","admDel" S DISP("none",I)=0
  1. S CUTOFF=$P($$HADD^XLFDT($H,,,,6),",",2) K ZTSAVE
  1. Q
  1. ;
  1. LONG() ; -- report running too long?
  1. ;H 1 ;for testing only
  1. Q ($P($H,",",2)>CUTOFF)
  1. ;
  1. ZTSAVE ; Set up ZTSAVE to task remainder of report
  1. N I F I="BEG","END","IN" S ZTSAVE(I)=""
  1. F I="ALL","NOT","ADM" S ZTSAVE(I)=""
  1. F I="ALL(","NOT(","ADM(","DISP(","PROV(" S ZTSAVE(I)=""
  1. S ZTRTN="TASK^EDPRPT1",ZTDESC="EDIS Activity Report"
  1. ; bwf - 2/27/2012: This code seems to be incomplete. Adding kill statement to clean up ZTSAVE,ZTRTN and ZTDESC.
  1. ; my guess is there needs to be the final call to ACTUALLY TASK this
  1. K ZTRTN,ZTDESC,ZTSAVE
  1. Q
  1. ;
  1. TASK ; -- entry point to complete report in the background
  1. N NOW S NOW=$$NOW^XLFDT()
  1. D LOOP
  1. M ^XTMP("EDIS-"_ZTSK)=EDPXML K EDPXML
  1. S ^XTMP("EDIS-"_ZTSK,0)=$$FMADD^XLFDT(NOW,1)_U_NOW_"^EDIS Activity Report"
  1. K ZTSK
  1. Q