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

IVMPREC8.m

Go to the documentation of this file.
  1. IVMPREC8 ;ALB/KCL,BRM,PJR,CKN,TDM,PWC,LBD,DPR,KUM - PROCESS INCOMING (Z05 EVENT TYPE) HL7 MESSAGES (CON'T) ;7/24/24 8:56AM
  1. ;;2.0;INCOME VERIFICATION MATCH;**5,6,12,58,73,79,102,115,121,148,151,152,168,167,171,164,188,187,210,214,215**;21-OCT-94;Build 14
  1. ;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ; This routine will process (event type Z05)
  1. ;
  1. PID ;-compare PID fields with DHCP
  1. N COMPPH1,COMPPH2,COUNTRY,IVMCNTRY,IVMEXT,IVMFNUM,IVMFVAL,IVMCNTRY,IVMEXT
  1. ;
  1. S IVMFLD=""
  1. ; - strip off seg name
  1. S IVMPIECE=$E(IVMXREF,4,9)
  1. ;Only process if value exist-also handles multiple addr
  1. I $G(IVMPID(+$E(IVMPIECE,1,2)))'=""!($O(IVMPID(+$E(IVMPIECE,1,2),""))) D
  1. .; -if PID field is the addr field-parse addr
  1. .S IVMADFLG=0
  1. .I IVMXREF["PID11",'$G(DODSEG) D Q:IVMFLD=""
  1. ..; IVM*2.0*164-Uncomment Conf and Add Res
  1. ..I $G(AUPFARY(IVMDEMDA))="CA" S IVMADDR=$G(ADDRESS("CA")) ;Conf Addr
  1. ..I $G(AUPFARY(IVMDEMDA))'="CA" D
  1. ...S IVMADDR=$S($D(ADDRESS("P")):ADDRESS("P"),$D(ADDRESS("VAB1")):ADDRESS("VAB1"),$D(ADDRESS("VAB2")):ADDRESS("VAB2"),$D(ADDRESS("VAB3")):ADDRESS("VAB3"),$D(ADDRESS("VAB4")):ADDRESS("VAB4"),1:"")
  1. ...I $G(AUPFARY(IVMDEMDA))="RA" S IVMADDR=$G(ADDRESS("R"))
  1. ..I IVMADDR="" Q
  1. ..S COUNTRY=$P(IVMADDR,$E(HLECH),6)
  1. ..S FORADDR=$S(COUNTRY="USA":0,1:1)
  1. ..;-get piece of addr field, and set IVMFLD
  1. ..S IVMPIECE=$E(IVMPIECE,3,6),IVMFLD=$P(IVMADDR,$E(HLECH),IVMPIECE)
  1. ..;Enable del of Addr2,Addr3-164-Fix End dt
  1. ..I (IVMPIECE="2C")!(IVMPIECE="8C")!(IVMPIECE="2R")!(IVMPIECE="8R") S:IVMFLD="" IVMFLD="@"
  1. ..I $E(IVMPIECE,1,3)="13C" D
  1. ...S IVMFLD=$P(IVMADDR,$E(HLECH),12)
  1. ...S IVMFLD=$$FMDATE^HLFNC($P(IVMFLD,$E(HLECH,4),2))
  1. ...S:IVMFLD="" IVMFLD="@"
  1. ..Q:IVMFLD=""
  1. ..;convert st abbrev. to pointer
  1. ..I (IVMPIECE=4)!(IVMPIECE="4C")!(IVMPIECE="4R") D
  1. ...S IVMFLD=$S('FORADDR:IVMFLD,1:"")
  1. ...I IVMFLD'="" S (IVMSTPTR,IVMFLD)=+$O(^DIC(5,"C",IVMFLD,0))
  1. ...;IVM*2.0*164-PMA State Pointer
  1. ...I IVMPIECE=4 S IVMPMAST=$G(IVMSTPTR)
  1. ...I IVMPIECE="4C" S IVMCMAST=$G(IVMSTPTR)
  1. ..I (IVMPIECE=5)!(IVMPIECE="5C")!(IVMPIECE="5R") D
  1. ...S IVMFLD=$S('FORADDR:IVMFLD,1:"")
  1. ...I IVMFLD'="" S X=IVMFLD D ZIPIN^VAFADDR S IVMFLD=X
  1. ..I (IVMPIECE="4F")!(IVMPIECE="4CF")!(IVMPIECE="4RF") S IVMFLD=$S(FORADDR:IVMFLD,1:"") ;PROVINCE
  1. ..I (IVMPIECE="5F")!(IVMPIECE="5CF")!(IVMPIECE="5RF") S IVMFLD=$S(FORADDR:IVMFLD,1:"") ;POSTAL CODE
  1. ..I (IVMPIECE=6)!(IVMPIECE="6C")!(IVMPIECE="6R") S IVMFLD=$$CNTRCONV(COUNTRY) ;COUNTRY
  1. ..I IVMPIECE=7 S IVMFLD=$$BAICONV(IVMFLD) ;Bad Address Ind
  1. ..I IVMPIECE="7C" S IVMFLD=CONFADCT ;CONFADCT set in PID11^IVMPRECA
  1. ..;County for Conf
  1. ..I IVMPIECE="9C" D
  1. ...S IVMFLD=$S('FORADDR:IVMFLD,1:"") Q:IVMFLD=""
  1. ...I IVMCMAST'="" S IVMFLD=+$O(^DIC(5,IVMCMAST,1,"C",IVMFLD,0))
  1. ..;County for Res
  1. ..I IVMPIECE="9R" D
  1. ...S IVMFLD=$S('FORADDR:IVMFLD,1:"") Q:IVMFLD=""
  1. ...I IVMSTPTR'="" S IVMFLD=+$O(^DIC(5,IVMSTPTR,1,"C",IVMFLD,0))
  1. ..I $E(IVMPIECE,1,3)="12C" D
  1. ...S IVMFLD=$$FMDATE^HLFNC($P(IVMFLD,$E(HLECH,4),1))
  1. ...;IVM*2.0*164-Allow del of start dt
  1. ...S:IVMFLD="" IVMFLD="@"
  1. ..S IVMADFLG=1
  1. .I IVMXREF["PID12",'$G(DODSEG) D
  1. ..;IVM*2.0*164-County from PMA St
  1. ..D PID12^IVMPREC9
  1. ..I 'FORADDR D
  1. ...S IVMADFLG=1
  1. ...I IVMPMAST'="" S IVMFLD=+$O(^DIC(5,IVMPMAST,1,"C",IVMPID(12),0))
  1. .;line remove so that the ph is compared before saving to 301.5
  1. .I IVMXREF["PID13",$D(TELECOM),'$G(DODSEG) D
  1. ..;Conf Ph
  1. ..I IVMXREF="PID13CA",$D(TELECOM("VACPN")) D
  1. ...;IVM*2.0*215-Constuct Conf ph
  1. ...S IVMFLD=$P($G(TELECOM("VACPN")),$E(HLECH),6)_$P($G(TELECOM("VACPN")),$E(HLECH),7),IVMADFLG=1
  1. ...S IVMFLD=$$CONVPHAN(IVMFLD)
  1. ...I IVMFLD="" S IVMFLD="@"
  1. ...S IVMCNTRY=$P($G(TELECOM("VACPN")),$E(HLECH),5)
  1. ...S IVMCNTRY=$$CONVPHAN(IVMCNTRY)
  1. ...I ($G(IVMCNTRY))=""!(IVMFLD="@") S IVMCNTRY="@"
  1. ...D UPLOAD^IVMLDEM6(DFN,.13201,IVMCNTRY)
  1. ...S IVMEXT=$P($G(TELECOM("VACPN")),$E(HLECH),8)
  1. ...S IVMEXT=$$CONVPHAN(IVMEXT)
  1. ...I ($G(IVMEXT)="")!(IVMFLD="@") S IVMEXT="@"
  1. ...D UPLOAD^IVMLDEM6(DFN,.13214,$G(IVMEXT))
  1. ..;[Work]
  1. ..I IVMXREF="PID13W",$D(TELECOM("WPN")) D
  1. ...; IVM*2.0*215- Work ph
  1. ...S IVMFLD=$P($G(TELECOM("WPN")),$E(HLECH),6)_$P($G(TELECOM("WPN")),$E(HLECH),7),IVMADFLG=1
  1. ...S IVMFLD=$$CONVPHAN(IVMFLD)
  1. ...I IVMFLD="" S IVMFLD="@"
  1. ...S IVMCNTRY=$P($G(TELECOM("WPN")),$E(HLECH),5)
  1. ...S IVMCNTRY=$$CONVPHAN(IVMCNTRY)
  1. ...I ($G(IVMCNTRY)="")!(IVMFLD="@") S IVMCNTRY="@"
  1. ...D UPLOAD^IVMLDEM6(DFN,.1329,IVMCNTRY)
  1. ...S IVMEXT=$P($G(TELECOM("WPN")),$E(HLECH),8)
  1. ...S IVMEXT=$$CONVPHAN(IVMEXT)
  1. ...I ($G(IVMEXT)="")!(IVMFLD="@") S IVMEXT="@"
  1. ...D UPLOAD^IVMLDEM6(DFN,.13213,$G(IVMEXT))
  1. ..;Pager
  1. ..I IVMXREF="PID13B",$D(TELECOM("BPN")) D
  1. ...S IVMFLD=$$CONVPH($P($G(TELECOM("BPN")),$E(HLECH))),IVMADFLG=1
  1. ..;Cell Ph
  1. ..I IVMXREF="PID13C",$D(TELECOM("ORN")) D
  1. ...; IVM*2.0*215- Cell ph
  1. ...S IVMFLD=$P($G(TELECOM("ORN")),$E(HLECH),6)_$P($G(TELECOM("ORN")),$E(HLECH),7),IVMADFLG=1
  1. ...S IVMFLD=$$CONVPHAN(IVMFLD)
  1. ...I IVMFLD="" S IVMFLD="@"
  1. ...S IVMCNTRY=$P($G(TELECOM("ORN")),$E(HLECH),5)
  1. ...S IVMCNTRY=$$CONVPHAN(IVMCNTRY)
  1. ...I ($G(IVMCNTRY)="")!(IVMFLD="@") S IVMCNTRY="@"
  1. ...D UPLOAD^IVMLDEM6(DFN,.1328,IVMCNTRY)
  1. ...S IVMEXT=$P($G(TELECOM("ORN")),$E(HLECH),8)
  1. ...S IVMEXT=$$CONVPHAN(IVMEXT)
  1. ...I ($G(IVMEXT)="")!(IVMFLD="@") S IVMEXT="@"
  1. ...D UPLOAD^IVMLDEM6(DFN,.13212,$G(IVMEXT))
  1. ..;Email
  1. ..I IVMXREF="PID13E",$D(TELECOM("NET")) D
  1. ...S IVMFLD=$P($G(TELECOM("NET")),$E(HLECH),4)
  1. ...S IVMFLD=$S($$CHKEMAIL(IVMFLD):IVMFLD,1:""),IVMADFLG=1
  1. .; - file addr fields and quit
  1. .I IVMADFLG D STORE^IVMPREC9 Q
  1. .I $E(IVMXREF,1,5)'="PID13" S IVMFLD=$G(IVMPID(+IVMPIECE))
  1. .I IVMXREF["PID07" S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
  1. .I IVMXREF["PID16" D
  1. ..S IVMFLD=$S(IVMFLD="D":"DIVORCED",IVMFLD="M":"MARRIED",IVMFLD="W":"WIDOWED",IVMFLD="A":"SEPARATED",IVMFLD="S":"NEVER MARRIED",IVMFLD="U":"UNKNOWN")
  1. ..S IVMFLD=$O(^DIC(11,"B",IVMFLD,0))
  1. .I IVMXREF["PID17" S IVMFLD=$O(^DIC(13,"C",IVMFLD,0)) ;Religion
  1. .I IVMXREF["PID22" D ;Ethnicity
  1. ..S IVMFLD=$$CODE2PTR^DGUTL4($P($G(IVMPID(22)),$E(HLECH),4),2,2)
  1. .I IVMXREF="PID10",'$G(DODSEG),$D(IVMRACE) D Q
  1. ..N XVAL,IVMLST,DHCPLST
  1. ..S (XVAL,IVMLST,DHCPLST)=""
  1. ..F S XVAL=$O(^DPT(DFN,.02,"B",XVAL)) Q:XVAL="" S IVMLST=IVMLST_XVAL_U
  1. ..S XVAL="" F S XVAL=$O(IVMRACE(2,XVAL)) Q:XVAL="" S DHCPLST=DHCPLST_XVAL_U
  1. ..Q:IVMLST=DHCPLST
  1. ..F XVAL=1:1:($L(DHCPLST,U)-1) S IVMFLD=$P(DHCPLST,U,XVAL) D
  1. ...D STORE^IVMPREC9
  1. .;call VADPT to return DHCP demographics
  1. .D DEM^VADPT,ADD^VADPT,OPD^VADPT
  1. .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. .; - special logic for ph,if different store value,quit
  1. .I IVMXREF="PID13",$D(TELECOM("PRN")),'$G(DODSEG) D Q
  1. ..; IVM*2.0*215 - Res ph
  1. ..S IVMFLD=$P($G(TELECOM("PRN")),$E(HLECH),6)_$P($G(TELECOM("PRN")),$E(HLECH),7)
  1. ..S IVMFLD=$$CONVPHAN(IVMFLD)
  1. ..I IVMFLD="" S IVMFLD="@"
  1. ..S IVMCNTRY=$P($G(TELECOM("PRN")),$E(HLECH),5)
  1. ..S IVMCNTRY=$$CONVPHAN(IVMCNTRY)
  1. ..I ($G(IVMCNTRY)="")!(IVMFLD="@") S IVMCNTRY="@"
  1. ..D UPLOAD^IVMLDEM6(DFN,.1327,IVMCNTRY)
  1. ..S IVMEXT=$P($G(TELECOM("PRN")),$E(HLECH),8)
  1. ..S IVMEXT=$$CONVPHAN(IVMEXT)
  1. ..I ($G(IVMEXT)="")!(IVMFLD="@") S IVMEXT="@"
  1. ..D UPLOAD^IVMLDEM6(DFN,.13211,$G(IVMEXT))
  1. ..I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. Q
  1. ;
  1. ZPD ; -compare ZPD with DHCP
  1. ;IVM*2.0*215 - Moved ZPD tag to ZPDA^IVMPRECA
  1. D ZPDPA^IVMPRECA
  1. Q
  1. ;
  1. ZTA ; -compare ZTA with DHCP
  1. N COMPPH1,COMPPH2,COUNTRY,IVMPHONE
  1. S IVMPIECE=$E(IVMXREF,4,7)
  1. I $P(IVMSEG,HLFS,$E(IVMPIECE,1,2))]"" D
  1. .; - set var IVMFLD to incoming HL7 field
  1. .S IVMFLD=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2))
  1. .; - ZTA05 as the ZTA addr field is 5 ~ pieces
  1. .I IVMXREF["ZTA05" D
  1. ..S IVMADDR=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2)) Q:IVMADDR=""
  1. ..S COUNTRY=$P(IVMADDR,$E(HLECH),6)
  1. ..S FORADDR=$S(COUNTRY="USA":0,1:1)
  1. ..; - get piece of address field, and set IVMFLD
  1. ..S IVMPIECE=$E(IVMPIECE,3,4)
  1. ..S IVMFLD=$P(IVMADDR,$E(HLECH),IVMPIECE)
  1. ..I (IVMPIECE=2)!(IVMPIECE=8) S:IVMFLD="" IVMFLD="@"
  1. ..Q:IVMFLD=""
  1. ..I (IVMPIECE=4)!(IVMPIECE=5)!(IVMPIECE=9) S IVMFLD=$S('FORADDR:IVMFLD,1:"") Q:IVMFLD=""
  1. ..I IVMPIECE=4 S (IVMTSTPT,IVMFLD)=$O(^DIC(5,"C",IVMFLD,0))
  1. ..I IVMPIECE=5 S X=IVMFLD D ZIPIN^VAFADDR S IVMFLD=$G(X)
  1. ..I IVMPIECE="4F" S IVMFLD=$S(FORADDR:IVMFLD,1:"") ;PROVINCE
  1. ..I IVMPIECE="5F" S IVMFLD=$S(FORADDR:IVMFLD,1:"") ;POSTAL CODE
  1. ..I IVMPIECE=6 S IVMFLD=$$CNTRCONV(COUNTRY) ;COUNTRY
  1. ..I IVMPIECE=9 S IVMFLD=+$O(^DIC(5,+IVMTSTPT,1,"C",IVMFLD,0)) ;COUNTY
  1. .Q:IVMFLD=""
  1. .; - convert to Y/N val
  1. .I IVMXREF["ZTA02" S IVMFLD=$S(IVMFLD=0:"N",IVMFLD=1:"Y",1:"")
  1. .; - convert to FM dt
  1. .I (IVMXREF["ZTA03")!(IVMXREF["ZTA04")!(IVMXREF["ZTA08") S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
  1. .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. .; -special logic for ph
  1. .I IVMXREF["ZTA07" D Q
  1. ..;IVM*2.0*215 - Skip phone number from 1st piece
  1. ..;I COMPPH1'=COMPPH2 D STORE^IVMPREC9
  1. .; IVM*2.0*215-Add ZTA10 as the Temp phone is 4 ~ pieces in Seq 10
  1. .I IVMXREF["ZTA10" D Q
  1. ..N IVMPH
  1. ..S IVMPHONE=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2)) Q:IVMPHONE=""
  1. ..S IVMPIECE=$E(IVMPIECE,3)
  1. ..S IVMFLD=$P(IVMPHONE,$E(HLECH),IVMPIECE)
  1. ..I IVMPIECE=2 S IVMFLD=IVMFLD_$P(IVMPHONE,$E(HLECH),3)
  1. ..S IVMFLD=$$CONVPHAN(IVMFLD)
  1. ..S IVMPH=$P(IVMPHONE,$E(HLECH),2)_$P(IVMPHONE,$E(HLECH),3)
  1. ..S IVMPH=$$CONVPHAN(IVMPH)
  1. ..I (IVMFLD="")!(IVMPH="") S IVMFLD="@"
  1. ..I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. .I IVMXREF["ZTA08" D
  1. ..I IVMFLD]"",(IVMFLD>IVMDHCP) S UPDAUPG("TA")=1
  1. Q
  1. ;
  1. ZAV ; compare ZAV with DHCP
  1. N IVMATYP
  1. S IVMFLD=""
  1. S IVMATYP=""
  1. S IVMATYP=$P(IVMSEG,HLFS,2)
  1. S IVMFLD=$P(IVMSEG,HLFS,3)
  1. I IVMXREF=$S(IVMATYP="P":"ZAV03",IVMATYP="CNF":"ZAV02",IVMATYP="R":"ZAV01",IVMATYP="C":"ZAV04",1:"") D
  1. .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. Q
  1. ;
  1. ZGD ; - compare ZGD with DHCP
  1. S IVMADFLG=0
  1. S IVMPIECE=$E(IVMXREF,4,7)
  1. I $P(IVMSEG,HLFS,$E(IVMPIECE,1,2))]"" D
  1. .; - set var IVMFLD to incoming HL7
  1. .I 'IVMADFLG S IVMFLD=$P(IVMSEG,HLFS,IVMPIECE)
  1. .; - ZGD06 as the ZGD address field is 5 ~ pieces
  1. .I IVMXREF["ZGD06" D
  1. ..S IVMADDR=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2)),IVMPIECE=$E(IVMPIECE,3)
  1. ..S IVMFLD=$P(IVMADDR,$E(HLECH),IVMPIECE),IVMADFLG=1
  1. ..I IVMFLD]"",IVMPIECE=4 S IVMFLD=$O(^DIC(5,"C",IVMFLD,0))
  1. ..I IVMFLD]"",IVMPIECE=5 S X=IVMFLD D ZIPIN^VAFADDR S IVMFLD=$G(X)
  1. .; - if HL7 dt convert to FM dt
  1. .I IVMXREF["ZGD08" S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
  1. .; - execute code on the 1 node and get DHCP
  1. .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. .; if field from IVM <> DHCP-store for uploading
  1. .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. Q
  1. ;
  1. ZCT ; - compare ZCT with DHCP
  1. N ZCTTYP
  1. S IVMADFLG=0
  1. S IVMPIECE=$E(IVMXREF,4,8)
  1. ;IVM*2.0*188-COMMENT BELOW TO ALLOW QUOTES
  1. ;S IVMSEG=$$CLEARF^IVMPRECA(IVMSEG,HLFS)
  1. S ZCTTYP=$E(IVMPIECE,$L(IVMPIECE)-1,$L(IVMPIECE))
  1. Q:$P(IVMSEG,HLFS,2)'=$S(ZCTTYP="K1":1,ZCTTYP="K2":2,ZCTTYP="E1":3,ZCTTYP="E2":4,ZCTTYP="D1":5,1:"")
  1. I $P(IVMSEG,HLFS,$E(IVMPIECE,1,2))]"" D
  1. .; -set var IVMFLD to incoming HL7 field
  1. .I 'IVMADFLG S IVMFLD=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2))
  1. .;IVM*2.0*188-convert "" to @
  1. .I IVMFLD="""""" S IVMFLD="@"
  1. .; - if HL7 name format convert to FM
  1. .I IVMXREF["ZCT03" S IVMFLD=$$FMNAME^HLFNC(IVMFLD)
  1. .I IVMFLD="@," S IVMFLD="@" ;IVM*2.0*188
  1. .; - ZCT05 as the ZCT address field is 5 ~ pieces
  1. .I IVMXREF["ZCT05" D
  1. ..S IVMADDR=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2)),IVMPIECE=$E(IVMPIECE,3)
  1. ..S IVMFLD=$P(IVMADDR,$E(HLECH),IVMPIECE),IVMADFLG=1
  1. ..;IVM*2.0*188-convert "" to @
  1. ..I IVMFLD="""""" S IVMFLD="@" Q
  1. ..I IVMFLD]"",IVMPIECE=4 S IVMFLD=$O(^DIC(5,"C",IVMFLD,0))
  1. ..I IVMFLD]"",IVMPIECE=5 S X=IVMFLD D ZIPIN^VAFADDR S IVMFLD=$G(X)
  1. .I IVMADFLG D STORE^IVMPREC9 Q
  1. .; - if HL7 dt convert to FM dt
  1. .I IVMXREF["ZCT10" S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
  1. .; - execute code on the 1 node and get DHCP field
  1. .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. .;IVM*2.0*188-convert "" to @
  1. .I IVMFLD="""""" S IVMFLD="@"
  1. .; if field from IVM <> DHCP-store for upload
  1. .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. .I IVMXREF["ZCT10" D
  1. ..I IVMFLD]"",(IVMFLD>IVMDHCP) S UPDAUPG(ZCTTYP)=1
  1. Q
  1. ;
  1. ZEM ; - compare ZEM with DHCP
  1. S IVMADFLG=0
  1. S IVMPIECE=$E(IVMXREF,4,7)
  1. S IVMSEG=$$CLEARF^IVMPRECA(IVMSEG,HLFS)
  1. Q:$P(IVMSEG,HLFS,2)'=$S($E(IVMXREF,$L(IVMXREF))="S":2,1:1)
  1. I $P(IVMSEG,HLFS,$E(IVMPIECE,1,2))]"" D
  1. .; - set var IVMFLD to incoming HL7 field
  1. .I 'IVMADFLG S IVMFLD=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2))
  1. .; - ZEM06 as the ZEM addr containing 5 ~ pieces
  1. .I IVMXREF["ZEM06" D
  1. ..S IVMADDR=$P(IVMSEG,HLFS,$E(IVMPIECE,1,2)),IVMPIECE=$E(IVMPIECE,3)
  1. ..S IVMFLD=$P(IVMADDR,$E(HLECH),IVMPIECE) ;,IVMADFLG=1
  1. ..I IVMFLD]"",IVMPIECE=4 S IVMFLD=$O(^DIC(5,"C",IVMFLD,0))
  1. ..I IVMFLD]"",IVMPIECE=5 S X=IVMFLD D ZIPIN^VAFADDR S IVMFLD=$G(X)
  1. .; - if HL7 dt convert to FM dt
  1. .I IVMXREF["ZEM09" S IVMFLD=$$FMDATE^HLFNC(IVMFLD)
  1. .S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. .I $E(IVMXREF,1,6)="ZEM062",IVMFLD'=IVMDHCP S ZEMADRUP(IVMXREF)=1 D STORE^IVMPREC9 Q
  1. .I IVMFLD]"",(IVMFLD'=IVMDHCP) D STORE^IVMPREC9
  1. Q
  1. ;
  1. RF1 ; -compare RF1 with DHCP
  1. S IVMPIECE=$E(IVMXREF,4),IVMADFLG=1,RF1TYPE=$P(IVMSEG,HLFS,3)
  1. ;Delete the comm data (Email, Cell and Pager) if not in Z05.
  1. ;Remove from EPCDEL if Data exist in Z05. Comm. fields in EPCDEL deleted after updating all incoming data.
  1. ;IVM*2.0*164-Don't Kill if PHH
  1. I RF1TYPE'="PHH" K EPCDEL(RF1TYPE)
  1. ;if RF1 field is SEQ6, then parse subcomponents
  1. I RF1TYPE="SAD",((IVMXREF="RF161")!(IVMXREF="RF162")!(IVMXREF="RF171")) D RF1PROC
  1. ;IVM*2.0*164-Uncomment Conf and Add Res
  1. I RF1TYPE="CAD",((IVMXREF="RF161CA")!(IVMXREF="RF162CA")!(IVMXREF="RF171CA")) D RF1PROC
  1. I RF1TYPE="RAD",((IVMXREF="RF161RA")!(IVMXREF="RF162RA")!(IVMXREF="RF171RA")) D RF1PROC
  1. ;
  1. I RF1TYPE="CPH",((IVMXREF="RF161C")!(IVMXREF="RF162C")!(IVMXREF="RF171C")) D RF1PROC
  1. I RF1TYPE="PNO",((IVMXREF="RF161B")!(IVMXREF="RF162B")!(IVMXREF="RF171B")) D RF1PROC
  1. I RF1TYPE="EAD",((IVMXREF="RF161E")!(IVMXREF="RF162E")!(IVMXREF="RF171E")) D RF1PROC
  1. I RF1TYPE="PHH",((IVMXREF="RF161P")!(IVMXREF="RF162P")!(IVMXREF="RF171P")) D RF1PROC ;IVM*2*152
  1. ;IVM*2.0*214 - PHONE NUMBER [WORK] Change Date/Time
  1. I RF1TYPE="PHW",(IVMXREF="RF171PW") D RF1PROC
  1. ;IVM*2.0*164-LAST RF1 change
  1. I '$$RF1CHK^IVMPREC6(IVMRTN,IVMDA),IVMXREF="RF171RA" D ;Last RF1
  1. . I $$AUTOEPC^IVMPREC9(DFN,.UPDEPC)
  1. . N NOUPDT,NOPHUP S (NOUPDT,NOPHUP)=0 ;IVM*2*152
  1. . I 'UPDEPC("SAD") S NOUPDT=1
  1. . ;Always keep NOPHUP=0 so Home ph is not handled here
  1. . K UPPHN
  1. . I $$AUTOADDR^IVMLDEM6(DFN,1,NOUPDT,NOPHUP)
  1. Q
  1. ;
  1. RF1PROC ;
  1. N IVMEPC
  1. I $P(IVMSEG,HLFS,IVMPIECE)]"" D
  1. .;if RF1 field is SEQ6, parse subcomponents
  1. .I IVMXREF["RF16" D Q
  1. ..;- get data containing 4 ~ pieces
  1. ..S IVMRFDAT=$P(IVMSEG,HLFS,6)
  1. ..S IVMPIECE=$E(IVMXREF,5),IVMFLD=$P(IVMRFDAT,"~",IVMPIECE)
  1. ..;KUM-164-SET IVMEPC TO NONBLANK
  1. ..;S IVMEPC=$E(IVMXREF,6)
  1. ..S IVMEPC=""
  1. ..I (IVMXREF="RF162E")!(IVMXREF="RF162C")!(IVMXREF="RF162B")!(IVMXREF="RF162P") S IVMEPC="2"
  1. ..I IVMPIECE=2 S IVMFLD=$S(IVMEPC'="":$$EPCSRCC(IVMFLD),1:$$ADDRCNV(IVMFLD))
  1. ..Q:IVMFLD=""
  1. ..D STORE^IVMPREC9
  1. .I IVMXREF["RF17" D Q
  1. ..;get address/telecomm change date/tm field
  1. ..S IVMFLD=$$FMDATE^HLFNC($P(IVMSEG,HLFS,7))
  1. ..Q:IVMFLD=""
  1. ..;IVM*2*171 - If RF1 type is PHH,home ph is null in PID (IVMPHDFG)
  1. ..;deletion IF incoming num change dt/tm is > change dt/tm in #2 rec
  1. ..S:$P($G(TELECOM("PRN")),"~",1)="" IVMPHDFG=1
  1. ..I RF1TYPE="PHH",+IVMPHDFG,+$$GET1^DIQ(2,DFN_",",.1321,"I") D
  1. ...S:+$$GET1^DIQ(2,DFN_",",.1321,"I")<IVMFLD EPCDEL("PHH")=".131^.1321^.1322^.1323"
  1. ..D STORE^IVMPREC9
  1. ..;164-Uncomment Conf and Add Res
  1. ..I RF1TYPE="CAD",$P($G(ADDRESS("CA")),HLFS)]"" D Q
  1. ...S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. ...I IVMFLD]"",(IVMFLD>IVMDHCP) S UPDAUPG("CA")=1
  1. ..I RF1TYPE="RAD",$P($G(ADDRESS("R")),HLFS)]"" D Q
  1. ...S IVMDHCP="" X:$D(^IVM(301.92,+IVMDEMDA,1)) ^(1) S IVMDHCP=Y
  1. ...I IVMFLD]"",(IVMFLD>IVMDHCP) S UPDAUPG("RA")=1
  1. ..; check for auto-upload
  1. ..S IVMDHCP=$S(RF1TYPE="SAD":$P($G(^DPT(DFN,.11)),HLFS,13),RF1TYPE="CPH":$P($G(^DPT(DFN,.13)),HLFS,9),RF1TYPE="PNO":$P($G(^DPT(DFN,.13)),HLFS,12),RF1TYPE="EAD":$P($G(^DPT(DFN,.13)),HLFS,6),1:"")
  1. ..;IVM*2.0*214 - Get PHONE NUMBER [WORK] from #2
  1. ..I IVMDHCP="" S IVMDHCP=$S(RF1TYPE="PHH":$P($G(^DPT(DFN,.132)),HLFS,1),RF1TYPE="PHW":$P($G(^DPT(DFN,.132)),HLFS,6),RF1TYPE="RAD":$P($G(^DPT(DFN,.115)),HLFS,11),1:"")
  1. ..;IVM*2.0*215-If Last update is MPI, Accept
  1. ..I IVMFLD]"",($$GET1^DIQ(2,DFN_",",.1324,"E")["PSUSER,APPLICATION PROXY"),RF1TYPE="PHH" S UPDEPC(RF1TYPE)=$G(EPCFARY(RF1TYPE))
  1. ..I IVMFLD]"",(IVMFLD>IVMDHCP) D
  1. ...S UPDEPC(RF1TYPE)=$G(EPCFARY(RF1TYPE))
  1. ...I RF1TYPE="SAD" S UPDEPC("SAD")=1
  1. ...; 167-Make Home ph rec auto-upload to Patient
  1. ...;I RF1TYPE="PHH" S UPDEPC("PHH")=1 ;IVM*2*152
  1. Q
  1. ADDRCNV(ADDRSRC) ;convert Addr Source from HL7 to DHCP
  1. ;
  1. Q:$G(ADDRSRC)']"" ""
  1. Q:ADDRSRC="USVAHEC" "HEC"
  1. Q:ADDRSRC="USVAMC" "VAMC"
  1. Q:ADDRSRC="USVAHBSC" "HBSC"
  1. Q:ADDRSRC="USNCOA" "NCOA"
  1. Q:ADDRSRC="USVABVA" "BVA"
  1. Q:ADDRSRC="USVAINS" "VAINS"
  1. Q:ADDRSRC="USPS" "USPS"
  1. Q:ADDRSRC="LACS" "LACS"
  1. Q:ADDRSRC="USVOA" "VOA"
  1. Q:ADDRSRC="VET360" "VET360"
  1. Q ""
  1. EPCSRCC(EPCSRC) ;Convert Email, Cell, Pager Change Source from HL7 to DHCP
  1. ;
  1. Q:$G(EPCSRC)']"" ""
  1. Q:EPCSRC="USVAHEC" "HEC"
  1. Q:EPCSRC="USVAMC" "VAMC"
  1. Q:EPCSRC="USVAHBSC" "HBSC"
  1. Q:EPCSRC="USVOA" "VOA"
  1. Q:EPCSRC="VET360" "VET360"
  1. Q ""
  1. BAICONV(BAISRC) ;Convert Bad addr source from HL7 to DHCP format
  1. Q:$G(BAISRC)']"" ""
  1. Q:BAISRC="VAB1" 1
  1. Q:BAISRC="VAB2" 2
  1. Q:BAISRC="VAB3" 3
  1. Q:BAISRC="VAB4" 4
  1. Q ""
  1. CONVPH(PH) ;remove special chars/spaces from Ph
  1. ;*168 Check format, quit if OK else strip and return if not 10 num
  1. ;Format if 10 numeric.
  1. Q:PH?1"(".3N.1")".3N.1"-".4N PH
  1. S PH=$TR(PH," )(/#\-","")
  1. Q:PH'?10N PH
  1. Q "("_$E(PH,1,3)_")"_$E(PH,4,6)_"-"_$E(PH,7,10)
  1. ;
  1. CNTRCONV(COUNTRY) ;Check if valid country
  1. I COUNTRY="" Q 0
  1. Q $O(^HL(779.004,"B",COUNTRY,""))
  1. CHKEMAIL(EMAIL) ;Check for Valid Email
  1. I $G(EMAIL)="" Q 0
  1. I '(EMAIL?1.E1"@"1.E1"."1.E) Q 0
  1. Q 1
  1. CONVPHAN(PH) ;Convert Alpha Phone number to Numeric
  1. S PH=$TR(PH," )(/#\-~`!@#$%^&*'|<>?,.+=_abcdefghijklmnopqrstvuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ","")
  1. Q PH