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

EHMDISH1.m

Go to the documentation of this file.
EHMDISH1 ;ALB/WTC - EHRM - AUTOMATED PATIENT DISCHARGE TOOL; Feb 25, 2025@11:33:31
 ;;1.0;ELECTRONIC HEALTH MODERNIZATION;**15**;Apr 19, 2021;Build 14
 ;
 ;  Use of SDAPI^SDAMA301 is through icr #4433 (supported)
 ;
 Q  ;
 ;
INAPPT ;
 ;
 ;  List inpatient appointments for patients eligible for discharge.  To be used at time of conversion to Millennium.
 ;
 N WARD,DFN,VADM,FIRST,PTNAME,SORTBY,INSTFLTR,DIR,Y,X,DIRUT,CONVDATE,INSTUTN,IEN,INSTNAME,QUEUED,LINES,QUIT,STATION,POP,WARDFLTR,SSN4,APPTDTTM ;
 ;
 S INSTFLTR=$$INSTFLTR^EHMDISCH() Q:INSTFLTR=""  ;
 S WARDFLTR="" I $P(INSTFLTR,U,1)="S" S WARDFLTR=$$WARDFLTR^EHMDISCH($P(INSTFLTR,U,2)) ;
 ;
 S DIR(0)="S^WARD:Ward;PATIENT:Patient",DIR("A")="Sort by" D ^DIR Q:$D(DIRUT)  S SORTBY=Y ;
 ;
 K DIR S DIR(0)="D^:"_DT_":EX",DIR("A")="Conversion Date",DIR("B")=$$FMTE^XLFDT(DT) D ^DIR Q:$D(DIRUT) "" S CONVDATE=Y ;
 ;
 W !!,"Report is 132 columns wide",! ;
 S %ZIS="Q" D ^%ZIS I POP Q  ;
 ;
 ;  If report is queued, add to Taskman
 ;
 S QUEUED=0 I $D(IO("Q")) S QUEUED=1 D  Q  ;
 . N ZTDESC,ZTRTN,ZTSAVE,ZTSK ;
 . S ZTRTN="INAPPT1^EHMDISH1",ZTDESC="Patient Discharge List - Inpatient Appointments" ;
 . S ZTSAVE("*")="" ;
 . D ^%ZTLOAD W $S($D(ZTSK):"...Task queued",1:"...Task cancelled"),! ;
 ;
