IVMPREC5 ;ALB/KCL - PROCESS INCOMING (Z03 EVENT TYPE) HL7 MESSAGES ; 3/6/01 4:42pm
;;2.0;INCOME VERIFICATION MATCH;**2,17,34**;21-OCT-94
;;Per VHA Directive 10-93-142, this routine should not be modified.
;
; This routine will process batch ORU SSN(event type Z03) HL7
; messages received from the IVM center. Format of batch:
; BHS
; {MSH
; PID
; ZIV
; }
; BTS
;
EN ; entry point to process SSN messages
;
F IVMDA=1:0 S IVMDA=$O(^TMP($J,IVMRTN,IVMDA)) Q:'IVMDA S IVMSEG=$G(^(IVMDA,0)) I $E(IVMSEG,1,3)="MSH" D
.K HLERR
.S HLMID=$P(IVMSEG,HLFS,10) ; message control id from MSH
.S IVMDA=$O(^TMP($J,IVMRTN,IVMDA)),IVMSEG=$G(^(+IVMDA,0)) I $E(IVMSEG,1,3)'="PID" D Q
..S HLERR="Missing PID segment" D ACK^IVMPREC
.S DFN=$P($P(IVMSEG,HLFS,4),$E(HLECH),1)
.I ('DFN!(DFN'=+DFN)!('$D(^DPT(+DFN,0)))) D Q
..S HLERR="Invalid DFN" D ACK^IVMPREC
.I $P(IVMSEG,HLFS,20)'=$P(^DPT(DFN,0),"^",9) D Q
..S HLERR="Couldn't match IVM SSN with DHCP SSN" D ACK^IVMPREC
.S IVMDA=$O(^TMP($J,IVMRTN,IVMDA)),IVMSEG=$G(^(+IVMDA,0)) I $E(IVMSEG,1,3)'="ZIV" D Q
..S HLERR="Missing ZIV segment" D ACK^IVMPREC
.S IVMSEG=$P(IVMSEG,HLFS,2,999),IVMIY=$P(IVMSEG,HLFS,2)
.S IVMIY=$$FMDATE^HLFNC(IVMIY) I $E(IVMIY,4,7)'="0000"!($E(IVMIY,1,3)<292) S HLERR="Invalid Income Year" D ACK^IVMPREC Q
.;
.I $P(IVMSEG,"^",4)=$P($G(^DPT(DFN,0)),"^",9) D Q
..S HLERR="Client SSN already on file in DHCP" D ACK^IVMPREC Q
.I $P(IVMSEG,"^",6)]"",$P(IVMSEG,"^",7)']"" D Q
..S HLERR="Missing spouse IEN" D ACK^IVMPREC Q
.I $P(IVMSEG,"^",6)]"",($P(IVMSEG,"^",6)=$P($$DEM^DGMTU1(+$P(IVMSEG,"^",7)),"^",9)) D Q
..S HLERR="Spouse SSN already on file in DHCP" D ACK^IVMPREC Q
.;
.I $P(IVMSEG,"^",4)="",($P(IVMSEG,"^",6)=""!($P(IVMSEG,"^",7)="")) D Q
..S HLERR="Missing client/spouse SSNs" D ACK^IVMPREC Q
.;
.D SSNCK I $D(HLERR) D ACK^IVMPREC Q
.D STORE
;
; - send notification message if necessary
I IVMCNTR D MAIL^IVMUFNC()
Q
;
SSNCK ; check to make sure the SSN(s) are valid SSA SSNs
;
N FLAG,L,X
S FLAG=0 ; set to 1 if problem with SSN
;
F X=$P(IVMSEG,"^",4),$P(IVMSEG,"^",6) Q:FLAG D
.S L=$E(X,1,3)
.I L="000" S FLAG=1 Q ; begins with 000
.I L>649,(L<700) S FLAG=1 Q ; 650-699 invalid
.I L>728 S FLAG=1 Q ; 729-999 invalid
I FLAG S HLERR="Invalid SSN sent"
Q
;
STORE ; store the ZIV segment in the (#301.5) file for uploading
;
; check for patient case record
S DA(1)=$O(^IVM(301.5,"B",+DFN,0)),X=$$IEN^IVMUFNC4("ZIV")
I DA(1)']"" S HLERR="Patient missing from IVM PATIENT file" D ACK^IVMPREC Q
I $G(^IVM(301.5,DA(1),"IN",0))']"" S ^(0)="^301.501PA^^"
S DIC="^IVM(301.5,"_DA(1)_",""IN"",",DIC(0)="L",DLAYGO=301.501
S DIC("DR")="10////^S X=IVMSEG"
K DD,DO D FILE^DICN
;
;
STOREQ K DA,DIC,DIE,X,Y
;
;
; build mail message if SUPPRESS SSN UPLOAD NOTIFICATION is not set
Q:$P($G(^IVM(301.9,1,0)),"^",3)
;
;
ZIVBULL ; build mail message for transmission to IVM mail group notifying them
; that patients with updated SSA/SSN's have been received from the
; IVM Center and may now be uploaded into DHCP.
;
S XMSUB="IVM - SSN UPLOAD"
S IVMTEXT(1)="Updated SSA/SSNs have been received from the Income Verification"
S IVMTEXT(2)="Match Center. Please select the 'SSN Upload' (SSN) option from the"
S IVMTEXT(3)="'IVM Upload Menu' in order to view/update these SSA/SSNs. If you"
S IVMTEXT(4)="have any questions concerning these updated SSA/SSNs, please contact"
S IVMTEXT(5)="the Income Verification Match Center."
S IVMTEXT(6)=""
S IVMTEXT(7)="The following patients have SSA/SSNs to be viewed/updated: "
S IVMTEXT(8)=" "
S IVMCNTR=IVMCNTR+1
S IVMPTID=$$PT^IVMUFNC4(DFN)
S IVMTEXT(IVMCNTR+8)=$J(IVMCNTR_")",5)_" "_$P(IVMPTID,"^")_" ("_$P(IVMPTID,"^",3)_")"
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HIVMPREC5 3857 printed Dec 13, 2024@02:02:17 Page 2
IVMPREC5 ;ALB/KCL - PROCESS INCOMING (Z03 EVENT TYPE) HL7 MESSAGES ; 3/6/01 4:42pm
+1 ;;2.0;INCOME VERIFICATION MATCH;**2,17,34**;21-OCT-94
+2 ;;Per VHA Directive 10-93-142, this routine should not be modified.
+3 ;
+4 ; This routine will process batch ORU SSN(event type Z03) HL7
+5 ; messages received from the IVM center. Format of batch:
+6 ; BHS
+7 ; {MSH
+8 ; PID
+9 ; ZIV
+10 ; }
+11 ; BTS
+12 ;
EN ; entry point to process SSN messages
+1 ;
+2 FOR IVMDA=1:0
SET IVMDA=$ORDER(^TMP($JOB,IVMRTN,IVMDA))
if 'IVMDA
QUIT
SET IVMSEG=$GET(^(IVMDA,0))
IF $EXTRACT(IVMSEG,1,3)="MSH"
Begin DoDot:1
+3 KILL HLERR
+4 ; message control id from MSH
SET HLMID=$PIECE(IVMSEG,HLFS,10)
+5 SET IVMDA=$ORDER(^TMP($JOB,IVMRTN,IVMDA))
SET IVMSEG=$GET(^(+IVMDA,0))
IF $EXTRACT(IVMSEG,1,3)'="PID"
Begin DoDot:2
+6 SET HLERR="Missing PID segment"
DO ACK^IVMPREC
End DoDot:2
QUIT
+7 SET DFN=$PIECE($PIECE(IVMSEG,HLFS,4),$EXTRACT(HLECH),1)
+8 IF ('DFN!(DFN'=+DFN)!('$DATA(^DPT(+DFN,0))))
Begin DoDot:2
+9 SET HLERR="Invalid DFN"
DO ACK^IVMPREC
End DoDot:2
QUIT
+10 IF $PIECE(IVMSEG,HLFS,20)'=$PIECE(^DPT(DFN,0),"^",9)
Begin DoDot:2
+11 SET HLERR="Couldn't match IVM SSN with DHCP SSN"
DO ACK^IVMPREC
End DoDot:2
QUIT
+12 SET IVMDA=$ORDER(^TMP($JOB,IVMRTN,IVMDA))
SET IVMSEG=$GET(^(+IVMDA,0))
IF $EXTRACT(IVMSEG,1,3)'="ZIV"
Begin DoDot:2
+13 SET HLERR="Missing ZIV segment"
DO ACK^IVMPREC
End DoDot:2
QUIT
+14 SET IVMSEG=$PIECE(IVMSEG,HLFS,2,999)
SET IVMIY=$PIECE(IVMSEG,HLFS,2)
+15 SET IVMIY=$$FMDATE^HLFNC(IVMIY)
IF $EXTRACT(IVMIY,4,7)'="0000"!($EXTRACT(IVMIY,1,3)<292)
SET HLERR="Invalid Income Year"
DO ACK^IVMPREC
QUIT
+16 ;
+17 IF $PIECE(IVMSEG,"^",4)=$PIECE($GET(^DPT(DFN,0)),"^",9)
Begin DoDot:2
+18 SET HLERR="Client SSN already on file in DHCP"
DO ACK^IVMPREC
QUIT
End DoDot:2
QUIT
+19 IF $PIECE(IVMSEG,"^",6)]""
IF $PIECE(IVMSEG,"^",7)']""
Begin DoDot:2
+20 SET HLERR="Missing spouse IEN"
DO ACK^IVMPREC
QUIT
End DoDot:2
QUIT
+21 IF $PIECE(IVMSEG,"^",6)]""
IF ($PIECE(IVMSEG,"^",6)=$PIECE($$DEM^DGMTU1(+$PIECE(IVMSEG,"^",7)),"^",9))
Begin DoDot:2
+22 SET HLERR="Spouse SSN already on file in DHCP"
DO ACK^IVMPREC
QUIT
End DoDot:2
QUIT
+23 ;
+24 IF $PIECE(IVMSEG,"^",4)=""
IF ($PIECE(IVMSEG,"^",6)=""!($PIECE(IVMSEG,"^",7)=""))
Begin DoDot:2
+25 SET HLERR="Missing client/spouse SSNs"
DO ACK^IVMPREC
QUIT
End DoDot:2
QUIT
+26 ;
+27 DO SSNCK
IF $DATA(HLERR)
DO ACK^IVMPREC
QUIT
+28 DO STORE
End DoDot:1
+29 ;
+30 ; - send notification message if necessary
+31 IF IVMCNTR
DO MAIL^IVMUFNC()
+32 QUIT
+33 ;
SSNCK ; check to make sure the SSN(s) are valid SSA SSNs
+1 ;
+2 NEW FLAG,L,X
+3 ; set to 1 if problem with SSN
SET FLAG=0
+4 ;
+5 FOR X=$PIECE(IVMSEG,"^",4),$PIECE(IVMSEG,"^",6)
if FLAG
QUIT
Begin DoDot:1
+6 SET L=$EXTRACT(X,1,3)
+7 ; begins with 000
IF L="000"
SET FLAG=1
QUIT
+8 ; 650-699 invalid
IF L>649
IF (L<700)
SET FLAG=1
QUIT
+9 ; 729-999 invalid
IF L>728
SET FLAG=1
QUIT
End DoDot:1
+10 IF FLAG
SET HLERR="Invalid SSN sent"
+11 QUIT
+12 ;
STORE ; store the ZIV segment in the (#301.5) file for uploading
+1 ;
+2 ; check for patient case record
+3 SET DA(1)=$ORDER(^IVM(301.5,"B",+DFN,0))
SET X=$$IEN^IVMUFNC4("ZIV")
+4 IF DA(1)']""
SET HLERR="Patient missing from IVM PATIENT file"
DO ACK^IVMPREC
QUIT
+5 IF $GET(^IVM(301.5,DA(1),"IN",0))']""
SET ^(0)="^301.501PA^^"
+6 SET DIC="^IVM(301.5,"_DA(1)_",""IN"","
SET DIC(0)="L"
SET DLAYGO=301.501
+7 SET DIC("DR")="10////^S X=IVMSEG"
+8 KILL DD,DO
DO FILE^DICN
+9 ;
+10 ;
STOREQ KILL DA,DIC,DIE,X,Y
+1 ;
+2 ;
+3 ; build mail message if SUPPRESS SSN UPLOAD NOTIFICATION is not set
+4 if $PIECE($GET(^IVM(301.9,1,0)),"^",3)
QUIT
+5 ;
+6 ;
ZIVBULL ; build mail message for transmission to IVM mail group notifying them
+1 ; that patients with updated SSA/SSN's have been received from the
+2 ; IVM Center and may now be uploaded into DHCP.
+3 ;
+4 SET XMSUB="IVM - SSN UPLOAD"
+5 SET IVMTEXT(1)="Updated SSA/SSNs have been received from the Income Verification"
+6 SET IVMTEXT(2)="Match Center. Please select the 'SSN Upload' (SSN) option from the"
+7 SET IVMTEXT(3)="'IVM Upload Menu' in order to view/update these SSA/SSNs. If you"
+8 SET IVMTEXT(4)="have any questions concerning these updated SSA/SSNs, please contact"
+9 SET IVMTEXT(5)="the Income Verification Match Center."
+10 SET IVMTEXT(6)=""
+11 SET IVMTEXT(7)="The following patients have SSA/SSNs to be viewed/updated: "
+12 SET IVMTEXT(8)=" "
+13 SET IVMCNTR=IVMCNTR+1
+14 SET IVMPTID=$$PT^IVMUFNC4(DFN)
+15 SET IVMTEXT(IVMCNTR+8)=$JUSTIFY(IVMCNTR_")",5)_" "_$PIECE(IVMPTID,"^")_" ("_$PIECE(IVMPTID,"^",3)_")"
+16 QUIT