[613] | 1 | VEPERI3 ;DAOU/WCJ - Incoming HL7 messages ;10/10/06 15:11
|
---|
| 2 | ;;1.0;VOEB;;Jun 12, 2005
|
---|
| 3 | ;;;VISTA OFFICE/EHR;
|
---|
| 4 | ;;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 5 | ;
|
---|
| 6 | ;**Program Description**
|
---|
| 7 | ; Find patient
|
---|
| 8 | ; Add if not found and addflag set
|
---|
| 9 | Q
|
---|
| 10 | ;
|
---|
| 11 | ; Find the patient's DFN
|
---|
| 12 | ; If patient can not be found, add it or save it off depending on the flag being
|
---|
| 13 | ; passed in
|
---|
| 14 | ;
|
---|
| 15 | FINDPAT(HLP,FE,DFN,NPADDFLG,HLMTIEN) ;
|
---|
| 16 | N NAME,DOB,HRN,ID,SEX,MSHDTTM,%DT,X,RESULT,MBI,SSN
|
---|
| 17 | ;
|
---|
| 18 | S FE=0
|
---|
| 19 | ;
|
---|
| 20 | ; There are some required fields to lookup a patient
|
---|
| 21 | S MSHDTTM=$$GETDATA("MSH",1000,6)
|
---|
| 22 | I MSHDTTM="" D Q
|
---|
| 23 | . S FE=$$FATALERR^VEPERI6(1,"DATA","REQUIRED PATIENT IDENTIFIER - MSH DATE/TIME MISSING",HLMTIEN,.HLP) Q
|
---|
| 24 | ;
|
---|
| 25 | S NAME=$$GETDATA("PID",1000,5)
|
---|
| 26 | I NAME="" D Q
|
---|
| 27 | . S FE=$$FATALERR^VEPERI6(1,"DATA","REQUIRED PATIENT IDENTIFIER - NAME MISSING",HLMTIEN,.HLP) Q
|
---|
| 28 | ;
|
---|
| 29 | S DOB=$$GETDATA("PID",1000,7)
|
---|
| 30 | I DOB="" D Q
|
---|
| 31 | . S FE=$$FATALERR^VEPERI6(1,"DATA","REQUIRED PATIENT IDENTIFIER - DOB MISSING",HLMTIEN,.HLP) Q
|
---|
| 32 | I DOB["/" D Q:FE
|
---|
| 33 | . S %DT="",X=DOB D ^%DT
|
---|
| 34 | . I Y>0 S DOB=Y Q
|
---|
| 35 | . S FE=$$FATALERR^VEPERI6(1,"DATA","REQUIRED PATIENT IDENTIFIER - DOB INVALID",HLMTIEN,.HLP) Q
|
---|
| 36 | ;
|
---|
| 37 | ; This won't be there since we are no longer doing a 2 way interface
|
---|
| 38 | ; S HRN=$$GETDATA("PID",1000,2) ;not required
|
---|
| 39 | S HRN=""
|
---|
| 40 | ;
|
---|
| 41 | S ID=$$GETDATA("PID",1000,3)
|
---|
| 42 | I ID="" D Q
|
---|
| 43 | . S FE=$$FATALERR^VEPERI6(1,"DATA","REQUIRED PATIENT IDENTIFIER - ID MISSING",HLMTIEN,.HLP) Q
|
---|
| 44 | ;
|
---|
| 45 | S SEX=$$GETDATA("PID",1000,8)
|
---|
| 46 | I SEX="" D Q
|
---|
| 47 | . S FE=$$FATALERR^VEPERI6(1,"DATA","REQUIRED PATIENT IDENTIFIER - SEX MISSING",HLMTIEN,.HLP) Q
|
---|
| 48 | ;
|
---|
| 49 | S RESULT=$$LKUP^VEPERIC(HLMTIEN,MSHDTTM,"",DOB,ID,HRN,NAME,SEX)
|
---|
| 50 | ;
|
---|
| 51 | ; -1 is BAD. Error is logged in VEPERIC
|
---|
| 52 | I RESULT=-1 S FE=1 Q
|
---|
| 53 | ;
|
---|
| 54 | ; We have a match
|
---|
| 55 | I +RESULT S DFN=RESULT Q
|
---|
| 56 | ;
|
---|
| 57 | ; Me thinks we have a new patient
|
---|
| 58 | S MBI=$$GETDATA("PID",1000,24) ; multiple birth indicator
|
---|
| 59 | S SSN=$$GETDATA("PID",1000,19) ; social security number
|
---|
| 60 | I RESULT=0 D Q:FE
|
---|
| 61 | .I NPADDFLG D ADDPAT(NAME,DOB,SEX,.DFN,FE,HLMTIEN,.HLP) Q
|
---|
| 62 | .I 'NPADDFLG D SAVEPAT(NAME,DOB,SEX,ID,HLMTIEN,MSHDTTM,.DUZ,FE,.HLP)
|
---|
| 63 | Q
|
---|
| 64 | ;
|
---|
| 65 | ; The data will be in one of two places.
|
---|
| 66 | ; On if it was mapped or manipulated after coming in or another if it was not.
|
---|
| 67 | ; SETID is always 1000 on non repeating segments such as PID
|
---|
| 68 | GETDATA(SEG,SETID,SEQ) ;
|
---|
| 69 | N DATA
|
---|
| 70 | S DATA=$G(HLP(SEG,SETID,SEQ,0)) I DATA]"" Q DATA
|
---|
| 71 | Q $G(HLP(SEG,SETID,SEQ))
|
---|
| 72 | ;
|
---|
| 73 | ; Save the information on this record for another day
|
---|
| 74 | ; Dates need be in MMDDYYYY@HHMMSS or MM/DD/YYYY@HHMMSS
|
---|
| 75 | ;
|
---|
| 76 | SAVEPAT(NAME,DOB,SEX,ID,HLMTIEN,MSGDTTM,DUZ,FE,HLP) ;
|
---|
| 77 | N DIE,DIC,X,DR
|
---|
| 78 | S X="`"_HLMTIEN
|
---|
| 79 | S DIC=19904.21,DIC(0)="L"
|
---|
| 80 | S DIC("DR")=".02///^S X=NAME;.03///^S X=DOB;.04///^S X=SEX;.06///^S X=ID;.07///NOW;.08///^S X=DUZ;.09///^S X=MSGDTTM"
|
---|
| 81 | D ^DIC
|
---|
| 82 | ;
|
---|
| 83 | I '+Y D Q
|
---|
| 84 | . S FE=$$FATALERR^VEPERI6(1,"SYSTEM","CAN'T ADD TO NEW PATIENT HOLD FILE 19904.21",HLMTIEN,.HLP) Q
|
---|
| 85 | ;
|
---|
| 86 | Q
|
---|
| 87 | ;
|
---|
| 88 | ; Add a patient to file 2 & 9000001
|
---|
| 89 | ; This just adds a stub to get the patient started.
|
---|
| 90 | ADDPAT(NAME,DOB,SEX,DFN,FE,HLMTIEN,HLP) ;
|
---|
| 91 | N DIC,HRN,IENS,DATA,DLAYGO,RET,X,FDA
|
---|
| 92 | ;
|
---|
| 93 | ; These variables are most likely set by DIC,DIE and IHS lookup routines.
|
---|
| 94 | N Y,VAERR,FDAIEN,DIW,DGUSER,DFN,DDER,DA,C,DICR,SSN
|
---|
| 95 | N AUPNSEX,AUPNPAT,AUPNLK,AUPNDOD,AUPNDOB,AUPNDAYS,AGE,%I,%1,%L
|
---|
| 96 | ;
|
---|
| 97 | S FE=0
|
---|
| 98 | I $G(NAME)=""!($G(DOB)="")!($G(SEX)="") D Q
|
---|
| 99 | . S FE=$$FATALERR^VEPERI6(1,"DATA","NAME, DOB OR SEX MISSING FROM PATIENT ADD",HLMTIEN,.HLP) Q
|
---|
| 100 | ;
|
---|
| 101 | ; Add stub patient
|
---|
| 102 | ; Force the entry because we already determined it was a new patient
|
---|
| 103 | S X=""""_NAME_""""
|
---|
| 104 | S DIC=2,DIC(0)="L",DLAYGO=2
|
---|
| 105 | S DIC("DR")=".301///N;391///VISTA OFFICE EHR;1901///N;.03///"_DOB_";.02///"_SEX
|
---|
| 106 | D ^DIC
|
---|
| 107 | I Y<0 D Q
|
---|
| 108 | . S FE=$$FATALERR^VEPERI6(1,"PATADD","PROBLEM ADDING PATIENT",HLMTIEN,.HLP) Q
|
---|
| 109 | ;
|
---|
| 110 | S DFN=+Y
|
---|
| 111 | ;
|
---|
| 112 | ; Create patient in IHS global
|
---|
| 113 | S HRN=$$GENHRN^MPIFAG1()
|
---|
| 114 | S IENS="?+1,"_+Y_","
|
---|
| 115 | S DATA="FDA"
|
---|
| 116 | S FDA(9000001.41,IENS,.01)=DUZ(2)
|
---|
| 117 | S FDA(9000001.41,IENS,.02)=HRN
|
---|
| 118 | D UPDATE^DIE("",DATA,"FDAIEN","RET")
|
---|
| 119 | I $D(RET) D Q
|
---|
| 120 | . S FE=$$FATALERR^VEPERI6(1,"PATADD","PROBLEM ADDING PATIENT HRN",HLMTIEN,.HLP) Q
|
---|
| 121 | Q
|
---|