INAPPT1 ;  TaskMan start point
 ;
 I 'QUEUED,SORTBY="WARD" W !,"Sorting patients within ward..." ;
 I 'QUEUED,SORTBY="PATIENT" W !,"Sorting patients..." ;
 K ^TMP($J) ;
 ;
 D BLDLIST(SORTBY,INSTFLTR,WARDFLTR,CONVDATE,QUEUED) ;
 U IO ;
 ;
 I SORTBY="WARD" D  ;
 . S INSTUTN="",QUIT=0  F  S INSTUTN=$O(^TMP($J,INSTUTN)) Q:INSTUTN=""  D  Q:QUIT  ;
 .. S INSTNAME=$P(INSTUTN,U,1),IEN=$P(INSTUTN,U,2),STATION=$$GET1^DIQ(4,IEN,99) D HEADER(INSTNAME,STATION,SORTBY) ;
 .. S WARD="",LINES=0 F  S WARD=$O(^TMP($J,INSTUTN,WARD)) Q:WARD=""  D  Q:QUIT  ;
 ... ;D HEADER(INSTNAME,STATION,SORTBY) ;
 ... S PTNAME="" ;
 ... F  S PTNAME=$O(^TMP($J,INSTUTN,WARD,PTNAME)) Q:PTNAME=""  Q:QUIT  D  ;
 .... S DFN=0 F  S DFN=$O(^TMP($J,INSTUTN,WARD,PTNAME,DFN)) Q:'DFN  S SSN4=^(DFN),APPTDTTM=0,FIRST=1 F  S APPTDTTM=$O(^TMP($J,INSTUTN,WARD,PTNAME,DFN,APPTDTTM)) Q:'APPTDTTM  S X=^(APPTDTTM) D  S FIRST=0 Q:QUIT  ;
 ..... ;
 ..... I 'QUEUED D PAGINATE(.QUIT,INSTNAME,STATION,SORTBY,.LINES) Q:QUIT  ;
 ..... ;
 ..... W $S(FIRST:WARD,1:""),?32,PTNAME,?64,SSN4,?70,$$GET1^DIQ(44,$P(X,U,1),.01),?102,$$DATETIME^EHMDISCH(APPTDTTM),! S LINES=LINES+1,FIRST=0 ;
 .... W ! S LINES=LINES+1 ;
 .. ;
 .. I 'QUEUED,'QUIT S QUIT=$$CONTINUE^EHMDISCH()=0 ;
 ;
 I SORTBY="PATIENT" D  ;
 . S INSTUTN="",QUIT=0 F  S INSTUTN=$O(^TMP($J,INSTUTN)) Q:INSTUTN=""  D  Q:QUIT  ;
 .. S INSTNAME=$P(INSTUTN,U,1),IEN=$P(INSTUTN,U,2),STATION=$$GET1^DIQ(4,IEN,99) D HEADER(INSTNAME,STATION,SORTBY) ;
 .. S PTNAME="",LINES=0 F  S PTNAME=$O(^TMP($J,INSTUTN,PTNAME)) Q:PTNAME=""  D  Q:QUIT  ;
 ... S DFN=0 F  S DFN=$O(^TMP($J,INSTUTN,PTNAME,DFN)) Q:'DFN  S SSN4=^(DFN),APPTDTTM=0,LINES=LINES+1 W ! F  S APPTDTTM=$O(^TMP($J,INSTUTN,PTNAME,DFN,APPTDTTM)) Q:'APPTDTTM  S X=^(APPTDTTM) D  Q:QUIT  ;
 .... ;
 .... I 'QUEUED D PAGINATE(.QUIT,INSTNAME,STATION,SORTBY,.LINES) Q:QUIT  ;
 .... ;
 .... W PTNAME,?32,SSN4,?38,$$GET1^DIQ(44,$P(X,U,1),.01),?70,$$DATETIME^EHMDISCH(APPTDTTM),! S LINES=LINES+1 ;
 .. ;
 .. I 'QUEUED,'QUIT S QUIT=$$CONTINUE^EHMDISCH()=0 ;
 ;
 I QUIT W ! ;
 U 0 I 'QUEUED,IO=$I R !,"Press [RETURN] to continue",X:$G(DTIME,300) ;
 K ^TMP($J) D ^%ZISC ;
 Q  ;
 ;
