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

AMERPCC.m

Go to the documentation of this file.
  1. AMERPCC ; IHS/OIT/SCR - PRIMARY ROUTINE FOR PCC VISIT CREATION AND EDITING
  1. ;;3.0;ER VISIT SYSTEM;**1,2,5,6,8,10**;MAR 03, 2009;Build 23
  1. ;
  1. ; PCC vists are created with a call that includes an interface to the scheduling package
  1. ; IF a
  1. ; clinic code has been set up in ERS that identifies the Emergency
  1. ; Clinic for the user's current logon location (DUZ(2)) has been identified
  1. ; this visit is scheduled and can be "viewed" through EHR
  1. ;
  1. ; ELSE
  1. ; the visit is created and updated entirely through the ERS interface and is not "viewable" to EHR
  1. ;
  1. ;AMER*3.0*6;Turned off all V POV updates
  1. ;
  1. ; CURRENTLY: Only V POV and V PROVIDER support is provided by the ERS interface
  1. ;
  1. VISIT(AMERPAT,AMERDATE) ; EP from AMER1 when patient is admitted W/O PIMS interface CHEKIN^AMERBSDU
  1. ; If site has indicated a CLINIC in paramaters, a scheduled walk-in visit is created
  1. ; and a PCC VISIT record is created by PIMS SCHEDULING (BSDU) pacage
  1. ; If not a PCC VISIT record created by ERS PACKAGE
  1. ; 1. Look for VISIT created at checkin
  1. ; 2. Create a VISIT if none exists for this patient on this date from this location
  1. ; 3. Return VISIT IEN if successful, 0 otherwise
  1. N IN,AMERVSIT,OUT,X,AMERVDR,AMEROPT,CLIN,HLOC
  1. ;
  1. ;GDIT/HS/BEE 05/10/2018;CR#10213 - AMER*3.0*10 - Pull default ER clinic and use
  1. S CLIN=$$GET1^DIQ(9009082.5,DUZ(2)_",",.06,"I")
  1. ;
  1. ;If no clinic, get first one with a 30 mnemonic
  1. I CLIN="" S CLIN=$O(^AMER(3,"B",30,""))
  1. ;
  1. S CLIN=$$GCLIN^AMERBSD(CLIN)
  1. S HLOC=$P(CLIN,U,2),CLIN=$P(CLIN,U)
  1. ;
  1. I HLOC="" D Q ""
  1. . W !,"SITE PARAMETERS have not been set up in the ERS PARAMETER option"
  1. . W !,"No entry for EMERGENCY MEDICINE could be located"
  1. ;
  1. ;Set up for BSD
  1. S IN("HOS LOC")=HLOC
  1. S IN("CLINIC CODE")=CLIN
  1. ;
  1. ;End of CR#10213 Changes
  1. ;
  1. S (AMERVSIT,AMERVDR)=""
  1. S IN("PAT")=AMERPAT
  1. S IN("VISIT DATE")=AMERDATE
  1. S IN("SITE")=$G(DUZ(2))
  1. ;To determine "visit type" for this visit, look in "PCC MASTER CONTROL" file
  1. ;get the "type of visit" that is set there
  1. S IN("VISIT TYPE")=$P($G(^APCCCTRL(DUZ(2),0)),U,4)
  1. S IN("USR")=DUZ
  1. ;GDIT/HS/BEE 05/10/2018;CR#10213 - AMER*3.0*10 - Now being set above
  1. ;S IN("HOS LOC")=$G(^AMER(2.5,DUZ(2),"SD"))
  1. S:IN("HOS LOC")'="" IN("APPT DATE")=AMERDATE ; Setting IN("APPT DATE") will create an appoinment for this time
  1. S IN("SRV CAT")="A" ; ER VISITS are "ambulatory"
  1. S IN("TIME RANGE")=3 ; Only find a visit for a time that is close to time or ER VISIT
  1. ;
  1. D GETVISIT^APCDAPI4(.IN,.OUT)
  1. I $P(OUT(0),U,1)=0 D
  1. .D EN^DDIOL("NO VISIT FOUND OR CREATED!!!","","!!")
  1. .S AMERVSIT=-1_"^"_$P(OUT(0),U,2)
  1. .Q
  1. Q:+AMERVSIT<0 AMERVSIT
  1. S AMERTEMP=0
  1. I $P(OUT(0),U,1)>1 D
  1. .F S AMERTEMP=$O(OUT(AMERTEMP)) Q:AMERTEMP="" D
  1. ..D EN^DDIOL("Multiple VISIT matches FOUND: "_AMERTEMP,"","!!")
  1. ..S AMERVSIT=AMERTEMP
  1. ..Q
  1. .Q
  1. I $P(OUT(0),U,1)=1 S AMERVSIT=$O(OUT(AMERTEMP))
  1. ; IF "Option use to create" is blank (no PIMS interface) update it with DIE call
  1. I AMERVSIT>0 D
  1. .Q:$$GETVOPTN^AMERVSIT(AMERVSIT)'=""
  1. .S AMEROPT=$$GETOPIEN^AMERVSIT("AMER IHS PCC LINK")
  1. .S:+AMEROPT>0 AMERVDR=".24///"_+AMEROPT
  1. .D:AMERVDR'="" VSITDIE^AMERVSIT(AMERVSIT,AMERVDR)
  1. .Q
  1. Q AMERVSIT
  1. ;
  1. EXISTING(AMERDFN) ; EP FROM TRGSET^AMERD
  1. ; RETURNS VISIT IEN for patient that has not yet been discharged
  1. N IN,OUT,DIC,Y,AMERTEMP,AMERVSIT
  1. S DIC="^AMERADM(",X=AMERDFN,DIC(0)="NXZ"
  1. D ^DIC
  1. K DIC
  1. I Y<0 Q -1
  1. S AMERVSIT=$P($G(^AMERADM(AMERDFN,0)),U,3)
  1. Q AMERVSIT
  1. SCHEDULD(AMERPAT,AMERDATE,AMERSCHD) ; EP from ERCHCKIN^AMERBDSU
  1. ; Called when user has selected to check-in ER patient for scheduled visit
  1. ; INPUT: AMERPAT - ien of PATIENT
  1. ; AMERDATE - the date and time of ER ADMISSION
  1. ; AMERSCHD - the date and time of scheduled ER APPOINTMENT
  1. ;
  1. ; Return VISIT IEN if check-in is successful, 0 otherwise
  1. ;
  1. N IN,AMERVSIT,OUT,X,AMERDIFF
  1. S AMERVSIT=""
  1. S AMERDIFF=AMERDATE-AMERSCHD
  1. I AMERDIFF<0 S AMERDIFF=+AMERDIFF
  1. S IN("PAT")=AMERPAT
  1. S IN("VISIT DATE")=AMERDATE
  1. S IN("SITE")=$G(DUZ(2))
  1. ;know the appointment date and want to check-in for this visit
  1. S IN("APPT DATE")=AMERSCHD
  1. ; To determine "visit type" for this visit, look in the "PCC MASTER CONTROL" file
  1. ; and get the "type of visit" that is set there
  1. S IN("VISIT TYPE")=$P($G(^APCCCTRL(DUZ(2),0)),U,4)
  1. S IN("USR")=DUZ
  1. S IN("HOS LOC")=$G(^AMER(2.5,DUZ(2),"SD"))
  1. S IN("SRV CAT")="A" ; ER VISITS are "ambulatory"
  1. S IN("TIME RANGE")=AMERDIFF+10 ; LOOK FOR A VISIT AROUND DIFFERENCE BETWEEN SCHEDULED AND VISIT TIME
  1. D GETVISIT^APCDAPI4(.IN,.OUT)
  1. I $P(OUT(0),U,1)=0 D
  1. .D EN^DDIOL("NO VISIT FOUND OR CREATED!!!","","!!")
  1. .S AMERVSIT=-1_"^"_$P(OUT(0),U,2)
  1. .Q
  1. Q:+AMERVSIT<0 AMERVSIT
  1. S AMERTEMP=0
  1. I $P(OUT(0),U,1)>1 D
  1. .F S AMERTEMP=$O(OUT(AMERTEMP)) Q:AMERTEMP="" D
  1. ..D EN^DDIOL("Multiple VISIT matches FOUND: "_AMERTEMP,"","!!")
  1. ..S AMERVSIT=AMERTEMP
  1. ..Q
  1. .Q
  1. I $P(OUT(0),U,1)=1 S AMERVSIT=$O(OUT(AMERTEMP))
  1. Q AMERVSIT
  1. ;
  1. FINDVSIT(AMERDA) ; EP FROM AMEREDTA,AMERVSIT,AMERSAV
  1. ; AMERDA-VISIT IEN FOR THIS ER VISIT
  1. ;
  1. ; RETURNS VISIT IEN for patient that has been discharged from ER IF SUCCESSFUL
  1. ; -1 IF NOT
  1. N IN,OUT,DIC,Y,AMERTEMP,AMERVSIT
  1. N AMERDFN,AMERDR
  1. S AMERVSIT=$P($G(^AMERVSIT(AMERDA,0)),U,3)
  1. I AMERVSIT="" S AMERVSIT=-1
  1. Q AMERVSIT
  1. ;
  1. VPROVTRG(AMERDFN,AMERPCC) ; EP From TRGSET^AMERD
  1. ; Updates VISIT information when entered through TRI option before discharge
  1. ; Update CLINIC code if needed in VISIT entry
  1. ; and add ADMITTING providers to V PROVIDER before discharge
  1. ; AMERDFN:patient ien
  1. ; AMERPCC:VISIT ien
  1. N AMERPROV,AMERPIEN,AMERTIME,DIC,Y,AMERVVAL,AMERCLNC,AMERVDR
  1. S AMERVDR=""
  1. ; UPDATE PRESENTING COMPLAINT IF IT IS NOT THE SAME AS WHAT IS ALREADY IN VISIT FILE
  1. S DIC="^AMERADM(",X=AMERDFN,DIC(0)="NXZ"
  1. D ^DIC
  1. K DIC
  1. Q:Y<0
  1. S AMERVVAL=$G(^AUPNVSIT(AMERPCC,14))
  1. S AMERCOMP=$P($G(Y(0)),U,10) ; PRESENTING COMPLAINT
  1. I AMERVVAL'=AMERCOMP S AMERVDR="1401///"_AMERCOMP
  1. ;GDIT/HS/BEE 05/10/2018;CR#10213 - AMER*3.0*10 - Clinic (and Location) now set in AMER2A
  1. ;UPDATE CLINIC IF IT IS NOT THE SAME AS WHAT IS ALREADY THERE
  1. ;S AMERVVAL=$P($G(^AUPNVSIT(AMERPCC,0)),U,8)
  1. ;S:AMERVVAL>0 AMERVVAL=$P($G(^DIC(40.7,AMERVVAL,0)),U,1)
  1. ;S AMERCLNC=$P($G(^TMP("AMER",$J,2,20)),U,2)
  1. ;I (AMERCLNC'="URGENT CARE") S AMERCLNC="EMERGENCY MEDICINE"
  1. ;I AMERVVAL'=AMERCLNC S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:""),AMERVDR=AMERVDR_".08///"_AMERCLNC
  1. ; NOW ADD V PROVIDER INFO
  1. S AMERPIEN=$P($G(Y(0)),U,19) ; TRIAGE NURSE
  1. S AMERTIME=$P($G(Y(0)),U,21) ; TRIAGE TIME
  1. I AMERTIME="" S AMERTIME=$P($G(Y(0)),U,2) ; Use admission time if not supplied
  1. ;IHS/OIT/SCR 12/16/08 - IF THE PROVIDER THAT WE ARE ABOUT TO ADD IS ALREADY ASSOCIATED TO THE VISIT THROUGH EHR, DON'T ADD AGAIN
  1. I '$$PRVTHERE^AMERPCC1(AMERPIEN,AMERPCC) D
  1. .I $$ADDPRV^AMERPCC1(AMERPCC,AMERPIEN,AMERTIME,AMERDFN,"S","")<1 D EN^DDIOL("UNABLE TO ADD V PROVIDER FOR TRIAGE NURSE","","!!") ; TRIAGE NURSE
  1. .Q
  1. ; IF CLINIC OR PRESENTING COMPLAINT HAS BEEN MODIFIED, UPDATE IT THROUGH DIE
  1. D:AMERVDR'="" VSITDIE^AMERVSIT(AMERPCC,AMERVDR)
  1. Q
  1. VISITIN(AMERDFN,AMERPCC) ; EP From SAVE^AMER0
  1. ; Updates exisiting VISIT with admit information
  1. ; AMERDFN - PATIENT IEN TO IDENTIFY PATIENT IN ER ADMISSIONS FILE
  1. ; AMERPCC - PCC VISIT IEN FOR UPDATING VISIT FILE CHIEF COMPLAINT
  1. N DIC,Y,AMERCOMP,AMERVDR
  1. S DIC="^AMERADM(",X=AMERDFN,DIC(0)="NXZ"
  1. D ^DIC
  1. K DIC
  1. Q:Y<0
  1. ;AMER*3.0*8;Pull from new field
  1. ;S AMERCOMP=$P($G(Y(0)),U,10) ; PRESENTING COMPLAINT
  1. S AMERCOMP=$G(^AMERADM(AMERDFN,23)) ; PRESENTING COMPLAINT
  1. S AMERVDR="1401///"_AMERCOMP
  1. D VSITDIE^AMERVSIT(AMERPCC,AMERVDR)
  1. ;
  1. ;AMER*3*5;Added auditing call
  1. ;D LOG^AMERBUSA("P","E","AMERPCC","AMER: Updated ER visit presenting complaint ("_AMERDFN_")",AMERDFN)
  1. ;
  1. Q
  1. SYNCHPCC(AMERDA) ; EP from UPDATE^AMERSAV, AMEREDPC, AND AMEREDTA
  1. ; This routine will:
  1. ; 0. Get the current patient DOB and chart number from patient reg APIs and use them to update the ER VISIT file if different
  1. ; 1. Identify an exisisting visit or make a new one
  1. ; 2. Update VISIT entry with
  1. ; 2a."CHIEF COMPLAINT" if different from ER VISIT Presenting Complaint
  1. ; 2b."CHECKOUT DAY AND TIME" if different from ER VISIT departure time
  1. ; 2C."OPTION USED TO CREATE" to "AMER IHS PCC LINK" if empty
  1. ;
  1. ; 3. Look for V PROVIDER entries and be sure identified "admitting" providers are in
  1. ; the ER VISIT file and that the times are the same
  1. ; 3a. Add admitting providers to V PROVIDER if they are not there
  1. ; 3b. Remove V PROVIDER entries if provider is not identified as admitting provider in ER VISIT file
  1. ; 3c. Modify V PROVIDER times if admitting provider time is not the same
  1. ;
  1. ; 4. Add V PROVIDER entries for discharge providers and ER CONSULANTS
  1. ;AMER*3.0*6;No longer add V POV entries
  1. ; 5. Add V POV entries for each valid ICD9 DX code in ER VISIT
  1. ;
  1. ; RETURNS VISIT IEN IF SUCCESFUL, 0 IF NOT
  1. ;
  1. N AMERCLN,AMERPCC,AMRSTRG,AMERQUIT,AMERDATE,AMERDEPT,AMERPAT,AMERDOC
  1. N AMEREVAL,AMERVVAL,AMERETIM,AMERVTIM,AMERFND,AMERVIEN,AMERVDR,AMERNEW
  1. N AMERVOPT,AMERPNTR,AMERDR,AMERDOB,AMERHRN,AMERETIM,AMERVTIM
  1. Q:$G(^AMERVSIT(AMERDA,0))="" 0 ; DON'T TRY TO SYNCH A VISIT UP IF THE VISIT DOESN'T EXIST
  1. ; The value in the ER VISIT, the value in the VISIT file, the associated ER VISIT time and the associated VISIT time
  1. S (AMERCLN,AMERDATE,AMERPAT,AMERVDR)=""
  1. S AMERDATE=$P($G(^AMERVSIT(AMERDA,0)),U,1) ; AMERDATE IS THE TIME OF VISIT
  1. I AMERDATE="" Q 0
  1. S AMERPAT=$P($G(^AMERVSIT(AMERDA,0)),U,2) ; AMERPAT IS THE IEN OF PATIENT
  1. I AMERPAT="" Q 0
  1. ;IHS/OIT/SCR 01/09/09 - NOW LOOK AT PATIENT REG INFO AND UPDATE ERS IF NEEDED
  1. D SYNCHERP^AMERERS(AMERPAT,AMERDA)
  1. I $G(^AMERVSIT(AMERDA,6))'="" S AMERDEPT=$P(^AMERVSIT(AMERDA,6),U,2)
  1. S AMERPCC=$$FINDVSIT^AMERPCC(AMERDA)
  1. I AMERPCC<0 Q 0 ;IHS/OIT/SCR 05/07/09 patch 1
  1. ;
  1. ;GDIT/HS/BEE 05/10/2018;CR#10213 - AMER*3.0*10 - Sync clinic and hospital location
  1. D SYNCCL^AMER2A(AMERDA,AMERPCC)
  1. ;
  1. ; Compare ER "Presenting Complaint" to VISIT "Chief Complaint"
  1. S AMEREVAL=$G(^AMERVSIT(AMERDA,1))
  1. S AMERVVAL=$G(^AUPNVSIT(AMERPCC,14))
  1. S AMERVVAL=$TR(AMERVVAL,";","~") ;IHS/OIT/SCR 05/07/09 patch 1
  1. I AMERVVAL="" S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:""),AMERVDR=AMERVDR_"1401///"_AMEREVAL
  1. ELSE I (AMEREVAL'=AMERVVAL) D
  1. .;IHS/OIT/SCR 12/18 - if the values are different, user needs to choose
  1. .D EN^DDIOL("**The value for CHIEF COMPLAINT in the PCC visit file is different from ERS PRESENTING COMPLAINT**","","!!?3")
  1. .D EN^DDIOL("PCC CHIEF COMPLAINT: "_$G(^AUPNVSIT(AMERPCC,14)),"","!?3")
  1. .D EN^DDIOL("ERS PRESENTING COMPLAINT: "_AMEREVAL,"","!?3")
  1. .S DIR(0)="SO^1:Correct PCC data using ERS data;2:Correct ERS data using PCC data"
  1. .S DIR("A")="Which would you like to do"
  1. .D ^DIR K DIR
  1. .S AMERANS=+Y
  1. .I Y=""!(Y="^")!(AMERANS=2) D
  1. ..;KEEP THE PCC VISIT INFO - PUT IT INTO THE AMER VISIT
  1. ..S AMERDR="1////"_AMERVVAL
  1. ..D DIE^AMEREDIT(AMERDA,AMERDR)
  1. ..Q
  1. .I AMERANS=1 D
  1. ..;UPDATE THE PCC VISIT
  1. ..S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:""),AMERVDR=AMERVDR_"1401///"_AMEREVAL
  1. ..Q
  1. .Q
  1. ; GET THE DEPARTURE OUT TIME FROM VISIT AND COMPARE TO CHECK OUT TIME IN ER VISIT
  1. S AMEREVAL=$P($G(^AMERVSIT(AMERDA,6)),U,2) ; AMERDEPT IS DEPARTURE TIME
  1. S AMERVVAL=$P(^AUPNVSIT(AMERPCC,0),"^",18) ;CHECKOUT TIME
  1. I (AMEREVAL'=AMERVVAL) D
  1. .I AMERVVAL'="" D
  1. ..;IHS/OIT/SCR 12/18 - if the values are different, user needs to choose
  1. ..S AMERVTIM=$$EDDISPL^AMEREDAU(AMERVVAL,"D")
  1. ..S AMERETIM=$$EDDISPL^AMEREDAU(AMEREVAL,"D")
  1. ..D EN^DDIOL("**The value for DEPARTURE DATE in the PCC visit file is different from ERS CHECKOUT DAY**","","!!?3")
  1. ..D EN^DDIOL("PCC VISIT DEPARTURE DATE: "_AMERVTIM,"","!?3")
  1. ..D EN^DDIOL("ERS CHECKOUT DATE: "_AMERETIM,"","!?3")
  1. ..S DIR(0)="SO^1:Correct PCC data using ERS data;2:Correct ERS data using PCC data"
  1. ..S DIR("A")="Which would you like to do"
  1. ..D ^DIR K DIR
  1. ..S AMERANS=+Y
  1. ..I Y=""!(Y="^")!(AMERANS=2) D
  1. ...;KEEP THE PCC VISIT INFO - PUT IT INTO THE AMER VISIT
  1. ...S AMERDR="6.2////"_AMERVVAL
  1. ...D DIE^AMEREDIT(AMERDA,AMERDR)
  1. ...Q
  1. ..I AMERANS=1 D
  1. ...;UPDATE THE PCC VISIT WITH WHAT USER JUST ENTERED
  1. ...S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:""),AMERVDR=AMERVDR_".18///"_AMEREVAL ; patch 2
  1. ...Q
  1. ..Q
  1. .E S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:""),AMERVDR=AMERVDR_".18////"_AMEREVAL
  1. .Q
  1. ; GET OPTION USED TO CREATE VISIT - IF NOT THERE, IDENTIFY "AMER IHS PCC LINK" OPTION
  1. S AMERVVAL=$P($G(^AUPNVSIT(AMERPCC,0)),U,24) ; IEN OF OPTION THAT CREATED VISIT
  1. I AMERVVAL="" S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:""),AMERVDR=AMERVDR_".24///"_$$GETOPIEN^AMERVSIT("AMER IHS PCC LINK")
  1. D:AMERVDR'="" VSITDIE^AMERVSIT(AMERPCC,AMERVDR) ; update VISIT file with identified changes
  1. K AMERVVAL,AMEREVAL,AMERVDR
  1. D SYNCHPRV^AMERPCC1(AMERDA,AMERPCC,AMERPAT)
  1. S AMERDOC=$P($G(^AMERVSIT(AMERDA,6)),U,3)
  1. ;
  1. ;AMER*3.0*6;No longer update V POV
  1. ;D SYNCHPOV^AMERPCC2(AMERDA,AMERPCC,AMERPAT,AMERDATE,AMERDOC,AMERCLN)
  1. Q
  1. ;
  1. SAVPCCA(AMERPCC,AMERDFN) ; EP FROM AMER WHEN AN ADMISSION AND PCC VISIT HAS JUST BEEN CREATED
  1. ; UPDATES THE ER ADMISSION FILE WITH THE PCC VISIT IEN ASSOCIATED WITH IT
  1. ; INPUT AMERPCC - THE IEN OF THE PCC VISIT
  1. ; AMERDFN - THE IEN OF THE PATIENT
  1. N DIE,DA,DR
  1. S DR="1.1////"_AMERPCC
  1. S DIE="^AMERADM(",DA=AMERDFN
  1. L +^FILE(9009081):2
  1. I $T D
  1. .D ^DIE
  1. .L -^FILE(9009081)
  1. .Q
  1. E D EN^DDIOL("Unable to update ER ADMISSION file","","!!")
  1. Q
  1. SAVPCCO(AMERPCC,AMERDA) ; EP FROM AMER CHANGPAT^AMERVSIT
  1. ; WHEN AN ADMISSION AND PCC VISIT HAS JUST BEEN CREATED OR WHEN PATIENT IS BEING CHANGED AND A NEW PCC VISIT IS CREATED
  1. ; UPDATES THE ER ADMISSION FILE WITH THE PCC VISIT IEN ASSOCIATED TO IT
  1. ; INPUT AMERPCC - THE IEN OF THE PCC VISIT FILE ENTRY
  1. ; AMERDATE - THE DATE/TIME OF ADMISSION
  1. N DIE,DA,DR
  1. S DR=".03////"_AMERPCC
  1. S DIE="^AMERVSIT(",DA=AMERDA
  1. L +^FILE(9009080):2
  1. I $T D
  1. .D ^DIE
  1. .L -^FILE(9009080)
  1. .Q
  1. E D EN^DDIOL("Unable to update ER VISIT file","","!!")
  1. Q