EASPFSS ;OAK/ELZ - PFSS SUPPORT FOR INBOUND LTC STATUS MESSAGE; 10/6/05
;;1.0;ENROLLMENT APPLICATION SYSTEM;**67**;21-OCT-94
;;Per VHA Directive 10-93-142, this routine should not be modified.
;
MSG ; receives HL7 message from COTS product
N EASMSG,EASHEAD,EASICN,EASDFN,EASSSN,EASVACLM,EASALIAS,EASSTAT,EASD,EAST,EASRESLT,EASDT,EASLOS,EASCODE,SEG,EASX
;
;parse message
S EASSTAT=$$STARTMSG^HLPRS(.EASMSG,HLMTIENS,.EASHEAD)
I 'EASSTAT S HLERR="Unable to start parse of message" G MSGQ
;
F Q:'$$NEXTSEG^HLPRS(.EASMSG,.SEG) D
. F EAST=3:1 S EASD=$P($T(HL7DATA+EAST),";",4) Q:EASD="" D
. . I $P(EASD,"^",2)=SEG("SEGMENT TYPE") D
. . . S @$P(EASD,"^")=$$GET^HLOPRS(.SEG,$P(EASD,"^",3),$P(EASD,"^",4),$P(EASD,"^",5),$P(EASD,"^",6))
. . . S EASCODE=$P(EASD,"^",7,99)
. . . I $L(EASCODE),$L(@$P(EASD,"^")) S X=@$P(EASD,"^") X EASCODE S @$P(EASD,"^")=X
;
;check out data received from message
S DFN=$$PATIENT($G(EASICN),$G(EASDFN),$G(EASSSN),$G(EASVACLM),$G(EASALIAS)) I 'DFN S HLERR="Unable to validate the patient" G MSGQ
;
;data for $$copay^easeccal call
; input: Patient's DFN, Date of Care, Length of stay
; output: exemption flag ^ exemption reason (714.1 pointer) ^ <181 $ amount ^ >180 $ amount ^ opt $ amount
;
S EASX=$$FILE(DFN,EASDT,EASLOS,$$COPAY^EASECCAL(DFN,EASDT,EASLOS)) I EASX<1 S HLERR="Unable to create 714.5 record" G MSGQ
;
S EASX=$$QUEUE^VDEFQM("ADT^A08","SUBTYPE=LTUPI^IEN="_EASX,,"PFSS OUTBOUND") I 'EASX S HLERR="Unable to queue to VDEF"
;
MSGQ ;
S HLA("HLA",1)="MSA"_HL("FS")_$S('$D(HLERR):"AA",1:"AE")_HL("FS")_HL("MID")
D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.EASRESLT)
;
Q
;
FILE(DFN,EASDT,EASLOS,EASDAT) ; creates a new entry in 714.5 and returns ien
;
N DIC,DO,X,Y
S DIC="^EASPFS(714.5,",DIC(0)="",X=DFN
S DIC("DR")=".02////^S X=EASDT;.03////^S X=EASLOS;.04////^S X=+EASDAT;.06////^S X=+$P(EASDAT,""^"",3);.07////^S X=+$P(EASDAT,""^"",4);.08////^S X=+$P(EASDAT,""^"",5)"
S:$P(EASDAT,"^",2) DIC("DR")=DIC("DR")_";.05////^S X=$P(EASDAT,""^"",2)"
D FILE^DICN
Q +Y
;
PATIENT(EASICN,EASDFN,EASSSN,EASVACLM,EASALIAS) ; this function will receive
; several patient data elements and validate them. Assuming the data
; meets expected requirements, the function will return the patient's
; DFN. The requirement is ICN is a must, the patient must also match
; at least 2 other data elements.
;
N DFN,EASMATCH,EASX
S (EASMATCH,EASX)=0
S DFN=$$DFN(EASICN) I 'DFN G PATQ
I DFN=EASDFN S EASMATCH=1
I $P($G(^DPT(DFN,0)),"^",9)=EASSSN S EASMATCH=EASMATCH+1 I EASMATCH>1 G PATQ
I $P($G(^DPT(DFN,.31)),"^",3)=EASVACLM S EASMATCH=EASMATCH+1 I EASMATCH>1 G PATQ
F S EASX=$O(^DPT(DFN,.01,EASX)) Q:'EASX!(EASMATCH>1) I $P($G(^DPT(DFN,.01,EASX,0)),"^",2)=EASALIAS S EASMATCH=EASMATCH+1 Q
I EASMATCH<2 S DFN=0
PATQ ;
Q DFN
;
DFN(EASICN) ; returns dfn for icn ia #2701
N DFN ; check to see if mpi software installed
S DFN=$S($L($T(GETDFN^MPIF001)):+$$GETDFN^MPIF001(+EASICN),1:0)
Q $S(DFN>0:DFN,1:0)
;
HL7DATA ; hl7 data mapping
; format: description ; EAS Variable ^ segment ^ seq ^ comp ^ subcomp ^
; extract code
;;patient icn;EASICN^PID^3^1^1^1
;;patient dfn;EASDFN^PID^3^1^1^2^S X=$E(X,4,99)
;;patient ssn;EASSSN^PID^3^1^1^3
;;patient va claim;EASVACLM^PID^3^1^1^4
;;patient alias ssn;EASALIAS^PID^3^1^1^5
;;last month date;EASDT^OBX^14^1^^^S X=$$FMDATE^HLFNC(X)
;;ltc los;EASLOS^OBX^5
;;
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HEASPFSS 3476 printed Nov 22, 2024@17:05:43 Page 2
EASPFSS ;OAK/ELZ - PFSS SUPPORT FOR INBOUND LTC STATUS MESSAGE; 10/6/05
+1 ;;1.0;ENROLLMENT APPLICATION SYSTEM;**67**;21-OCT-94
+2 ;;Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
MSG ; receives HL7 message from COTS product
+1 NEW EASMSG,EASHEAD,EASICN,EASDFN,EASSSN,EASVACLM,EASALIAS,EASSTAT,EASD,EAST,EASRESLT,EASDT,EASLOS,EASCODE,SEG,EASX
+2 ;
+3 ;parse message
+4 SET EASSTAT=$$STARTMSG^HLPRS(.EASMSG,HLMTIENS,.EASHEAD)
+5 IF 'EASSTAT
SET HLERR="Unable to start parse of message"
GOTO MSGQ
+6 ;
+7 FOR
if '$$NEXTSEG^HLPRS(.EASMSG,.SEG)
QUIT
Begin DoDot:1
+8 FOR EAST=3:1
SET EASD=$PIECE($TEXT(HL7DATA+EAST),";",4)
if EASD=""
QUIT
Begin DoDot:2
+9 IF $PIECE(EASD,"^",2)=SEG("SEGMENT TYPE")
Begin DoDot:3
+10 SET @$PIECE(EASD,"^")=$$GET^HLOPRS(.SEG,$PIECE(EASD,"^",3),$PIECE(EASD,"^",4),$PIECE(EASD,"^",5),$PIECE(EASD,"^",6))
+11 SET EASCODE=$PIECE(EASD,"^",7,99)
+12 IF $LENGTH(EASCODE)
IF $LENGTH(@$PIECE(EASD,"^"))
SET X=@$PIECE(EASD,"^")
XECUTE EASCODE
SET @$PIECE(EASD,"^")=X
End DoDot:3
End DoDot:2
End DoDot:1
+13 ;
+14 ;check out data received from message
+15 SET DFN=$$PATIENT($GET(EASICN),$GET(EASDFN),$GET(EASSSN),$GET(EASVACLM),$GET(EASALIAS))
IF 'DFN
SET HLERR="Unable to validate the patient"
GOTO MSGQ
+16 ;
+17 ;data for $$copay^easeccal call
+18 ; input: Patient's DFN, Date of Care, Length of stay
+19 ; output: exemption flag ^ exemption reason (714.1 pointer) ^ <181 $ amount ^ >180 $ amount ^ opt $ amount
+20 ;
+21 SET EASX=$$FILE(DFN,EASDT,EASLOS,$$COPAY^EASECCAL(DFN,EASDT,EASLOS))
IF EASX<1
SET HLERR="Unable to create 714.5 record"
GOTO MSGQ
+22 ;
+23 SET EASX=$$QUEUE^VDEFQM("ADT^A08","SUBTYPE=LTUPI^IEN="_EASX,,"PFSS OUTBOUND")
IF 'EASX
SET HLERR="Unable to queue to VDEF"
+24 ;
MSGQ ;
+1 SET HLA("HLA",1)="MSA"_HL("FS")_$SELECT('$DATA(HLERR):"AA",1:"AE")_HL("FS")_HL("MID")
+2 DO GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.EASRESLT)
+3 ;
+4 QUIT
+5 ;
FILE(DFN,EASDT,EASLOS,EASDAT) ; creates a new entry in 714.5 and returns ien
+1 ;
+2 NEW DIC,DO,X,Y
+3 SET DIC="^EASPFS(714.5,"
SET DIC(0)=""
SET X=DFN
+4 SET DIC("DR")=".02////^S X=EASDT;.03////^S X=EASLOS;.04////^S X=+EASDAT;.06////^S X=+$P(EASDAT,""^"",3);.07////^S X=+$P(EASDAT,""^"",4);.08////^S X=+$P(EASDAT,""^"",5)"
+5 if $PIECE(EASDAT,"^",2)
SET DIC("DR")=DIC("DR")_";.05////^S X=$P(EASDAT,""^"",2)"
+6 DO FILE^DICN
+7 QUIT +Y
+8 ;
PATIENT(EASICN,EASDFN,EASSSN,EASVACLM,EASALIAS) ; this function will receive
+1 ; several patient data elements and validate them. Assuming the data
+2 ; meets expected requirements, the function will return the patient's
+3 ; DFN. The requirement is ICN is a must, the patient must also match
+4 ; at least 2 other data elements.
+5 ;
+6 NEW DFN,EASMATCH,EASX
+7 SET (EASMATCH,EASX)=0
+8 SET DFN=$$DFN(EASICN)
IF 'DFN
GOTO PATQ
+9 IF DFN=EASDFN
SET EASMATCH=1
+10 IF $PIECE($GET(^DPT(DFN,0)),"^",9)=EASSSN
SET EASMATCH=EASMATCH+1
IF EASMATCH>1
GOTO PATQ
+11 IF $PIECE($GET(^DPT(DFN,.31)),"^",3)=EASVACLM
SET EASMATCH=EASMATCH+1
IF EASMATCH>1
GOTO PATQ
+12 FOR
SET EASX=$ORDER(^DPT(DFN,.01,EASX))
if 'EASX!(EASMATCH>1)
QUIT
IF $PIECE($GET(^DPT(DFN,.01,EASX,0)),"^",2)=EASALIAS
SET EASMATCH=EASMATCH+1
QUIT
+13 IF EASMATCH<2
SET DFN=0
PATQ ;
+1 QUIT DFN
+2 ;
DFN(EASICN) ; returns dfn for icn ia #2701
+1 ; check to see if mpi software installed
NEW DFN
+2 SET DFN=$SELECT($LENGTH($TEXT(GETDFN^MPIF001)):+$$GETDFN^MPIF001(+EASICN),1:0)
+3 QUIT $SELECT(DFN>0:DFN,1:0)
+4 ;
HL7DATA ; hl7 data mapping
+1 ; format: description ; EAS Variable ^ segment ^ seq ^ comp ^ subcomp ^
+2 ; extract code
+3 ;;patient icn;EASICN^PID^3^1^1^1
+4 ;;patient dfn;EASDFN^PID^3^1^1^2^S X=$E(X,4,99)
+5 ;;patient ssn;EASSSN^PID^3^1^1^3
+6 ;;patient va claim;EASVACLM^PID^3^1^1^4
+7 ;;patient alias ssn;EASALIAS^PID^3^1^1^5
+8 ;;last month date;EASDT^OBX^14^1^^^S X=$$FMDATE^HLFNC(X)
+9 ;;ltc los;EASLOS^OBX^5
+10 ;;
+11 ;