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

PXUTLVST.m

Go to the documentation of this file.
  1. PXUTLVST ;ISL/DEE,PKR - Looks up the visit to see if there is already one ;04/11/2024
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**238**;Aug 12, 1996;Build 3
  1. ;
  1. Q
  1. ;
  1. FINDVISIT(DFN,VDT,HLOC,SVC,DSS,INS,TYPE,ENCTYPE,CSVC,VISITLIST) ;Use the "AET" and "AA" indexes
  1. ;to search for existing visits. Requires Patient (DFN) and Visit Date and Time (VDT). Hospital Location
  1. ;is required unless SVC="E". Institution (INS), Type, Encounter Type (ENCTYPE), DSS ID (DSS), and
  1. ;Service Category (SVC) are optional. If they are passed as "", then they are not
  1. ;included in the visit matching. If DSS and INS are passed as "NULL" then the match will be
  1. ;if these fields are NULL in the visit file entry.
  1. ;
  1. ;Credit Stop visits are not returned as a match because they are created and managed by
  1. ;Scheduling.
  1. ;
  1. ;DATA2PCE can change the input value of Service Category depending on if the patient was an
  1. ;inpatient or outpatient on the date of the encounter. It can also change the Service Category
  1. ;to "T" if the name of the Clinic Stop contains "TELE". If there is a possibility the input value of
  1. ;SVC may not be correct pass CSVC=1 to determine if SVC could have been changed and include
  1. ;the changed value in the matching.
  1. ;
  1. I (+DFN'>0)!('$$VFMDATE^PXDATE(VDT,"ST")) S VISITLIST(0)=-1 Q
  1. I (SVC'="E"),(+HLOC'>0) S VISITLIST(0)=-1 Q
  1. I (SVC="E"),(HLOC="") S HLOC=0
  1. ;
  1. N APPTVST,DATE,DSST,ENCTYP,INP,INVDT,IPM,NFOUND,SVCMATCH,SVCT,TEMP,TESTSVC,TIME
  1. N VISITIEN,VISITINDEX,VSIT
  1. S VSIT("VDT")=VDT
  1. S VSIT("PAT")=DFN
  1. S VSIT("LOC")=HLOC
  1. S VSIT("INS")=$G(INS)
  1. S VSIT("DSS")=$G(DSS)
  1. S VSIT("TYPE")=$G(TYPE)
  1. S VSIT("ENCTYPE")=$G(ENCTYPE)
  1. S VSIT("SVC")=$G(SVC)
  1. S NFOUND=0
  1. S TESTSVC=""
  1. ;
  1. I ($G(CSVC)=1),(VSIT("SVC")'=""),(VSIT("SVC")'="E"),(VSIT("SVC")'="H") D
  1. .;Use this special check for inpatient status.
  1. . S IPM=$$IP^VSITCK1(VDT,DFN)
  1. . S INP=$S(IPM>0:1,1:0)
  1. . I (VSIT("DSS")'="NULL"),(+VSIT("DSS")>0) S DSST=VSIT("DSS")
  1. . I ((VSIT("DSS")="")!(VSIT("DSS")="NULL")),(+VSIT("LOC")>0) S DSST=+$P(^SC(VSIT("LOC"),0),U,7)
  1. .;If the Stop Code is not in file #150.1, the Service Category cannot be X or D. It will be changed
  1. .;when EN^PXKCO is called from the protocol event SDAM APPOINTMENT EVENTS. This event is fired
  1. .;as part of SDAM PCE EVENT (D EN^SDPCE) which in turn is run directly from EVENT^PXKMASC.
  1. . I DSST>0 D
  1. .. S SVCT=$S((VSIT("SVC")="X")!(VSIT("SVC")="D")&('$D(^VSIT(150.1,"B",DSST))):"A",1:VSIT("SVC"))
  1. .. S TESTSVC=$$SVC^PXKCO(SVCT,DSST,INP,VSIT("LOC"))
  1. ;
  1. ;When the Service Category is "E" do not try to match the Hospital Location.
  1. I VSIT("SVC")="E" S VSIT("LOC")=0
  1. ;
  1. ;Get the visit for the appointment if there is one.
  1. S APPTVST=$$APPT2VST^PXUTL1(DFN,VDT,HLOC)
  1. I APPTVST>0 D
  1. . S TEMP=$G(^AUPNVSIT(APPTVST,0))
  1. . S SVCMATCH=0
  1. . I (VSIT("SVC")'=""),(VSIT("SVC")=$P(TEMP,U,7)) S SVCMATCH=1
  1. . I (SVCMATCH=0),(TESTSVC'=""),(TESTSVC=$P(TEMP,U,7)) S SVCMATCH=1
  1. . I SVCMATCH=0 Q
  1. .;
  1. . I (VSIT("TYPE")'=""),(VSIT("TYPE")'=$P(TEMP,U,3)) Q
  1. . I (VSIT("DSS")="NULL"),($P(TEMP,U,8)'="") Q
  1. . I (VSIT("DSS")'=""),(VSIT("DSS")'="NULL"),(VSIT("DSS")'=$P(TEMP,U,8)) Q
  1. .;
  1. . I (VSIT("INS")="NULL"),($P(TEMP,U,6)'="") Q
  1. . I (VSIT("INS")'=""),(VSIT("INS")'="NULL"),(VSIT("INS")'=$P(TEMP,U,6)) Q
  1. . S ENCTYP=($P($G(^AUPNVSIT(APPTVST,150)),U,3))
  1. .;Ignore Credit Stop encounters.
  1. . I ENCTYP="C" Q
  1. . I (VSIT("ENCTYPE")'=""),(VSIT("ENCTYPE")'=(ENCTYP)) Q
  1. . S NFOUND=NFOUND+1,VISITLIST(NFOUND)=APPTVST,VISITLIST(NFOUND,"A")="",VISITINDEX(APPTVST)=""
  1. ;
  1. I VSIT("ENCTYPE")'="" D
  1. . S ENCTYP=""
  1. . F S ENCTYP=$O(^AUPNVSIT("AET",DFN,VDT,HLOC,ENCTYP)) Q:ENCTYP="" D
  1. ..;Ignore Credit Stop encounters.
  1. .. I ENCTYP="C" Q
  1. .. I (VSIT("ENCTYPE")'=ENCTYP) Q
  1. .. S VISITIEN=""
  1. .. F S VISITIEN=$O(^AUPNVSIT("AET",DFN,VDT,HLOC,ENCTYP,VISITIEN)) Q:VISITIEN="" D
  1. ... I $D(VISITINDEX(VISITIEN)) Q
  1. ... S TEMP=$G(^AUPNVSIT(VISITIEN,0))
  1. ... S SVCMATCH=1
  1. ... I (VSIT("SVC")'=""),(VSIT("SVC")'=$P(TEMP,U,7)) S SVCMATCH=0
  1. ... I (SVCMATCH=0),($G(TESTSVC)'=""),(TESTSVC=$P(TEMP,U,7)) S SVCMATCH=1
  1. ... I SVCMATCH=0 Q
  1. ...;
  1. ... I (VSIT("TYPE")'=""),(VSIT("TYPE")'=$P(TEMP,U,3)) Q
  1. ... I (VSIT("DSS")="NULL"),($P(TEMP,U,8)'="") Q
  1. ... I (VSIT("DSS")'=""),(VSIT("DSS")'="NULL"),(VSIT("DSS")'=$P(TEMP,U,8)) Q
  1. ...;
  1. ... I (VSIT("INS")="NULL"),($P(TEMP,U,6)'="") Q
  1. ... I (VSIT("INS")'=""),(VSIT("INS")="NULL"),(VSIT("INS")'=$P(TEMP,U,6)) Q
  1. ... S NFOUND=NFOUND+1,VISITLIST(NFOUND)=VISITIEN,VISITINDEX(VISITIEN)=""
  1. ;
  1. S DATE=$P(VDT,".",1),TIME=$P(VDT,".",2)
  1. S INVDT=(9999999-DATE)
  1. I TIME'="" S INVDT=INVDT_"."_TIME
  1. S VISITIEN=0
  1. F S VISITIEN=+$O(^AUPNVSIT("AA",DFN,INVDT,VISITIEN)) Q:VISITIEN=0 D
  1. . I $D(VISITINDEX(VISITIEN)) Q
  1. . S ENCTYP=$P($G(^AUPNVSIT(VISITIEN,150)),U,3)
  1. . I ENCTYP="C" Q
  1. . I (VSIT("ENCTYPE")'=""),(VSIT("ENCTYPE")'=(ENCTYP)) Q
  1. . S TEMP=$G(^AUPNVSIT(VISITIEN,0))
  1. . I (VSIT("LOC")'=0),(VSIT("LOC")'=$P(TEMP,U,22)) Q
  1. . S SVCMATCH=0
  1. . I (VSIT("SVC")'=""),(VSIT("SVC")=$P(TEMP,U,7)) S SVCMATCH=1
  1. . I (SVCMATCH=0),(TESTSVC'=""),(TESTSVC=$P(TEMP,U,7)) S SVCMATCH=1
  1. . I SVCMATCH=0 Q
  1. .;
  1. . I (VSIT("TYPE")'=""),(VSIT("TYPE")'=$P(TEMP,U,3)) Q
  1. . I (VSIT("DSS")="NULL"),($P(TEMP,U,8)'="") Q
  1. . I (VSIT("DSS")'=""),(VSIT("DSS")'="NULL"),(VSIT("DSS")'=$P(TEMP,U,8)) Q
  1. .;
  1. . I (VSIT("INS")="NULL"),($P(TEMP,U,6)'="") Q
  1. . I (VSIT("INS")'=""),(VSIT("INS")'="NULL"),(VSIT("INS")'=$P(TEMP,U,6)) Q
  1. . S NFOUND=NFOUND+1,VISITLIST(NFOUND)=VISITIEN
  1. S VISITLIST(0)=NFOUND
  1. I NFOUND'>1 Q
  1. ;
  1. ;Process multiple matches.
  1. N APPTIND,DECOUNT,KEEPIEN,KEEPIND,NREFS,NREFSD,NVISITS,TEMPLIST
  1. S APPTIND=""
  1. F IND=1:1:NFOUND D
  1. . I $D(VISITLIST(IND,"A")) S APPTIND=IND
  1. . S VISITIEN=VISITLIST(IND)
  1. . S DECOUNT=+$P(^AUPNVSIT(VISITIEN,0),U,9)
  1. . S NREFSD(DECOUNT,IND)=VISITIEN
  1. ;Order the list based on dependency count; largest dependency count is first. Remove
  1. ;visits with no references.
  1. S NREFS="",NVISITS=0
  1. F S NREFS=+$O(NREFSD(NREFS),-1) Q:NREFS=0 D
  1. . S IND=""
  1. . F S IND=$O(NREFSD(NREFS,IND)) Q:IND="" D
  1. .. S NVISITS=NVISITS+1,TEMPLIST(NVISITS)=VISITLIST(IND)
  1. .. I $D(VISITLIST(IND,"A")) S TEMPLIST(IND,"A")=""
  1. ;If no visits have references return the first one.
  1. I NVISITS=0 D Q
  1. . S KEEPIND=$O(NREFSD(0,""))
  1. . S KEEPIEN=VISITLIST(KEEPIND)
  1. . S APPTIND=$S($D(VISITLIST(KEEPIND,"A")):KEEPIND,1:"")
  1. . K VISITLIST
  1. . S VISITLIST(0)=1,VISITLIST(1)=KEEPIEN
  1. . I APPTIND=KEEPIND S VISITLIST(1,"A")=""
  1. ;
  1. K VISITLIST
  1. S VISITLIST(0)=NVISITS
  1. F IND=1:1:NVISITS D
  1. . S VISITLIST(IND)=TEMPLIST(IND)
  1. . I $D(TEMPLIST(IND,"A")) S VISITLIST(IND,"A")=""
  1. Q
  1. ;
  1. ;=========
  1. LOOKVSIT(PAT,VDT,LOC,DSS,INS,TYP) ;Calls visit tracking to see if there is
  1. ;already a visit.
  1. ;Get the visit for the appointment is there is one
  1. N APPTVST
  1. S APPTVST=$$APPT2VST^PXUTL1(PAT,VDT,LOC)
  1. I APPTVST>0 Q APPTVST
  1. ;
  1. N VSIT,VSITPKG
  1. S VSIT("IEN")=""
  1. S VSIT("VDT")=VDT
  1. S VSIT("PAT")=PAT
  1. S VSIT("LOC")=LOC
  1. S VSIT("INS")=$G(INS)
  1. S VSIT("TYP")=$G(TYP)
  1. S VSIT("DSS")=$G(DSS)
  1. I VSIT("DSS")="",$P($G(^SC(+VSIT("LOC"),0)),"^",7)>0 S VSIT("DSS")=$P(^SC(+VSIT("LOC"),0),"^",7)
  1. S VSITPKG="PX"
  1. S VSIT(0)="D0EM"
  1. ;
  1. ;CALL FOR VSIT
  1. D ^VSIT
  1. I '$D(VSIT("IEN"))#2 Q -1
  1. Q $P(VSIT("IEN"),"^",1)
  1. ;