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

BHLPIDI.m

Go to the documentation of this file.
BHLPIDI ; cmi/flag/maw - BHL Process Inbound PID Segment ;
 ;;3.01;BHL IHS Interfaces with GIS;**1**;JUN 01, 2002
 ;
 ;this routine will process the inbound PID segment
 ;
MAIN ;-- this is the main routine driver
 D CHKPAT I $D(BHLERR("FATAL")) L -^TMP("BHL",BHLPHR) Q
 D PROCESS,EOJ
 Q
 ;
PROCESS ;-- process the segment
 S BHLDA=0 F  S BHLDA=$O(@BHLTMP@(BHLDA)) Q:BHLDA=""  D
 . S BHLMMN=$$HLPN^INHUT($G(@BHLTMP@(BHLDA,6)),CS)
 . S BHLAL=$G(@BHLTMP@(BHLDA,9))
 . S BHLST1=$P(@BHLTMP@(BHLDA,11),CS,1)
 . S BHLST2=$P(@BHLTMP@(BHLDA,11),CS,2)
 . S BHLCTY=$P(@BHLTMP@(BHLDA,11),CS,3)
 . S BHLST=$P(@BHLTMP@(BHLDA,11),CS,4)
 . S BHLST=$S(BHLST'="":$O(^DIC(5,"C",BHLST,0)),1:"")
 . S BHLZIP=$P(@BHLTMP@(BHLDA,11),CS,5)
 . S BHLCTRY=$P(@BHLTMP@(BHLDA,11),CS,6)
 . S BHLHPH=$G(@BHLTMP@(BHLDA,13))
 . S BHLWPH=$G(@BHLTMP@(BHLDA,14))
 . S BHLREL=$G(@BHLTMP@(BHLDA,17))
 . S BHLACCT=$G(@BHLTMP@(BHLDA,18))
 . ;I BHLREL'="" S BHLREL=$S($O(^DIC(13,"MT",BHLREL,0)):$O(^DIC(13,"MT",BHLREL,0)),1:"") this will be used to convert religion if not rpms compat
 . S BHLVMS=$P($G(@BHLTMP@(BHLDA,27)),CS)
 . S BHLDDT=$$HDATE^INHUT($G(@BHLTMP@(BHLDA,29)))
 . S BHLDI=$G(@BHLTMP@(BHLDA,30))
 . I '$O(BHL("ZP2",0)) D REGUP^BHLZP2I
 S BHLFL=2,BHLX=BHLPAT
 S BHLFLD=.2403,BHLVAL=BHLMMN X BHLDIE
 S BHLFLD=.111,BHLVAL=BHLST1 X BHLDIE
 S BHLFLD=.112,BHLVAL=BHLST2 X BHLDIE
 S BHLFLD=.114,BHLVAL=BHLCTY X BHLDIE
 S BHLFLD=.115,BHLVAL=BHLST X BHLDIE
 S BHLFLD=.116,BHLVAL=BHLZIP X BHLDIE
 S BHLFLD=.131,BHLVAL=BHLHPH X BHLDIE
 S BHLFLD=.132,BHLVAL=BHLWPH X BHLDIE
 S BHLFLD=.08,BHLVAL=BHLREL X BHLDIE
 S BHLFLD=1901,BHLVAL=BHLVMS X BHLDIE
 S BHLFLD=.351,BHLVAL=BHLDDT X BHLDIE
 S ^AGPATCH($$NOW,DUZ(2),BHLPAT)=""
 Q
 ;
CHKPAT ;EP - check the patient by their identifiers
 D PRS3
 Q
 ;
PRS3 ;-- parse sequence 3
 S BHLDA=$O(@BHLTMP@(0)) ;there is only one PID
 S BHLPHR=+$E($P(@BHLTMP@(BHLDA,3),U),7,12)
 L +^TMP("BHL",BHLPHR):60
 I '$T S BHLERCD="NOLOCK" X BHLERR Q
 S BHLASU=$E($P(@BHLTMP@(BHLDA,3),U),1,6)
 S BHLLOC=$O(^AUTTLOC("C",+BHLASU,0))
 I BHLLOC="" S BHLERCD="NOLOC" X BHLERR
 Q:$D(BHLERR("FATAL"))
 S BHLDUZ=BHLLOC
 S BHLXDA=0 F  S BHLXDA=$O(^AUPNPAT("D",BHLPHR,BHLXDA)) Q:'BHLXDA!($G(BHLPAT))  D
 . S BHLYDA=0 F  S BHLYDA=$O(^AUPNPAT("D",BHLPHR,BHLXDA,BHLYDA)) Q:'BHLYDA!($G(BHLPAT))  I BHLYDA=BHLDUZ S BHLPAT=BHLXDA
 I '$G(BHLPAT) D SSNC Q
 Q:$D(BHLERR("FATAL"))
 I '$G(BHLPAT) D ADDPAT Q
 D OCHKS
 Q
 ;
PRS4 ;-- parse sequence 4
 Q  ;not currently used unless site wants to look at other facility num
 S BHLPID4=$G(@BHLTMP@(BHLDA,4))
 I BHLPID4="" D ADDPAT Q
 F I=1:1 S BHLPID4(I)=$P(@BHLTMP@(BHLDA,4),RS,I) Q:'$P(@BHLTMP@(BHLDA,4),RS,I)
 S BHL4DA=0 F  S BHL4DA=$O(BHLPID4(BHL4DA)) Q:'BHL4DA!($G(BHLPAT))  D
 . Q:'$G(BHLPID4(BHL4DA))
 . Q:$L($G(BHLPID4(BHL4DA)))'=12
 . S BHLPHR=+$E($P(BHLPID4(BHL4DA),U),7,12)
 . S BHLASU=$E($P(BHLPID4(BHL4DA),U),1,6)
 . S BHLLOC=$O(^AUTTLOC("C",BHLASU,0))
 . Q:BHLLOC=""
 . S BHLDUZ=BHLLOC
 . S BHLXDA=0 F  S BHLXDA=$O(^AUPNPAT("D",BHLPHR,BHLXDA)) Q:'BHLXDA!($G(BHLPAT))  D
 .. S BHLYDA=0 F  S BHLYDA=$O(^AUPNPAT("D",BHLPHR,BHLXDA,BHLYDA)) Q:'BHLYDA!($G(BHLPAT))  I BHLYDA=BHLDUZ S BHLPAT=BHLXDA
 . I '$G(BHLPAT) D SSNC Q
 . Q:$D(BHLERR("FATAL"))
 . I '$G(BHLPAT) D ADDPAT Q
 . Q:BHLPAT=""
 . D OCHKS
 . Q:$G(BHLPAT)
 Q:$D(BHLERR("FATAL"))
 Q
 ;
SSNC ;-- check for ssn, dob, sex match
 S BHLSSN=$G(@BHLTMP@(BHLDA,19))
 I BHLSSN["-" S BHLSSN=$TR(BHLSSN,"-")
 I BHLSSN="" S BHLERCD="NOSSN" X BHLERR Q
 S BHLDOB=$$HDATE^INHUT($G(@BHLTMP@(BHLDA,7)))
 I BHLDOB="" S BHLERCD="NODOB" X BHLERR Q
 S BHLSX=$G(@BHLTMP@(BHLDA,8))
 I BHLSX="" S BHLERCD="NOSX" X BHLERR Q
 S BHLNM=$$HLPN^INHUT($G(@BHLTMP@(BHLDA,5)),CS)
 S BHLTPAT=$O(^DPT("SSN",BHLSSN,0))
 I BHLTPAT="" S BHLERCD="NOSSN" X BHLERR Q
 I $P(^DPT(BHLTPAT,0),U,3)'=BHLDOB S BHLERCD="NODOBM" X BHLERR Q
 I $P(^DPT(BHLTPAT,0),U,2)'=BHLSX S BHLERCD="NOSXM" X BHLERR Q
 S BHLPAT=BHLTPAT
 D CHT
 Q
 ;
OCHKS ;check sex, ssn, and dob
 S BHLDOB=$$HDATE^INHUT($G(@BHLTMP@(BHLDA,7)))
 I BHLDOB="" S BHLERCD="NODOB" X BHLERR Q
 S BHLSX=$G(@BHLTMP@(BHLDA,8))
 I BHLSX="" S BHLERCD="NOSX" X BHLERR Q
 S BHLSSN=$G(@BHLTMP@(BHLDA,19))
 I BHLSSN["-" S BHLSSN=$TR(BHLSSN,"-")
 I BHLSSN="" S BHLERCD="NOSSN" X BHLERR
 S BHLNM=$$HLPN^INHUT($G(@BHLTMP@(BHLDA,5)),CS)
 I $P(^DPT(BHLPAT,0),U,3)'=BHLDOB S BHLERCD="NODOBM" X BHLERR Q
 I $P(^DPT(BHLPAT,0),U,2)'=BHLSX S BHLERCD="NOSXM" X BHLERR Q
 I BHLSSN'="" D  Q:$G(BHLERR("FATAL"))
 . I $P(^DPT(BHLPAT,0),U,9)'=BHLSSN S BHLERCD="NOSSNM" X BHLERR Q
 Q
 ;
ADDPAT ;-- add a patient to the system
 S BHLDOB=$$HDATE^INHUT($G(@BHLTMP@(BHLDA,7)))
 I BHLDOB="" S BHLERCD="NODOB" X BHLERR Q
 S BHLSX=$G(@BHLTMP@(BHLDA,8))
 I BHLSX="" S BHLERCD="NOSX" X BHLERR Q
 S BHLSSN=$G(@BHLTMP@(BHLDA,19))
 I BHLSSN="" S BHLERCD="NOSSN" X BHLERR
 S BHLNM=$$HLPN^INHUT($G(@BHLTMP@(BHLDA,5)),CS)
 K DIC,DR,DA,DIADD,DLAYGO
 S X=BHLNM,DIC(0)="L",DIADD=2,DLAYGO=2,DIC="^DPT(" D ^DIC
 I Y<0 S BHLERCD="NOADDPT" X BHLERR Q
 S BHLPAT=+Y
 K DIC,DIADD,DLAYGO,DR,DA
 S BHLFL=2,BHLFLD=.02,BHLX=BHLPAT,BHLVAL=BHLSX X BHLDIE
 I $D(Y) D CLEAN Q
 S BHLFLD=.03,BHLVAL=BHLDOB X BHLDIE
 I $D(Y) D CLEAN Q
 S BHLFLD=.09,BHLVAL=BHLSSN X BHLDIE
 S ^AUPNPAT(BHLPAT,0)=BHLPAT,^AUPNPAT("B",BHLPAT,BHLPAT)=""
 S BHLFL=9000001,BHLFLD=.02,BHLVAL=DT X BHLDIE
 S ^AGPATCH($$NOW,DUZ(2),BHLPAT)="NEW"
 D CHT
 Q
 ;
CLEAN ;-- clean up file 2
 S BHLERCD="NOF2UP" X BHLERR
 S DA=BHLPAT,DIK="^DPT(" D ^DIK
 K ^AUPNPAT(BHLPAT),^AUPNPAT("B",BHLPAT,BHLPAT)
 Q
 ;
EOJ ;-- kill variables
 L -^TMP("BHL",BHLPHR)
 K @BHLTMP
 K BHLDA,BHLVAL,BHLFL,BHLFLD,BHLDR,BHLMMN,BHLSX,BHLSSN,BHLDOB
 K BHLST1,BHLST2,BHLCTY,BHLST,BHLZIP,BHLREL,BHLHPH,BHLWPH,BHLDDT,BHLCTRY
 K BHLX,BHLVMS,BHL4DA
 Q
 ;
CHT ;-- add the chart number
 Q  ;this is used if the site wants to create an auto chart #
 S:'$D(^AUPNPAT(BHLPAT,41,0)) ^AUPNPAT(BHLPAT,41,0)="^9000001.41IP^^"
 K DIC,DR S X=$P(^DIC(4,DUZ(2),0),U)
 S DIC="^AUPNPAT("_BHLPAT_",41,",DA(1)=BHLPAT,DIC(0)="ML" D ^DIC
 S DIE="^AUPNPAT("_BHLPAT_",41,",DA=DUZ(2)
 S DA(1)=BHLPAT,DR=".02///"_BHLPHR
 D ^DIE
 K DA,DIE,DR
 Q
 ;
NOW() ;-- get now
 D NOW^%DTC
 Q %
 Q
 ;