BHLPV1I ; cmi/flag/maw - BHL Process Inbound PV1 Segment ;
;;3.01;BHL IHS Interfaces with GIS;**1**;JUN 01, 2002
;
;this routine will file the inbound PV1 segment, it will also
;create a visit from the information contained in the segment
;we will not modify visits via hl7
;
MAIN ;-- this is the main routine driver
D FILE,EOJ
Q
;
FILE ;-- get the data and file it
S BHLDA=0 F S BHLDA=$O(@BHLTMP@(BHLDA)) Q:BHLDA=""!(BHLDA>1) D
. S BHLAPLL=$P($G(@BHLTMP@(BHLDA,3)),CS)
. I BHLAPLL="" S BHLAPLL=$G(@BHLTMP@(BHLDA,39))
. S BHLAPLL=$O(^AUTTLOC("B",BHLAPLL,0))
. S (BHLOI,BHLCLN)=$P($G(@BHLTMP@(BHLDA,3)),CS,2)
. S BHLADMT="DIRECT"
. ;S BHLATD=$P($G(@BHLTMP@(BHLDA,7)),CS) ; if provider code is passed
. S BHLATD=$P($G(@BHLTMP@(BHLDA,7)),CS,2)
. ;I BHLATD'="" S BHLATD=$O(^DIC(6,"GIHS",BHLATD,0)) if prv code is passed
. ;I BHLATD'="" S BHLATD=$$VAL^XBDIQ1(6,BHLATD,.01) ;if name
. S BHLCDT=$G(@BHLTMP@(BHLDA,9))
. S BHLTVIEN=$G(@BHLTMP@(BHLDA,19)) ;visit ien
. I BHLTVIEN'="" D
.. S BHLVERR=$$VSTCHK(BHLTVIEN)
. I $G(BHLVERR) S BHLERCD="NOVMTCH" X BHLERR Q
. S BHLDD=$G(@BHLTMP@(BHLDA,36))
. I BHLDD'="" S BHLDD=$$VAL^XBDIQ1(405.1,BHLDD,.01)
. S BHLADTM=$G(@BHLTMP@(BHLDA,44))
. S %DT="TX",X=BHLADTM D ^%DT S BHLADTM=Y
. S BHLDDTM=$G(@BHLTMP@(BHLDA,45))
. S %DT="TX",X=BHLDDTM D ^%DT S BHLDDTM=Y
. S BHLDADS=$G(@BHLTMP@(BHLDA,10))
. S BHLDADS=$S(BHLDADS'="":$O(^DIC(45.7,"B",BHLDADS,0)),1:"")
. I BHLDADS'="" S BHLDADS=$$VAL^XBDIQ1(45.7,BHLDADS,.01)
. S BHLDDDS=$G(@BHLTMP@(BHLDA,10))
. S BHLDDDS=$S(BHLDDDS'="":$O(^DIC(45.7,"B",BHLDDDS,0)),1:"")
. I BHLDDDS'="" S BHLDDDS=$$VAL^XBDIQ1(45.7,BHLDDDS,.01)
. I $O(BHL("ZV1",0)) D FILE^BHLZV1I
. Q:$D(BHLERR("FATAL"))
. I BHLET="A01" D @BHLET
. I BHLET="A03" D @BHLET Q
. I BHLET="A06" D @BHLET
. I BHLET="A08" D @BHLET
. I BHLET="A11" D @BHLET Q
. I BHLAPLL="" S BHLAPLL=DUZ(2)
. S APCDALVR("APCDDATE")=BHLADTM
. S APCDALVR("APCDPAT")=BHLPAT
. S APCDALVR("APCDLOC")=BHLAPLL
. S APCDALVR("APCDCLN")=BHLCLN
. D UP
. Q:$D(BHLERR("FATAL"))
. I $O(BHL("ZV1",0)) D VF^BHLZV1I
. D PRV
Q
;
A01 ;-- this is an A01 event, we need to update as current patient
S BHLCLN=""
S BHLFL=2,BHLFLD=.1,BHLVAL=BHLDWRD,BHLX=BHLPAT X BHLDIE
S BHLDSC="H" ;service category
Q
;use the following if we want observations
I $G(@BHLTMP@(BHLDA,10))="OBSERVATION" D
. S BHLDSC="O"
. S BHLCLN=$O(^DIC(40.7,"B","OBSERVATION",0))
;admitting diagnosis will be in DG1 segment
Q
;
A03 ;-- add v hosp
Q:$G(@BHLTMP@(BHLDA,10))="OBSERVATION"
Q:'$G(APCDALVR("APCDVSIT"))
S APCDALVR("APCDPAT")=BHLPAT
S APCDALVR("APCDLOOK")=BHLDDTM
S APCDALVR("APCDATMP")="[APCDALVR 9000010.02 (ADD)]"
S APCDALVR("APCDTADS")=BHLDADS
S APCDALVR("APCDTDCS")=BHLDDDS
S APCDALVR("APCDTAT")=BHLADMT
S APCDALVR("APCDTDT")=BHLDD
D ^APCDALVR
I $D(APCDALVR("APCDAFLG")) S BHLERCD="NOVHOSP" X BHLERR Q
S BHLFL=2,BHLFLD=.1,BHLVAL="@",BHLX=BHLPAT X BHLDIE
Q
;
A06 ;-- create a hospitalization visit from A06
S BHLCLN=""
S BHLFL=2,BHLFLD=.1,BHLVAL=BHLDWRD,BHLX=BHLPAT X BHLDIE
S BHLDSC="H" ;service category
I $G(@BHLTMP@(BHLDA,10))="OBSERVATION" D
. S BHLDSC="O"
. S BHLCLN=$O(^DIC(40.7,"B","OBSERVATION",0))
Q
;
A08 ;-- just in case they update the patient
I $G(@BHLTMP@(BHLDA,10))="OBSERVATION" D
. S BHLDSC="O"
. S BHLCLN=$O(^DIC(40.7,"B","OBSERVATION",0))
Q
;
A11 ;-- cancel admit for a patient
S AUPNVSIT=$O(^AUPNVSIT("AXT",BHLACCT,0))
Q:AUPNVSIT=""
S BHLPRIEN=$O(^AUPNVPRV("AD",AUPNVSIT,0))
Q:BHLPRIEN=""
S DIK="^AUPNVPRV(",DA=BHLPRIEN D ^DIK
D DEL^AUPNVSIT
Q
;
UP ;-- this is for an all events except for the A03 event
S APCDALVR("APCDTYPE")=BHLDVT
S APCDALVR("APCDCAT")=BHLDSC
D ^APCDALV
I $D(APCDAFLG("ERR")) S BHLERCD="NOVST" X BHLERR Q
S BHLVSIT=APCDALVR("APCDVSIT")
S BHLFL=9000010,BHLFLD=1211,BHLVAL=BHLACCT,BHLX=BHLVSIT X BHLDIE
Q
;
PRV ;-- let's set up the v provider file
D PP
Q:BHLPRV=""
D CHKV
Q:$G(BHLMTCH)
D UPV
Q
;
PP ;-- get the primary provider
S BHLPRV=BHLATD
K BHLMTCH
Q
;
CHKV ;-- check the v provider file
S BHLVDA=0 F S BHLVDA=$O(^AUPNVPRV("AD",BHLVSIT,BHLVDA)) Q:BHLVDA=""!$D(BHLMTCH) D
. S BHLVPRV=$$VAL^XBDIQ1(6,$P(^AUPNVPRV(BHLVDA,0),U),.01)
. I BHLVPRV=BHLPRV S BHLMTCH=1
Q:$D(BHLMTCH)
Q
;
UPV ;-- create the v provider file entry if none exists
S APCDALVR("APCDATMP")="[APCDALVR 9000010.06 (ADD)]"
S APCDALVR("APCDTPRO")=BHLATD
S APCDALVR("APCDTPS")="P"
D ^APCDALVR
I $D(APCDALVR("APCDAFLG")) S BHLERCD="NOVPRV" X BHLERR Q
Q
;
VSTCHK(VIEN) ;-- check the visit information to see if match
I '$D(^AUPNVSIT(VIEN,0)) Q 1
I $P($G(^AUPNVSIT(VIEN,0)),U,5)'=BHLPAT Q 1
I $P($G(^AUPNVSIT(VIEN,0)),U)'=BHLEXVDT Q 1
I $P($G(^AUPNVSIT(VIEN,0)),U,8)'=BHLCLN Q 1
Q 0
;
EOJ ;-- kill variables and quit
K @BHLTMP
K BHLAPL,BHLADMT,BHLATD,BHLCDT,BHLDD,BHLDTL,BHLADTM,BHLDDTM,BHLTPB
K BHLCL,BHLWIA,BHLLVOS,BHLELG,BHLAB,BHLDDS,BHLOL,BHLADS,BHLNOC
K BHLMREL,BHLAOB,BHLAN,BHLAF,BHLTC,BHLSB,BHLNOV,BHLHVN,BHLVNDR
K BHLACT,BHLTM,BHLPYS,BHLPRV,BHLVPRV,BHLVDA,BHLPDA,P,BHLCLN
Q
;
BHLPV1I ; cmi/flag/maw - BHL Process Inbound PV1 Segment ;
+1 ;;3.01;BHL IHS Interfaces with GIS;**1**;JUN 01, 2002
+2 ;
+3 ;this routine will file the inbound PV1 segment, it will also
+4 ;create a visit from the information contained in the segment
+5 ;we will not modify visits via hl7
+6 ;
MAIN ;-- this is the main routine driver
+1 DO FILE
DO EOJ
+2 QUIT
+3 ;
FILE ;-- get the data and file it
+1 SET BHLDA=0
FOR
SET BHLDA=$ORDER(@BHLTMP@(BHLDA))
IF BHLDA=""!(BHLDA>1)
QUIT
Begin DoDot:1
+2 SET BHLAPLL=$PIECE($GET(@BHLTMP@(BHLDA,3)),CS)
+3 IF BHLAPLL=""
SET BHLAPLL=$GET(@BHLTMP@(BHLDA,39))
+4 SET BHLAPLL=$ORDER(^AUTTLOC("B",BHLAPLL,0))
+5 SET (BHLOI,BHLCLN)=$PIECE($GET(@BHLTMP@(BHLDA,3)),CS,2)
+6 SET BHLADMT="DIRECT"
+7 ;S BHLATD=$P($G(@BHLTMP@(BHLDA,7)),CS) ; if provider code is passed
+8 SET BHLATD=$PIECE($GET(@BHLTMP@(BHLDA,7)),CS,2)
+9 ;I BHLATD'="" S BHLATD=$O(^DIC(6,"GIHS",BHLATD,0)) if prv code is passed
+10 ;I BHLATD'="" S BHLATD=$$VAL^XBDIQ1(6,BHLATD,.01) ;if name
+11 SET BHLCDT=$GET(@BHLTMP@(BHLDA,9))
+12 ;visit ien
SET BHLTVIEN=$GET(@BHLTMP@(BHLDA,19))
+13 IF BHLTVIEN'=""
Begin DoDot:2
+14 SET BHLVERR=$$VSTCHK(BHLTVIEN)
End DoDot:2
+15 IF $GET(BHLVERR)
SET BHLERCD="NOVMTCH"
XECUTE BHLERR
QUIT
+16 SET BHLDD=$GET(@BHLTMP@(BHLDA,36))
+17 IF BHLDD'=""
SET BHLDD=$$VAL^XBDIQ1(405.1,BHLDD,.01)
+18 SET BHLADTM=$GET(@BHLTMP@(BHLDA,44))
+19 SET %DT="TX"
SET X=BHLADTM
DO ^%DT
SET BHLADTM=Y
+20 SET BHLDDTM=$GET(@BHLTMP@(BHLDA,45))
+21 SET %DT="TX"
SET X=BHLDDTM
DO ^%DT
SET BHLDDTM=Y
+22 SET BHLDADS=$GET(@BHLTMP@(BHLDA,10))
+23 SET BHLDADS=$SELECT(BHLDADS'="":$ORDER(^DIC(45.7,"B",BHLDADS,0)),1:"")
+24 IF BHLDADS'=""
SET BHLDADS=$$VAL^XBDIQ1(45.7,BHLDADS,.01)
+25 SET BHLDDDS=$GET(@BHLTMP@(BHLDA,10))
+26 SET BHLDDDS=$SELECT(BHLDDDS'="":$ORDER(^DIC(45.7,"B",BHLDDDS,0)),1:"")
+27 IF BHLDDDS'=""
SET BHLDDDS=$$VAL^XBDIQ1(45.7,BHLDDDS,.01)
+28 IF $ORDER(BHL("ZV1",0))
DO FILE^BHLZV1I
+29 IF $DATA(BHLERR("FATAL"))
QUIT
+30 IF BHLET="A01"
DO @BHLET
+31 IF BHLET="A03"
DO @BHLET
QUIT
+32 IF BHLET="A06"
DO @BHLET
+33 IF BHLET="A08"
DO @BHLET
+34 IF BHLET="A11"
DO @BHLET
QUIT
+35 IF BHLAPLL=""
SET BHLAPLL=DUZ(2)
+36 SET APCDALVR("APCDDATE")=BHLADTM
+37 SET APCDALVR("APCDPAT")=BHLPAT
+38 SET APCDALVR("APCDLOC")=BHLAPLL
+39 SET APCDALVR("APCDCLN")=BHLCLN
+40 DO UP
+41 IF $DATA(BHLERR("FATAL"))
QUIT
+42 IF $ORDER(BHL("ZV1",0))
DO VF^BHLZV1I
+43 DO PRV
End DoDot:1
+44 QUIT
+45 ;
A01 ;-- this is an A01 event, we need to update as current patient
+1 SET BHLCLN=""
+2 SET BHLFL=2
SET BHLFLD=.1
SET BHLVAL=BHLDWRD
SET BHLX=BHLPAT
XECUTE BHLDIE
+3 ;service category
SET BHLDSC="H"
+4 QUIT
+5 ;use the following if we want observations
+6 IF $GET(@BHLTMP@(BHLDA,10))="OBSERVATION"
Begin DoDot:1
+7 SET BHLDSC="O"
+8 SET BHLCLN=$ORDER(^DIC(40.7,"B","OBSERVATION",0))
End DoDot:1
+9 ;admitting diagnosis will be in DG1 segment
+10 QUIT
+11 ;
A03 ;-- add v hosp
+1 IF $GET(@BHLTMP@(BHLDA,10))="OBSERVATION"
QUIT
+2 IF '$GET(APCDALVR("APCDVSIT"))
QUIT
+3 SET APCDALVR("APCDPAT")=BHLPAT
+4 SET APCDALVR("APCDLOOK")=BHLDDTM
+5 SET APCDALVR("APCDATMP")="[APCDALVR 9000010.02 (ADD)]"
+6 SET APCDALVR("APCDTADS")=BHLDADS
+7 SET APCDALVR("APCDTDCS")=BHLDDDS
+8 SET APCDALVR("APCDTAT")=BHLADMT
+9 SET APCDALVR("APCDTDT")=BHLDD
+10 DO ^APCDALVR
+11 IF $DATA(APCDALVR("APCDAFLG"))
SET BHLERCD="NOVHOSP"
XECUTE BHLERR
QUIT
+12 SET BHLFL=2
SET BHLFLD=.1
SET BHLVAL="@"
SET BHLX=BHLPAT
XECUTE BHLDIE
+13 QUIT
+14 ;
A06 ;-- create a hospitalization visit from A06
+1 SET BHLCLN=""
+2 SET BHLFL=2
SET BHLFLD=.1
SET BHLVAL=BHLDWRD
SET BHLX=BHLPAT
XECUTE BHLDIE
+3 ;service category
SET BHLDSC="H"
+4 IF $GET(@BHLTMP@(BHLDA,10))="OBSERVATION"
Begin DoDot:1
+5 SET BHLDSC="O"
+6 SET BHLCLN=$ORDER(^DIC(40.7,"B","OBSERVATION",0))
End DoDot:1
+7 QUIT
+8 ;
A08 ;-- just in case they update the patient
+1 IF $GET(@BHLTMP@(BHLDA,10))="OBSERVATION"
Begin DoDot:1
+2 SET BHLDSC="O"
+3 SET BHLCLN=$ORDER(^DIC(40.7,"B","OBSERVATION",0))
End DoDot:1
+4 QUIT
+5 ;
A11 ;-- cancel admit for a patient
+1 SET AUPNVSIT=$ORDER(^AUPNVSIT("AXT",BHLACCT,0))
+2 IF AUPNVSIT=""
QUIT
+3 SET BHLPRIEN=$ORDER(^AUPNVPRV("AD",AUPNVSIT,0))
+4 IF BHLPRIEN=""
QUIT
+5 SET DIK="^AUPNVPRV("
SET DA=BHLPRIEN
DO ^DIK
+6 DO DEL^AUPNVSIT
+7 QUIT
+8 ;
UP ;-- this is for an all events except for the A03 event
+1 SET APCDALVR("APCDTYPE")=BHLDVT
+2 SET APCDALVR("APCDCAT")=BHLDSC
+3 DO ^APCDALV
+4 IF $DATA(APCDAFLG("ERR"))
SET BHLERCD="NOVST"
XECUTE BHLERR
QUIT
+5 SET BHLVSIT=APCDALVR("APCDVSIT")
+6 SET BHLFL=9000010
SET BHLFLD=1211
SET BHLVAL=BHLACCT
SET BHLX=BHLVSIT
XECUTE BHLDIE
+7 QUIT
+8 ;
PRV ;-- let's set up the v provider file
+1 DO PP
+2 IF BHLPRV=""
QUIT
+3 DO CHKV
+4 IF $GET(BHLMTCH)
QUIT
+5 DO UPV
+6 QUIT
+7 ;
PP ;-- get the primary provider
+1 SET BHLPRV=BHLATD
+2 KILL BHLMTCH
+3 QUIT
+4 ;
CHKV ;-- check the v provider file
+1 SET BHLVDA=0
FOR
SET BHLVDA=$ORDER(^AUPNVPRV("AD",BHLVSIT,BHLVDA))
IF BHLVDA=""!$DATA(BHLMTCH)
QUIT
Begin DoDot:1
+2 SET BHLVPRV=$$VAL^XBDIQ1(6,$PIECE(^AUPNVPRV(BHLVDA,0),U),.01)
+3 IF BHLVPRV=BHLPRV
SET BHLMTCH=1
End DoDot:1
+4 IF $DATA(BHLMTCH)
QUIT
+5 QUIT
+6 ;
UPV ;-- create the v provider file entry if none exists
+1 SET APCDALVR("APCDATMP")="[APCDALVR 9000010.06 (ADD)]"
+2 SET APCDALVR("APCDTPRO")=BHLATD
+3 SET APCDALVR("APCDTPS")="P"
+4 DO ^APCDALVR
+5 IF $DATA(APCDALVR("APCDAFLG"))
SET BHLERCD="NOVPRV"
XECUTE BHLERR
QUIT
+6 QUIT
+7 ;
VSTCHK(VIEN) ;-- check the visit information to see if match
+1 IF '$DATA(^AUPNVSIT(VIEN,0))
QUIT 1
+2 IF $PIECE($GET(^AUPNVSIT(VIEN,0)),U,5)'=BHLPAT
QUIT 1
+3 IF $PIECE($GET(^AUPNVSIT(VIEN,0)),U)'=BHLEXVDT
QUIT 1
+4 IF $PIECE($GET(^AUPNVSIT(VIEN,0)),U,8)'=BHLCLN
QUIT 1
+5 QUIT 0
+6 ;
EOJ ;-- kill variables and quit
+1 KILL @BHLTMP
+2 KILL BHLAPL,BHLADMT,BHLATD,BHLCDT,BHLDD,BHLDTL,BHLADTM,BHLDDTM,BHLTPB
+3 KILL BHLCL,BHLWIA,BHLLVOS,BHLELG,BHLAB,BHLDDS,BHLOL,BHLADS,BHLNOC
+4 KILL BHLMREL,BHLAOB,BHLAN,BHLAF,BHLTC,BHLSB,BHLNOV,BHLHVN,BHLVNDR
+5 KILL BHLACT,BHLTM,BHLPYS,BHLPRV,BHLVPRV,BHLVDA,BHLPDA,P,BHLCLN
+6 QUIT
+7 ;