BLDLIST(SORTBY,INSTFLTR,WARDFLTR,CONVDATE,QUEUED) ;
 ;
 ;  Build sorted list of patients to be discharged in ^TMP($J).
 ;
 ;  INSTFLTR = "A" if all institutions are included or "S^ien" if a single institution included.  "ien" points to file #4.
 ;  SORTBY   = "WARD" or "PATIENT"
 ;  QUEUED   = 1 if report is queued, 0 otherwise.
 ;
 N WARD,IEN,INSTUTN,INSTNAME,DFN,ADMPTR,VADM,APPTDTTM,X,SSN4,INCLUDE,SDA,COUNT,SDIEN ;
 ;
 K ^TMP($J) S WARD="" F  S WARD=$O(^DPT("CN",WARD)) Q:WARD=""  D  ;
 . I $G(WARDFLTR)'="" Q:$P(^SC(WARDFLTR,0),U,1)'=WARD  ;
 . S IEN=$O(^SC("B",WARD,0)) Q:'IEN  S INSTUTN=$P($G(^SC(IEN,0)),U,4) Q:'INSTUTN  I $P(INSTFLTR,U,1)="S" Q:$P(INSTFLTR,U,2)'=INSTUTN  ;
 . S INSTNAME=$P(^DIC(4,INSTUTN,0),U,1) ;
 . W:'QUEUED "." S DFN=0 F  S DFN=$O(^DPT("CN",WARD,DFN)) Q:'DFN  S ADMPTR=^(DFN) D  ;
 .. ;
 .. K VADM D DEM^VADPT S SSN4=$G(VADM(2)) I SSN4'="" S SSN4=$E($P(SSN4,U,1),6,9) ;
 .. ;
 .. I SORTBY="WARD" D  ;
 ... K SDA S SDA(1)=CONVDATE,SDA(3)="R;I",SDA(4)=DFN,SDA("MAX")=1000,SDA("FLDS")="3" ;
 ... S COUNT=$$SDAPI^SDAMA301(.SDA) Q:'COUNT  S ^TMP($J,INSTNAME_U_INSTUTN,WARD,VADM(1),DFN)=SSN4 ;  icr #4433
 ... S SDIEN=0 F  S SDIEN=$O(^TMP($J,"SDAMA301",DFN,SDIEN)) Q:'SDIEN  S APPTDTTM=0 D  ;
 .... F  S APPTDTTM=$O(^TMP($J,"SDAMA301",DFN,SDIEN,APPTDTTM)) Q:'APPTDTTM  S ^TMP($J,INSTNAME_U_INSTUTN,WARD,VADM(1),DFN,APPTDTTM)=SDIEN ;
 ... K ^TMP($J,"SDAMA301") ;
 .. ;
 .. I SORTBY="PATIENT" D  ;
 ... K SDA S SDA(1)=CONVDATE,SDA(3)="R;I",SDA(4)=DFN,SDA("MAX")=1000,SDA("FLDS")="3" ;
 ... S COUNT=$$SDAPI^SDAMA301(.SDA) Q:'COUNT  S ^TMP($J,INSTNAME_U_INSTUTN,VADM(1),DFN)=SSN4 ;  icr #4433
 ... S SDIEN=0 F  S SDIEN=$O(^TMP($J,"SDAMA301",DFN,SDIEN)) Q:'SDIEN  S APPTDTTM=0 D  ;
 .... F  S APPTDTTM=$O(^TMP($J,"SDAMA301",DFN,SDIEN,APPTDTTM)) Q:'APPTDTTM  S ^TMP($J,INSTNAME_U_INSTUTN,VADM(1),DFN,APPTDTTM)=SDIEN ;
 ... K ^TMP($J,"SDAMA301") ;
 Q  ;
 ;
 ;
 W @IOF,$$CENTER^EHMDISCH("Patient Discharge List - Inpatient Appointments",IOM),?IOM-8,$$FMTE^XLFDT(DT,2),!,$$CENTER^EHMDISCH(INSTNAME_" ("_STATION_")",IOM),!! ;
 I SORTBY="WARD" D  ;
 . W "WARD",?32,"PATIENT",?64,"SSN4",?70,"CLINIC",?102,"APPOINTMENT DATE/TIME",! ;
 . W $$DASHES^EHMDISCH(30),?32,$$DASHES^EHMDISCH(30),?64,$$DASHES^EHMDISCH(4),?70,$$DASHES^EHMDISCH(30),?102,$$DASHES^EHMDISCH(21),! ;
 ;
 I SORTBY="PATIENT" D  ;
 . W "PATIENT",?32,"SSN4",?38,"CLINIC",?70,"APPOINTMENT DATE/TIME",! ;
 . W $$DASHES^EHMDISCH(30),?32,$$DASHES^EHMDISCH(4),?38,$$DASHES^EHMDISCH(30),?70,$$DASHES^EHMDISCH(21),! ;
 Q  ;
 ;
PAGINATE(QUIT,INSTNAME,STATION,SORTBY,LINES) ;
 ;
 ;  If report displayed on screen, stop when screen full and prompt user to continue or stop.
 ;
 U 0 ;
 I IO=$I Q:LINES<(IOSL-7)  S QUIT=$$CONTINUE^EHMDISCH()=0 Q:QUIT  U IO D HEADER(INSTNAME,STATION,SORTBY) S LINES=1 Q  ;
 ;
 ;  New page header for printed report
 ;
 I LINES'<IOSL U IO D HEADER(INSTNAME,STATION,SORTBY) S LINES=1 ;
 Q  ;
 ;