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

DGQPT.m

Go to the documentation of this file.
  1. DGQPT ; SLC/MKB - Patient Selection ;8/8/97 13:07
  1. ;;5.3;Registration;**447,796**;Aug 13, 1993;Build 6
  1. ;
  1. ; SLC/PKS - 3/2000: Modified to deal with "Combinations."
  1. ;
  1. EN ; -- main entry point for DG PATIENT SELECTION
  1. I $G(DGVP),'($D(DGPNM)&$D(DGSSN)) K DGVP ; reset
  1. D EN^VALM("DG PATIENT SELECTION")
  1. Q
  1. ;
  1. HDR ; -- header code
  1. N X I '$G(DGVP) S X="** No patient selected **"
  1. E S X=$G(DGPNM)_" "_$G(DGSSN)
  1. S VALMHDR(1)="Current patient: "_X
  1. Q
  1. ;
  1. INIT ; -- init variables and list array
  1. ; Modifications for multiple "Combination" lists by PKS.
  1. ;
  1. ; PARAM herein might end up as: DGLP DEFAULT CLINIC WEDNESDAY
  1. ; (Param Name and current DOW)
  1. ; DGY might end up passed as: 5^5^C;1;T-360;T+60;A
  1. ; (#lines^#pts^source;serviceSection;startDate;stopDate;sort)
  1. ;
  1. N DGY,DGX,PARAM,DGYZB,DGYZE
  1. ;
  1. ;added by CLA 12/12/96 - gets SERVICE/SECTION of user:
  1. N DGSRV S DGSRV=$G(^VA(200,DUZ,5)) I +DGSRV>0 S DGSRV=$P(DGSRV,U)
  1. ;
  1. S DGY=$$GET^XPAR("USR^SRV.`"_$G(DGSRV),"DGLP DEFAULT LIST SOURCE",1,"I") ; Gets default list source for this user.
  1. I $L(DGY) D S DGY=DGY_";"_DGX
  1. . ; PKS: Set "PARAM" var to parameter name in param def file:
  1. . S PARAM="DGLP DEFAULT "_$S(DGY="T":"TEAM",DGY="S":"SPECIALTY",DGY="P":"PROVIDER",DGY="W":"WARD",DGY="C":"CLINIC",DGY="M":"COMBINATION",1:"")
  1. . S:DGY="C" PARAM=PARAM_" "_$$UP^XLFSTR($$DOW^XLFDT(DT)) ; For clinics, add current DOW.
  1. . S DGX=$$GET^XPAR("USR^SRV.`"_$G(DGSRV),PARAM,1,"I") ; Source param.
  1. . ; Next lines modified by PKS for "Combinations" and dates:
  1. . I (DGY="C")!(DGY="M") D
  1. . . S DGYZB=$$UP^XLFSTR($$GET^XPAR("USR^SRV.`"_$G(DGSRV)_"^DIV^SYS^PKG","DGLP DEFAULT CLINIC START DATE",1,"I")) ; Gets clinic start date.
  1. . . I DGYZB="T+0" S DGYZB=$$FMTE^XLFDT(DT,DGYZB)
  1. . . S DGX=DGX_";"_DGYZB
  1. . . S DGYZE=$$UP^XLFSTR($$GET^XPAR("USR^SRV.`"_$G(DGSRV)_"^DIV^SYS^PKG","DGLP DEFAULT CLINIC STOP DATE",1,"I")) ; Add ";" & stop date.
  1. . . I DGYZE="T+0" S DGYZE=$$FMTE^XLFDT(DT,DGYZE)
  1. . . S DGX=DGX_";"_DGYZE
  1. S $P(DGY,";",5)=$$GET^XPAR("USR^SRV.`"_$G(DGSRV)_"^DIV^SYS^PKG","DGLP DEFAULT LIST ORDER",1,"I") ; Add default sort order.
  1. ;
  1. ; Call tag that builds the actual Patient Selection List:
  1. D BUILD(DGY)
  1. Q
  1. ;
  1. DEFAULT() ; -- Returns default action
  1. I '$P($G(^TMP("DG",$J,"PATIENTS",0)),U,2) Q "Change View"
  1. I XQORM("B")="Quit" Q "Close"
  1. Q "Next Screen"
  1. ;
  1. MSG() ; -- Lmgr msg bar
  1. Q "Enter the number of the patient chart to be opened"
  1. ;
  1. HELP ; -- help code
  1. N X D FULL^VALM1 S VALMBCK="R"
  1. W !!,"Enter the display number of the patient whose chart you wish to open"
  1. W !,"or enter a patient name, SSN, or initial/last 4 combination. To"
  1. W !,"change the list of patients displayed on this screen, enter CV. To"
  1. W !,"have the new list automatically displayed when selecting a new patient,"
  1. W !,"enter SV. Enter FD to search by patient name or identifier."
  1. W !!,"Press <return> to continue ..." R X:DTIME
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. K ^TMP("DG",$J,"PATIENTS"),XQORM("ALT")
  1. Q
  1. ;
  1. BUILD(LIST) ; -- build list in ^TMP("DG",$J,"PATIENTS")
  1. N DGI,DGX,DGY,LCNT,NUM,DFN,NAME,TYPE,PTR,BEG,END,SORT,DOB,RBED,%DT,X,Y,TITLE,PTID,SENS
  1. S TYPE=$E(LIST),PTR=+$P(LIST,";",2),SORT=$P(LIST,";",5)
  1. ; Next 5 lines added by PKS:
  1. I ((SORT="S")&(TYPE'="M")) S SORT="A" ; Reset invalid sorts.
  1. I TYPE="M" D ; Deal with combinations.
  1. .I ((SORT="P")!(SORT="A")!(SORT="S")) Q ; P,A,S are acceptable.
  1. .S SORT="A" ; Default.
  1. S $P(LIST,";",5)=SORT ; Reset in case of change.
  1. S BEG=$P(LIST,";",3) I $L(BEG) S X=BEG,%DT="X" D ^%DT S BEG=Y
  1. S END=$P(LIST,";",4) I $L(END) S X=END,%DT="X" D ^%DT S END=Y
  1. I TYPE="T" D TEAMPTS^DGQPTQ1(.DGY,PTR) S TITLE="Team "_$P($G(^OR(100.21,+PTR,0)),U)
  1. I TYPE="P" D PROVPTS^DGQPTQ2(.DGY,PTR) S TITLE="Provider "_$P($G(^VA(200,+PTR,0)),U)
  1. I TYPE="S" D SPECPTS^DGQPTQ2(.DGY,PTR) S TITLE="Specialty "_$P($G(^DIC(45.7,+PTR,0)),U)
  1. I TYPE="W" D WARDPTS^DGQPTQ2(.DGY,PTR) S TITLE="Ward "_$P($G(^DIC(42,+PTR,0)),U)
  1. I TYPE="C" D CLINPTS^DGQPTQ2(.DGY,PTR,BEG,END) S TITLE="Clinic "_$P($G(^SC(+PTR,0)),U)
  1. ; Next line added by PKS for "Combinations:"
  1. I TYPE="M" N MSG D COMBPTS^DGQPTQ6(1,PTR,BEG,END) S TITLE="Combination List" ; Sets MSG,LCNT,NUM, and writes ^TMP("DG",$J,"PATIENTS").
  1. ; Next section added by PKS for "Combinations:"
  1. I TYPE="M" D G BQ ; Check MSG var, then go to BQ tag.
  1. .I MSG'="" D ; Did call to COMBPTS assign an error message?
  1. ..S LCNT=1,NUM=0 ; Set defaults.
  1. ..S ^TMP("DG",$J,"PATIENTS",1,0)=" "_MSG ; Write error msg.
  1. D CLEAN^VALM10 S (LCNT,NUM)=0 ; All but "M" types reset, go on to B1.
  1. ;
  1. B1 S DGI=0 F S DGI=$O(DGY(DGI)) Q:DGI'>0 I DGY(DGI) D ; sort
  1. . S DFN=+DGY(DGI)
  1. . ;sort logic added by CLA 7/23/97:
  1. . S DGX=""
  1. . I SORT="P",(TYPE="C") S DGX=$P($G(DGY(DGI)),U,4) D
  1. .. S $P(DGX,".",2)=$E($P(DGX,".",2)_"000",1,4)
  1. ..S DGX=DGX_U_$P(DGY(DGI),U,2)
  1. . I SORT="R",(TYPE'="C") S DGX=$P($G(^DPT(+DGY(DGI),.101)),U)_U_$P(DGY(DGI),U,2)
  1. . I SORT="T" S DGX="" ; Need to add terminal digit sorting.
  1. . ; If no sort specified, default to alphabetic (plus app't if clinic type):
  1. . I DGX="" S DGX=$P(DGY(DGI),U,2)_U_$P($G(DGY(DGI)),U,4)
  1. . S ^TMP("DG",$J,"PATIENTS","B",DGX_DFN)=DGY(DGI) ; DFN ^ Name
  1. I '$D(^TMP("DG",$J,"PATIENTS")) D G BQ
  1. . N MSG
  1. . S MSG="No patients found"
  1. . S LCNT=1,NUM=0
  1. . I $D(DGY(1)) S MSG=$P(DGY(1),"^",2) ; error message from search
  1. . S ^TMP("DG",$J,"PATIENTS",1,0)=" "_MSG
  1. B2 S DGX="" F S DGX=$O(^TMP("DG",$J,"PATIENTS","B",DGX)) Q:DGX="" S DGY=^(DGX) D
  1. . S DFN=+DGY,NAME=$P(DGY,U,2)
  1. . S DOB=$$FMTE^XLFDT($P($G(^DPT(DFN,0)),U,3))
  1. . S:(TYPE'="C") RBED=$P($G(^DPT(DFN,.101)),U)
  1. . I (TYPE="C") S RBED=$S(SORT="P":$$FMTE^XLFDT($P(DGX,U)),1:$$FMTE^XLFDT($P(^TMP("DG",$J,"PATIENTS","B",DGX),U,4)))
  1. . ;Q:RBED="" removed by CLA 7/23/97 to prevent blank lines
  1. . S LCNT=LCNT+1,NUM=NUM+1
  1. . S ^TMP("DG",$J,"PATIENTS","IDX",NUM)=DGY ; DFN ^ NAME
  1. . ; Next lines modified/added by PKS on 1/24/2001:
  1. . ; Check for "sensitive" patients:
  1. . S PTID=""
  1. . S PTID=$$ID(DFN)
  1. . S SENS=$$SSN^DPTLK1(DFN)
  1. . I SENS["*" S PTID=""
  1. . S DOB=$$DOB^DPTLK1(DFN)
  1. . S ^TMP("DG",$J,"PATIENTS",LCNT,0)=$$LJ^XLFSTR(NUM,5)_$$LJ^XLFSTR(NAME,31)_$$LJ^XLFSTR(PTID,10)_$$LJ^XLFSTR(DOB,15)_$G(RBED)
  1. . D CNTRL^VALM10(LCNT,1,5,IOINHI,IOINORM)
  1. BQ S ^TMP("DG",$J,"PATIENTS",0)=LCNT_U_NUM_U_$G(LIST) ; #lines^#pts^context
  1. S ^TMP("DG",$J,"PATIENTS","#")=$O(^ORD(101,"B","ORQPT SELECT PATIENT",0))_"^1:"_NUM
  1. S RBED=$S(TYPE="C":"Appointment Date",TYPE="M":"Source Other",1:"Room-Bed")
  1. D CHGCAP^VALM("ROOM-BED",RBED) K VALMHDR
  1. S VALMCNT=LCNT,VALMBG=1,VALMBCK="R" S:$L($G(TITLE)) VALM("TITLE")=TITLE
  1. Q
  1. ;
  1. ID(DFN) ; -- Returns short ID for patient ID
  1. N ID S ID=$P($G(^DPT(DFN,.36)),U,4) ; short ID
  1. I '$L(ID) S ID=$E($P($G(^DPT(DFN,0)),U,9),6,9) ; last 4 of SSN
  1. Q "("_$E(NAME)_ID_")"
  1. ;
  1. APPT(DFN,CLINIC,FROM,TO) ; -- Return [next?] clinic appointment
  1. N VASD,VAERR K ^UTILITY("VASD",$J)
  1. S VASD("F")=FROM,VASD("T")=TO,VASD("C",CLINIC)=""
  1. D SDA^VADPT S NEXT=+$O(^UTILITY("VASD",$J,0)),NEXT=$P($G(^(NEXT,"I")),U)
  1. K ^UTILITY("VASD",$J)
  1. Q NEXT
  1. ;
  1. ALT ; -- XQORM("ALT") code to search File 2 for patient X
  1. N DIC,DFN,Y,DGX S DGX=X D FULL^VALM1
  1. S DIC=2,DIC(0)="EQM",X=$S($D(XQORMRCL):" ",1:DGX)
  1. D ^DIC I Y'>0 S VALMBCK="R" Q ;S XQORMERR=1 Q
  1. S DGX=+$G(^DPT(+Y,.35)) I DGX,'$$OK(DGX) S VALMBCK="R" Q
  1. S DFN=+Y G:DFN'=+$G(DGVP) SLCT1 ; set patient variables
  1. Q
  1. ;
  1. FIND ; -- find patient in ^DPT
  1. N X,Y,DIC,DGX,DFN
  1. S DIC=2,DIC(0)="AEQM" D FULL^VALM1
  1. D ^DIC I Y'>0 S VALMBCK="R" Q
  1. S DGX=+$G(^DPT(+Y,.35)) I DGX,'$$OK(DGX) S VALMBCK="R" Q
  1. S DFN=+Y G:DFN'=+$G(DGVP) SLCT1 ; set patient variables
  1. Q
  1. ;
  1. SELECT ; -- select patient from list
  1. N NMBR,X,Y,Z,DIC,DFN,DGX S NMBR=+$P(XQORNOD(0),"=",2)
  1. S Y=$G(^TMP("DG",$J,"PATIENTS","IDX",NMBR)),DFN=+Y
  1. I 'DFN W $C(7),!!,NMBR_" is not a valid selection.",! S VALMBCK="" H 1 Q
  1. ;W " "_$P(Y,U,2) S ^DISV(DUZ,"^DPT(")=DFN
  1. D FULL^VALM1 S DIC=2,DIC(0)="EQM",X="`"_DFN D ^DIC I Y<0 S VALMBCK="R" Q
  1. S DGX=+$G(^DPT(+Y,.35)) I DGX,'$$OK(DGX) S VALMBCK="R" Q
  1. SLCT1 ; -- may enter here with DFN from FIND
  1. N VADM,VAEL,VAIN,VA,VAERR,LOC,ORCNV
  1. D OERR^VADPT,ELIG^VADPT
  1. S LOC=+$G(^DIC(42,+VAIN(4),44))_";SC(" I 'LOC,'$D(XQAID) D
  1. . I $G(NMBR) N X S X=$$CONTEXT^DGQPT1 I $E(X)="C" S LOC=$P(X,";",2)_";SC(" Q:LOC ; use clinic if selected from list, else ask
  1. . S LOC=""
  1. S DGL=LOC,DGL(0)=$P($G(^SC(+DGL,0)),U),DGL(1)=VAIN(5)
  1. S DGVP=DFN_";DPT(",DGPNM=VADM(1),DGSSN=$P(VADM(2),U,2)
  1. S DGDOB=$P(VADM(3),U,2),DGAGE=VADM(4),DGSEX=$P(VADM(5),U)
  1. S DGTS=+VAIN(3),DGWARD=VAIN(4),DGATTEND=+VAIN(11),DGSC=$G(VAEL(3))
  1. I $P($G(^DGSL(38.1,+DGVP,0)),"^",2),($G(^DPT(+DGVP,.1))]""!$D(^XUSEC("DG SENSITIVITY",DUZ))) D
  1. . ; if senstive patient and (patient inpatient or user holds key)
  1. . ; prevents sensitive patient warning from scrolling off screen
  1. . N X
  1. . W !!,"Press <return> to continue ..."
  1. . R X:DTIME
  1. SLCT2 ; -- convert patient's orders, if not already done
  1. ;ORDERS NO LONGER BEING CONVERTED
  1. ;S DGCNV=$$OTF^OR3CONV(+DGVP) Q:'DGCNV I DGCNV>0 W !,"DONE" H 1 Q
  1. ;I DGCNV<0 W $C(7),!!,$P(DGCNV,U,2) H 2 S VALMBCK="R" Q
  1. Q
  1. ;
  1. OK(DATE) ; -- Patient is deceased; ok to continue?
  1. N X,Y,DIR S DIR(0)="YA",DIR("B")="NO"
  1. S DIR("A")="Do you wish to continue? "
  1. W $C(7),!!,"This patient died "_$$FMTE^XLFDT(DATE)_"!"
  1. D ^DIR
  1. Q +Y