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

AMERPCC1.m

Go to the documentation of this file.
  1. AMERPCC1 ; IHS/OIT/SCR - SUPPORTING ROUTINES FOR PCC VISIT CREATION AND V PROVIDER EDITING ;
  1. ;;3.0;ER VISIT SYSTEM;**1,2**;FEB 23, 2009
  1. ;
  1. SYNCHPRV(AMERDA,AMERPCC,AMERPAT) ; EP from AMERPCC
  1. ; INPUT
  1. ; AMERDA : IEN OF ER VISIT FILE
  1. ; AMERPCC : IEN OF VISIT FILE being broght in synch
  1. ; AMERPAT : IEN OF PATIENT FILE for selected ER VISIT
  1. N AMERVERR,AMERFND,AMEREVAL,AMERETIM,AMERVPRV
  1. N AMERPROV,AMERTIME,AMERCNT,AMERLIST,AMERCNUM,AMERVIEN
  1. ; This routine updates V PROVIDER entires with provider information in ER VISIT file
  1. ; First get any providers that are in V PROVIDER
  1. K APCLV
  1. S AMERLIST=""
  1. S AMERVERR=$$PCCVF^APCLV(AMERPCC,"PROVIDER","5;13;16")
  1. ; This will return:
  1. ; APCLV(x)=internal value of provider entry^PROVIDER NAME^primary or secondary
  1. ; for each V PROVIDER x in the file for this visit
  1. ; now set the FOURTH piece to the "provider time" and
  1. ; set the FIFTH piece to "status" code for each of these providers
  1. S AMERVPRV=0,AMERVIEN=""
  1. F S AMERVPRV=$O(APCLV(AMERVPRV)) Q:AMERVPRV="" D
  1. .;IHS/OIT/SCR 05.29/09 added "^" to global reference - patch 1 t2 build
  1. .S $P(APCLV(AMERVPRV),U,4)=$P($G(^AUPNVSIT(AMERPCC,12)),U,1) ;The fourth piece is the Provider time
  1. .S $P(APCLV(AMERVPRV),U,5)=$P($G(^AUPNVSIT(AMERPCC,0)),U,5) ;The fifth piece is the provider status - will be null unless this is a consultant for this visit
  1. .; Now add the V PROVIDER ien to the array using a custom lookup
  1. .S AMERVIEN=$$VPRVIEN^AMERVSIT(AMERPCC,$P(APCLV(AMERVPRV),U,1))
  1. .S $P(APCLV(AMERVPRV),U,6)=AMERVIEN ; The sixth piece is the ien of the V PROVIDER file
  1. .Q
  1. ; Now build an array of the providers that exist in ER VISIT
  1. ; time can be imprecise, so send "day" of discharge for discharge provider and discharge nurse
  1. ; and collected times for admitting provider and triage nurse
  1. S X=$P($G(^AMERVSIT(AMERDA,0)),U,1) ; X is the admission date in FM format
  1. D H^%DTC
  1. I $G(%H)'="" D YMD^%DTC
  1. S AMERTIME=$G(X)
  1. ; This is the DATE of admission in FM format
  1. S AMEREVAL(1)=$P($G(^AMERVSIT(AMERDA,6)),U,3) ; DISCHARGE PROVIDER
  1. S AMERETIM(1)=$G(AMERTIME) ; DAY OF ADMIT
  1. I AMEREVAL(1)'="" S AMERLIST=AMEREVAL(1)_"^"
  1. S AMEREVAL(2)=$P($G(^AMERVSIT(AMERDA,6)),U,4) ; DISCHARGE NURSE
  1. S AMERETIM(2)=$G(AMERTIME) ; DAY OF ADMIT
  1. ; IF DISCHARGE PROVIDER AND DISCHARGE NURSE ARE THE SAME, ONLY ADD ONE ENTRY
  1. I AMEREVAL(1)=AMEREVAL(2) S AMEREVAL(2)="",AMERETIM(2)=""
  1. I AMEREVAL(2)'="" S AMERLIST=AMERLIST_AMEREVAL(2)_"^"
  1. S AMEREVAL(3)=$P($G(^AMERVSIT(AMERDA,0)),U,6) ; ADMITTING PROVIDER
  1. S AMERETIM(3)=$P($G(^AMERVSIT(AMERDA,12)),U,1) ; ADMITTING PROVIDER TIME
  1. ; IF discharge provider is same as admitting provider, only add one entry
  1. I AMEREVAL(1)=AMEREVAL(3) S AMEREVAL(3)=""
  1. I AMEREVAL(3)'="" S AMERLIST=AMERLIST_AMEREVAL(3)_"^"
  1. ; If triage nurse is same as discharge provider , only add one entry
  1. I AMEREVAL(2)=AMEREVAL(3) S AMEREVAL(3)=""
  1. S AMEREVAL(4)=$P($G(^AMERVSIT(AMERDA,0)),U,7) ; TRIAGE NURSE
  1. S AMERETIM(4)=$P($G(^AMERVSIT(AMERDA,12)),U,2) ; TRIAGE NURSE TIME
  1. ; If discharge provider is same as traige nurse, only add once
  1. I AMEREVAL(1)=AMEREVAL(4) S AMEREVAL(4)=""
  1. ; If discharge nurse is same as triage nurse, only add once
  1. I AMEREVAL(2)=AMEREVAL(4) S AMEREVAL(4)=""
  1. ; If admitting provider is same as triage nurse, only add once
  1. I AMEREVAL(3)=AMEREVAL(4) S AMEREVAL(4)=""
  1. I AMEREVAL(4)'="" S AMERLIST=AMERLIST_AMEREVAL(4)_"^"
  1. ; If there are ER CONSULTANTS add them to the ER PROVIDER array
  1. I ($G(^AMERVSIT(AMERDA,19,0))'="") D
  1. .S AMERCNUM=0
  1. .F AMERCNT=5:1 S AMERCNUM=$O(^AMERVSIT(AMERDA,19,AMERCNUM)) Q:(AMERCNUM="B"!(AMERCNUM="")) D
  1. ..; If provider already exists in provider list, don't add it again
  1. ..S AMERFND=0
  1. ..F AMERI=1:1 S AMERPROV=$P(AMERLIST,U,AMERI) Q:(AMERPROV=""!(AMERFND=1)) D
  1. ...I AMERPROV=$P($G(^AMERVSIT(AMERDA,19,AMERCNUM,0)),U,3) S AMERFND=1
  1. ...Q
  1. ..Q:AMERFND
  1. ..S AMEREVAL(AMERCNT)=$P($G(^AMERVSIT(AMERDA,19,AMERCNUM,0)),U,3) ; ER CONSULTANT NEW PERSON
  1. ..S AMERETIM(AMERCNT)=$P($G(^AMERVSIT(AMERDA,19,AMERCNUM,0)),U,2)
  1. ..S AMERLIST=AMERLIST_AMEREVAL(AMERCNT)_"^"
  1. ..Q
  1. .Q
  1. D VPRVUPDT
  1. K APCLV
  1. Q
  1. VPRVUPDT ;
  1. ; For each ER Provider, check to see if an entry has been made in V PROVIDER
  1. ; - If entry has been made:
  1. ; -- Compare data and update if needed
  1. ; -- Remove this provider from local array of V providers
  1. ; - If entry has not been made
  1. ; -- add V PROVIDER entry
  1. ; For each remaining V PROVIDER in local array ASK if user wants remove entry from V PROVIDER
  1. N AMERFND,AMERPROV,AMERVPRV,AMERVDR,AMERVIEN,AMERDR,AMERVINT,AMERVNAM,AMEREINT,AMERENAM
  1. S (AMERFND,AMERPROV,AMERVPRV)=0
  1. S (AMERVDR,AMERVIEN)=""
  1. F S AMERPROV=$O(AMEREVAL(AMERPROV)) Q:AMERPROV="" D
  1. .;I $G(AMEREVAL(AMERPROV))="" S AMERFND=1 Q ;IHS/OIT/SCR 10/14/09 patch 2 beta1
  1. .S AMERFND=0 ; Flag set to 1 if provider is later found in V PROVIDER file
  1. .Q:AMEREVAL(AMERPROV)="" ; If there is no unique information for this provider type, quit
  1. .F S AMERVPRV=$O(APCLV(AMERVPRV)) Q:AMERVPRV="" D
  1. ..I $P(AMEREVAL(AMERPROV),U,1)=$P(APCLV(AMERVPRV),U,1) D ; If we have found a match, update if needed
  1. ...S AMERFND=1
  1. ...; First ask user if they want update PCC discharge provider as "primary" if it isn't already
  1. ...I (AMERPROV=1&($P(APCLV(AMERVPRV),U,2)="P")) D
  1. ....;IHS/OIT/SCR 12/29/08 ask before overwriting PCC
  1. ....D EN^DDIOL("**The value for PRIMARY PROVIDER in the PCC visit file is different from ERS DISCHARGE PROVIDER**","","!!?3")
  1. ....D EN^DDIOL("PCC VISIT PRIMARY PROVIDER: "_$P($G(APCLV(AMERVPRV)),U,1))
  1. ....D EN^DDIOL("ERS DISCHARGE PROVIDER: "_AMEREVAL(2))
  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. .....;UPDATE ERS DISCHARGE PROVIDER WITH THE PCC PRIMARY PROVIDER
  1. .....S AMERNEW=$P($G(APCLV(AMERVPRV)),U,1)
  1. .....S:AMERNEW'="" AMERDR="6.3////"_AMERNEW
  1. .....D:AMERDR'="" DIE^AMEREDIT(AMERDA,AMERDR)
  1. .....S AMEREVAL(1)=AMERNEW
  1. .....Q
  1. ....I AMERANS=1 D
  1. .....S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:"")
  1. .....S AMERVDR=AMERVDR_".04///"_"P"
  1. .....S AMERVIEN=$P(APCLV(AMERVPRV),U,6)
  1. .....Q
  1. ....Q ; IF THIS IS THE PCC PRIMARY PROVIDER
  1. ...;If V PROVIDER is NOT marked secondary and is not the ER DISCHARGE provider, mark this provider "secondary"
  1. ...I $P(APCLV(AMERVPRV),U,3)'="S" D
  1. ....Q:AMERPROV=1
  1. ....S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:"")
  1. ....S AMERVDR=AMERVDR_".04///"_"S"
  1. ....S AMERVIEN=$P(APCLV(AMERVPRV),U,6)
  1. ....Q
  1. ...;Update V PROVIDER time, if different from day of admit
  1. ...I $P(APCLV(AMERVPRV),U,4)'=AMERTIME D
  1. ....S AMERVDR=$S(AMERVDR'="":AMERVDR_";",1:"")
  1. ....S AMERVDR=AMERVDR_"1201///"_AMERTIME
  1. ....S AMERVIEN=$P(APCLV(AMERVPRV),U,6)
  1. ....Q
  1. ...D:AMERVIEN'="" VPRVDIE^AMERVSIT(AMERVIEN,AMERVDR)
  1. ...K:$G(AMERVPRV)'="" APCLV(AMERVPRV) ; Remove this provider from local array
  1. ...S (AMERVDR,AMERVIEN)=""
  1. ...Q
  1. ..Q
  1. .I AMERFND=0 D ; Add this provider if it isn't there already
  1. ..I AMERPROV=1 D
  1. ...S AMERVINT=$$PRIMPROV^APCLV(AMERPCC,"I") ;RETURNS ONE PCC PRIMARY PROVIDER
  1. ...S AMERANS=1 ;DEFAULTING TO ADD ERS PROVIDER IF THERE ARE NO PCC PROVIDERS THERE
  1. ...S AMERVNAM=""
  1. ...S:AMERVINT'="" AMERVNAM=$P($G(^VA(200,AMERVINT,0)),"^",1)
  1. ...S AMEREINT=AMEREVAL(AMERPROV)
  1. ...S AMERENAM=$P($G(^VA(200,AMEREINT,0)),"^",1)
  1. ...I AMERVINT'="" D
  1. ....D EN^DDIOL("**The value for PRIMARY PROVIDER in the PCC visit file is different from ERS DISCHARGE PROVIDER**","","!!?3")
  1. ....D EN^DDIOL("PCC VISIT PRIMARY PROVIDER: "_AMERVNAM,"","!!?3")
  1. ....D EN^DDIOL("ERS DISCHARGE PROVIDER: "_AMERENAM,"","!!?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. ....I Y=""!(Y="^") S AMERANS=2
  1. ....E S AMERANS=+Y
  1. ....Q
  1. ...I AMERANS=2 D
  1. ....;UPDATE ERS DISCHARGE PROVIDER WITH THE PCC PRIMARY PROVIDER
  1. ....D SYNCHERD^AMERERS(AMERDA,AMERPCC)
  1. ....S AMEREVAL(1)=AMERVINT
  1. ....S AMERVPRV=""
  1. ....F S AMERVPRV=$O(APCLV(AMERVPRV)) Q:AMERVPRV="" K:$P(APCLV(AMERVPRV),"^",1)=AMERVINT APCLV(AMERVPRV)
  1. ....Q
  1. ...I AMERANS=1 D
  1. ....;DELETE THE OLD PRIMARY PROVIDER IF IT IS THERE AND REPLACE IT WITH THE ERS PRIMARY PROVIDER
  1. ....F S AMERVPRV=$O(APCLV(AMERVPRV)) Q:AMERVPRV=""!(AMERVINT="") D
  1. .....I ($P(APCLV(AMERVPRV),U,1)=AMERVINT) D
  1. ......S AMERVIEN=$P(APCLV(AMERVPRV),U,6)
  1. ......D DELVPRV^AMERVSIT(AMERVIEN)
  1. ......Q
  1. .....Q
  1. ....I $$ADDPRV(AMERPCC,AMEREVAL(AMERPROV),AMERETIM(AMERPROV),AMERPAT,"P","")<1 D EN^DDIOL("UNABLE TO ADD PRIMARY V PROVIDER","","!!")
  1. ....E D EN^DDIOL("** PRIMARY V PROVIDER ADDED TO PCC VISIT **","","!!?3")
  1. ....Q ;IF AMER ANS=1
  1. ...Q ;IF THIS IS ERS PRIMARY PROVIDER
  1. ..I 2<=AMERPROV&(AMERPROV<=4) D ;IF THIS IS NOT THE ERS PRIMARY PROVIDER
  1. ...;IHS/OIT/SCR 10/14/09 patch 2 beta1 QUIT IF THIS PROVIDER ALREADY EXISTS IN THE PCC V PROV FILE
  1. ...S AMERFND=0
  1. ...F S AMERVPRV=$O(APCLV(AMERVPRV)) Q:AMERVPRV="" D
  1. ....I ($P(APCLV(AMERVPRV),"^",1)=AMEREVAL(AMERPROV)) S AMERFND=1
  1. ....Q
  1. ...Q:AMERFND ;ADD PROVIDER ONLY IF IT WASN'T FOUND IN THE PCC V PROVIDER ARRAY
  1. ...I $$ADDPRV(AMERPCC,AMEREVAL(AMERPROV),AMERETIM(AMERPROV),AMERPAT,"S","")<1 D EN^DDIOL("UNABLE TO ADD SECONDARY V PROVIDER","","!!")
  1. ...E D EN^DDIOL("** SECONDARY V PROVIDER ADDED TO PCC VISIT **","","!!?3")
  1. ..I AMERPROV>4 D ; Add Consultants with status of "C"
  1. ...I $$ADDPRV(AMERPCC,AMEREVAL(AMERPROV),AMERETIM(AMERPROV),AMERPAT,"S","C")<1 D EN^DDIOL("UNABLE TO ADD CONSULTANT V PROVIDER","","!!")
  1. ...E D EN^DDIOL("** SECONDARY CONSULTANT V PROVIDER ADDED TO PCC VISIT **","","!!?3")
  1. ..;K:$G(AMERVPRV)'="" APCLV(AMERVPRV)
  1. ..Q ;IF THE PROVIDER WASN'T FOUND
  1. .Q
  1. ; All ER PROVIDERS should now be in V PROVIDER file
  1. ; Now remove all V PROVIDER entries for providers still exiting in local V PROVIDER array
  1. S AMERVINT=$$PRIMPROV^APCLV(AMERPCC,"I") ;RETURNS ONE PCC PRIMARY PROVIDER
  1. F S AMERVPRV=$O(APCLV(AMERVPRV)) Q:AMERVPRV="" D
  1. .;Q:APCLV(AMERVPRV)=AMERVINT ;DONT ASK TO REMOVE THE ENTRY WE JUST ADDED TO ERS
  1. .;IHS/OIT/SCR 10/14/09 patch 2 beta1 - don't ask to remove a provider that is part of this visit
  1. .Q:($P(APCLV(AMERVPRV),"^",1)=AMEREVAL(1))!($P(APCLV(AMERVPRV),"^",1)=AMEREVAL(2))!($P(APCLV(AMERVPRV),"^",1)=AMEREVAL(3))!($P(APCLV(AMERVPRV),"^",1)=AMEREVAL(4))
  1. .D EN^DDIOL("**The following V PROVIDER entry is not represented in the ERS Visit**","","!!?3")
  1. .D EN^DDIOL("PCC VISIT PROVIDER: "_$P(APCLV(AMERVPRV),U,2))
  1. .S DIR(0)="SO^1:REMOVE THIS PCC V PROVIDER ENTRY;2:KEEP THIS PCC VISIT V PROVIDER ENTRY"
  1. .S DIR("A")="Which would you like to do"
  1. .D ^DIR K DIR
  1. .S AMERANS=+Y
  1. .I Y=1 D
  1. ..S AMERVIEN=$P(APCLV(AMERVPRV),U,6)
  1. ..D DELVPRV^AMERVSIT(AMERVIEN)
  1. ..D EN^DDIOL("** V PROVIDER ENTRY DELETED **","","!!?3")
  1. ..Q
  1. .Q
  1. Q
  1. ADDPRV(AMERPCC,AMERPIEN,AMERTIME,AMERDFN,AMERTYPE,AMERSTAT) ; EP FROM AMERPCC
  1. ; ADD AN ENTRY TO V PROVIDER
  1. ; INPUT:
  1. ; AMERPCC - VISIT IEN
  1. ; AMERPIEN - PROVIDIER IEN
  1. ; AMERTIME - TIME OF PROVIDER
  1. ; AMERDFN - PATIENT IEN
  1. K APCDALVR,APCDAFLE
  1. I 'AMERPCC>0 Q 0 ; INVALID VISIT IEN
  1. I 'AMERPIEN>0 Q 0 ; INVALID PROVIDER IEN
  1. I 'AMERDFN>0 Q 0 ; INVALID PATIENT IEN
  1. I $G(AMERTYPE)'="P" S AMERTYPE="S"
  1. S APCDALVR("APCDTPRO")="`"_AMERPIEN ; PROVIDER IEN
  1. S APCDAFLE("APCDAFLE")="9000010.06"
  1. S APCDALVR("APCDPAT")=AMERDFN ; PATIENT IEN
  1. S APCDALVR("APCDVSIT")=AMERPCC ; VISIT IEN
  1. S APCDALVR("APCDTCDT")=AMERTIME ; PROVIDER TIME
  1. I AMERSTAT="C" S APCDALVR("APCDTOA")="C"
  1. E S APCDALVR("APCDTOA")=""
  1. S APCDALVR("APCDTPS")=AMERTYPE
  1. S APCDALVR("APCDATMP")="[APCDALVR 9000010.06 (ADD)]"
  1. D EN^APCDALVR
  1. D MOD^AUPNVSIT ; Update VISIT file with last edit when a provider is added
  1. K APCDLVR,APCDTPRO,APCDAFLE,APCDPAT,APCDVSIT,APCDTCDT,APCDTOA,APCDTPS,APCDATMP
  1. Q 1
  1. PRVTHERE(AMERPRVD,AMERPCC) ;EP FROM AMERPCC1
  1. ;IHS/OIT/SCR 12/16/08 - check to see if the provider you are about to add is already in the PCC visit
  1. ;INPUT: AMERPRVD - PROVIDER IEN
  1. ; AMERPCC = VISIT FILE ien for this visit
  1. N AMERCHCK,AMERDONE,AMERERR,AMERINDX
  1. K APCLV
  1. Q:$G(AMERPCC)=""
  1. S AMERERR=$$PCCVF^APCLV(AMERPCC,"PROVIDER",5) ;SPECIFYING THE INTERNAL PROVIDER ID
  1. I 'AMERERR D
  1. .S AMERINDX=0,AMERDONE=0,AMERCHCK=0
  1. .F S AMERINDX=$O(APCLV(AMERINDX)) Q:AMERDONE D
  1. ..I AMERINDX="" S AMERDONE=1 Q
  1. ..S AMERIEN=$G(APCLV(AMERINDX))
  1. ..S AMERCHCK=(AMERIEN=AMERPRVD)
  1. ..I AMERCHCK S AMERDONE=1
  1. ..Q
  1. K APCLV
  1. Q AMERCHCK
  1. GETPCCPV(AMERPCC) ; EP FROM AMERD AND OTHER ROUTINES
  1. ;IHS/OIT/SCR 12/18/08
  1. ;RETURNS AN ARRAY OF PCC V PROVIDER FILE INFORMATION THAT ERS SHARES
  1. ;S AMERPCCV=$$VDTM^APCLV(AMERPCC,"I") ; PIECE 1 IS THE TIMESTAMP IN THE VISIT
  1. ;S AMERPCCV=AMERPCCV_"^"_$$PATIENT^APCLV(AMERPCC,"I") ; PIECE 2 IS THE PATIENT IEN
  1. N AMERPRVS,AMERINDX
  1. S AMERPRVS=""
  1. K APCLV
  1. S AMERERR=$$PCCVF^APCLV(AMERPCC,"PROVIDER","5;13;16") ;PROVIDER IEN;PROVIDER NAME;PRIMARY/SECONDARY
  1. S AMERINDX=""
  1. F S AMERINDX=$O(APCLV(AMERINDX)) Q:AMERINDX="" D
  1. .S AMERPRVS=AMERPRVS_APCLV(AMERINDX)_"~"
  1. .Q
  1. K APCLV
  1. Q AMERPRVS