1 | MPIFBT3 ;SLC/ARS-BATCH RESPONSE FROM MPI ;FEB 4, 1997
|
---|
2 | ;;1.0; MASTER PATIENT INDEX VISTA ;**1,3,10,17,21,24,28,31,33,35,43**;30 Apr 99
|
---|
3 | ;
|
---|
4 | ; Integration Agreements Utilized:
|
---|
5 | ; ^DPT("AICN", ^DPT("AICNL", ^DPT("AMPIMIS" - #2070
|
---|
6 | ; EXC^RGHLLOG - #2796
|
---|
7 | ; FILE^VAFCTFU - #2988
|
---|
8 | ; NAME^VAFCPID2 - #3492
|
---|
9 | ;
|
---|
10 | MULT(CNTR,ACK5,SEP,MPIMSG,PATID) ;multiple RDT segments
|
---|
11 | N NEXTTF,MPITMP S CNTR=$O(^XTMP($J,"MPIF","MPIIN",CNTR)),NEXTTF=$P(ACK5,SEP,8)
|
---|
12 | S MPITMP=$O(^XTMP($J,"MPIF","MPIIN",CNTR)) Q:MPITMP'>0
|
---|
13 | S ACK5=^XTMP($J,"MPIF","MPIIN",MPITMP) K NEXTTF,MPITMP
|
---|
14 | I $P(ACK5,SEP)="RDT" D MULT(.CNTR,ACK5,SEP,MPIMSG,PATID) ; ^ add to treating facility list. If not RDT continue on processing next msh
|
---|
15 | Q
|
---|
16 | VFYRDT(ACK4,SEP,CNTR,PATID,SITE,MPIMSG) ;Here is the meat
|
---|
17 | N MPIY,IEN,MPICMOR,MPICOMP S DGSENFLG=""
|
---|
18 | S MPICOMP=$E(HL("ECH"),1)
|
---|
19 | D RDT^MPIFSA3(.CNTR,.HL,.ACK4)
|
---|
20 | D FINDHM(PATID,SEP,.MPIY,MPIMSG,CNTR)
|
---|
21 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
22 | N MPINUM,MPICKG,MPIIT,DR,DIE,X,MPIIPPF,MPIPPF,RESLT
|
---|
23 | S MPINUM=$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",6),MPICKG=$P(MPINUM,"V",2),MPINUM=$P(MPINUM,"V",1)
|
---|
24 | ;check if ICN already in use in Patient file
|
---|
25 | I $D(^DPT("AICN",MPINUM)) D
|
---|
26 | .Q:PATID=$O(^DPT("AICN",MPINUM,"")) ; same patient
|
---|
27 | .S ^XTMP($J,"MPIF","MSHERR")="ICN already in use"
|
---|
28 | .N DFN2 S DFN2=$O(^DPT("AICN",MPINUM,""))
|
---|
29 | .D TWODFNS^MPIF002(DFN2,PATID,MPINUM)
|
---|
30 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
31 | S DIE="^DPT(",DA=$P(MPIY,"^",1),MPIIT=$P(MPIY,"^",1),DR="991.01////^S X=MPINUM;991.02////^S X=MPICKG" D ^DIE K DR,DIE,DA
|
---|
32 | S IEN=$P(MPIY,"^") ; check if need to kill Local/MISSING ICN field
|
---|
33 | I $D(^DPT("AMPIMIS",IEN)) K ^DPT("AMPIMIS",IEN)
|
---|
34 | I $D(^DPT("AICNL",1,IEN)) D
|
---|
35 | .S DIE="^DPT(",DA=IEN,DR="991.04///@" D ^DIE K DR,DIE,DA
|
---|
36 | S MPIIPPF=""
|
---|
37 | S MPIPPF=$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",5),MPICMOR=$$LKUP^XUAF4(MPIPPF)
|
---|
38 | I MPICMOR'="" S MPIIPPF=$$CHANGE^MPIF001(MPIIT,MPICMOR)
|
---|
39 | I +MPIIPPF<0 D EXC^RGHLLOG(211,"Around line number "_(CNTR*2)_" CMOR= "_MPIPPF_" DFN= "_MPIIT_" MESSAGE# "_MPIMSG,MPIIT)
|
---|
40 | Q:+MPIIPPF<0
|
---|
41 | I $D(^TMP("MPIFVQQ",$J,CNTR,"TF")) D
|
---|
42 | . N MPINTFI,MPINTF,TFSTRG,TFIEN
|
---|
43 | . S MPINTFI=0,MPINTF="",TFIEN="",TFSTRG=""
|
---|
44 | . F S MPINTFI=$O(^TMP("MPIFVQQ",$J,CNTR,"TF",MPINTFI)) Q:'MPINTFI D
|
---|
45 | .. S MPINTF=^TMP("MPIFVQQ",$J,CNTR,"TF",MPINTFI)
|
---|
46 | .. S TFIEN=$$IEN^XUAF4($P(MPINTF,MPICOMP,1))
|
---|
47 | .. Q:'TFIEN
|
---|
48 | .. S TFSTRG=TFIEN_"^"_$$FMDATE^HLFNC($P(MPINTF,MPICOMP,2))_"^"_$P(MPINTF,MPICOMP,3)
|
---|
49 | .. D FILE^VAFCTFU(PATID,TFSTRG,1)
|
---|
50 | S RESLT=$$A24^MPIFA24B(PATID)
|
---|
51 | I +RESLT<0 D EXC^RGHLLOG(208,"Problem building A24 (ADD TF) for DFN= "_PATID,PATID)
|
---|
52 | K RESLT N RESLT
|
---|
53 | S RESLT=$$A31^MPIFA31B(PATID)
|
---|
54 | I +RESLT<0 D EXC^RGHLLOG(208,"Problem building A31 for DFN= "_PATID,PATID)
|
---|
55 | K ^TMP("MPIFVQQ",$J)
|
---|
56 | Q
|
---|
57 | FINDHM(PATID,SEP,MPIY,MPIMSG,CNTR) ;LOOKUP
|
---|
58 | N DIC,X,Y,NM,YTMP,MPIN,EXACT
|
---|
59 | Q:'$D(^TMP("MPIFVQQ",$J,CNTR,"DATA"))
|
---|
60 | ;added I to DIC(0) allow processing of sensitive patients when DUZ=0
|
---|
61 | S DGSENFLG="",DIC="^DPT(",DIC(0)="OISZ",X="`"_PATID D ^DIC K DIC
|
---|
62 | S YTMP=Y
|
---|
63 | I YTMP=-1 S ^XTMP($J,"MPIF","MSHERR")="LOOKUP FAILED" D EXC^RGHLLOG(210,"SSN = "_$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",3)_" MESSAGE# "_MPIMSG_" around line number "_(CNTR*2),PATID)
|
---|
64 | Q:YTMP=-1
|
---|
65 | S NM=$P(Y(0),"^"),YTMP=$G(Y(0)),MPIY=Y ; check if ICN already populated
|
---|
66 | N ICN S ICN=$$GETICN^MPIF001(PATID)
|
---|
67 | I +ICN'=-1,$E(+ICN,1,3)'=$P($$SITE^VASITE,"^",3) S ^XTMP($J,"MPIF","MSHERR")="Patient "_PATID_" Already has an ICN"
|
---|
68 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
69 | S Y(0)=$G(YTMP)
|
---|
70 | ;**43 ONLY EXACT MATCHES BEING RETURNED NO LONGER MAKE THESE CHECKES IN VISTA
|
---|
71 | ;Q:$P(Y(0),"^",9)["P"&($P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",3)="")
|
---|
72 | ;I $P(Y(0),"^",9)'=$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",3) D
|
---|
73 | ;.S ^XTMP($J,"MPIF","MSHERR")="SSN MISMATCH"
|
---|
74 | ;.D EXC^RGHLLOG(213,"SSN on File = "_$P(Y(0),"^",9)_" SSN in Message = "_$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",3)_" MESSAGE # "_MPIMSG_" around line number "_(CNTR*2),PATID)
|
---|
75 | ;.N LICN S LICN=$$ICNLC^MPIF001(PATID) ; create local ICN
|
---|
76 | ;Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
77 | ;D NAME^VAFCPID2(0,.NM,0) ; reformat name in DG 149 fashion for comparison
|
---|
78 | ;S MPIN=$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",2)_","_$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",7)
|
---|
79 | ;I $P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",10)'="" S MPIN=MPIN_" "_$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",10)
|
---|
80 | ;I $P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",15)'="" S MPIN=MPIN_" "_$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",15)
|
---|
81 | ;I $P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",14)'="" S MPIN=MPIN_" "_$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",14)
|
---|
82 | ;D NAME^VAFCPID2(0,.MPIN,0)
|
---|
83 | ; check if Last and First Match--yes-- then check if middle name vs initial
|
---|
84 | ;I $P(NM,",")=$P(MPIN,",")&($P($P(MPIN,",",2)," ")=$P($P(NM,",",2)," ")) D
|
---|
85 | ;.N MPIMID,NMMN S MPIMID=$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",10)
|
---|
86 | ;.S NMMN=$P($P(NM,",",2)," ",2)
|
---|
87 | ;.I $L(NMMN)>1&($L(MPIMID)=1),($E(NMMN,1)=MPIMID) S EXACT=1
|
---|
88 | ;.I $L(MPIMID)>1&($L(NMMN)=1),($E(MPIMID,1)=NMMN) S EXACT=1
|
---|
89 | ;I NM'=MPIN,'$D(EXACT) D
|
---|
90 | ;.S ^XTMP($J,"MPIF","MSHERR")="NAME MISMATCH"
|
---|
91 | ;.D EXC^RGHLLOG(214,"Name on File = "_$P(Y(0),"^")_" Name in Message = "_MPIN_" MESSAGE# "_MPIMSG_" around line number "_(CNTR*2),PATID)
|
---|
92 | ;.N LICN S LICN=$$ICNLC^MPIF001(PATID) ;create local ICN
|
---|
93 | ;check to see if SEX on MPI and local site match - no exception
|
---|
94 | ;I $P($G(^DPT(PATID,0)),"^",2)'=$P($G(^TMP("MPIFVQQ",$J,CNTR,"DATA")),"^",11) D
|
---|
95 | ;.S ^XTMP($J,"MPIF","MSHERR")="SEX MISMATCH"
|
---|
96 | ;.D EXC^RGHLLOG(209,"PT on MPI "_MPIN_" has gender as "_$P($G(^TMP("MPIFVQQ",$J,CNTR,"DATA")),"^",10)_" While the Patient DFN= "_PATID_" has "_$P($G(^DPT(PATID,0)),"^",2)_" msg # "_MPIMSG_" about line number "_(CNTR*2),PATID)
|
---|
97 | ;.N LICN S LICN=$$ICNLC^MPIF001(PATID) ;create local ICN
|
---|
98 | ;
|
---|
99 | ;check to see if MPI has Date of Death or if VistA has DOD
|
---|
100 | N MPIDTH,VISTDTH K %DT
|
---|
101 | I $P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",9)'="" S X=$P(^TMP("MPIFVQQ",$J,CNTR,"DATA"),"^",9) D ^%DT S MPIDTH=Y
|
---|
102 | I $D(^DPT(PATID,.35)),$P($G(^DPT(PATID,.35)),"^")'="" S VISTDTH=$P($G(^DPT(PATID,.35)),"^")\1
|
---|
103 | I $D(MPIDTH)&$D(VISTDTH),MPIDTH'=VISTDTH D
|
---|
104 | .N Y S Y=MPIDTH D DD^%DT S MPIDTH=Y,Y=VISTDTH D DD^%DT S VISTDTH=Y
|
---|
105 | .D EXC^RGHLLOG(217,"Around line "_(CNTR*2)_" VISTA DOD= "_VISTDTH_" MPI DOD= "_MPIDTH_" DFN= "_PATID_" MESSAGE# "_MPIMSG,PATID)
|
---|
106 | ; ^ BOTH HAVE DOD BUT THEY DON'T MATCH
|
---|
107 | I '$D(MPIDTH)&($D(VISTDTH)) D
|
---|
108 | .N Y S Y=VISTDTH D DD^%DT S VISTDTH=Y
|
---|
109 | .D EXC^RGHLLOG(216,"Around line "_(CNTR*2)_" VISTA DOD= "_VISTDTH_" DFN= "_PATID_" MESSAGE# "_MPIMSG,PATID)
|
---|
110 | ; ^ VISTA HAS DOD BUT MPI DOESN'T
|
---|
111 | I $D(MPIDTH)&('$D(VISTDTH)) D
|
---|
112 | .N Y S Y=MPIDTH D DD^%DT S MPIDTH=Y
|
---|
113 | .D EXC^RGHLLOG(215,"Around line "_(CNTR*2)_" MPI DOD= "_MPIDTH_" DFN= "_PATID_" MESSAGE# "_MPIMSG,PATID)
|
---|
114 | ; ^ MPI HAS DOD BUT VISTA DOESN'T
|
---|
115 | Q
|
---|