1 | MPIFA43 ;BIR/DLR-Utility for processing an ADT-A43 Un-link ID ;MAR 18, 2002
|
---|
2 | ;;1.0; MASTER PATIENT INDEX VISTA ;**22,41,46**;30 Apr 99;Build 5
|
---|
3 | DBIA ; Supported IA's
|
---|
4 | ;
|
---|
5 | ;IA: 2796 - EXC, START, and STOP^RGHLLOG
|
---|
6 | ;IA: 2988 - $$DELALLTF and $$DELETETF^VAFCTFU
|
---|
7 | ;IA: 3767 - PIDP^RGADTP1
|
---|
8 | ;
|
---|
9 | IN ;Entry point for processing ADT-A43 - Move patient information
|
---|
10 | ;Called from the MPIF ADT-A43 CLIENT protocol processing routine
|
---|
11 | ;There are no inputs or outputs
|
---|
12 | ;
|
---|
13 | N MPIF,STATN,MPIFI,MSG,SG,MPIFARR,PDFN,INST,MFUPT,PDLT,TFIEN,ICNAUTH,MPISITE,MRG
|
---|
14 | N ICN,HLCOMP,CNT,X,MPIFERR,MPIFX,MPIDFN,MPISSN,ERROR,DFN,NODE,CMOR2,PID,ARRAY
|
---|
15 | S MPISSN="",MPIDFN="",ICN="",ERROR=""
|
---|
16 | INIT ;Process in the ADT-A43 Move Patient Identifier msg
|
---|
17 | F MPII=1:1 X HLNEXT Q:HLQUIT'>0 S MSG=HLNODE D
|
---|
18 | .S MPIJ=0 F S MPIJ=$O(HLNODE(MPIJ)) Q:'MPIJ S MSG(MPIJ)=HLNODE(MPIJ)
|
---|
19 | .S SG=$E(HLNODE,1,3),MPIF(MPII)=HLNODE D:SG?2A1(1A,1N) PICK
|
---|
20 | .;**45 ABOVE TO REPLACE COMMENTED LINE BELOW
|
---|
21 | ;F MPIFI=1:1 X HLNEXT Q:HLQUIT'>0 S (MSG,MPIF(MPIFI))=HLNODE,SG=$E(HLNODE,1,3) D:SG?2A1(1A,1N) PICK
|
---|
22 | D MOVE(.ARRAY,.ERROR)
|
---|
23 | ;create response message
|
---|
24 | S CNT=1
|
---|
25 | S HLA("HLA",1)="MSA"_HL("FS")_$S($G(ERROR)=0:"AA",1:"AE")_HL("FS")_HL("MID")_HL("FS")_$S($G(ERROR)=0:"",1:$P(ERROR,"^",2)) S CNT=CNT+1
|
---|
26 | D ROUTE
|
---|
27 | ;Send back the appl. ack (ACK) with the ADT-A43 transaction status
|
---|
28 | D GENACK^HLMA1(HL("EID"),HLMTIENS,HL("EIDS"),"LM",1,.MPIFERR,"",.HLP)
|
---|
29 | Q
|
---|
30 | PICK ;check routine for segment entry point
|
---|
31 | I $T(@SG)]"" D @SG
|
---|
32 | I $T(@SG)="" Q
|
---|
33 | Q
|
---|
34 | MSH ;;MSH
|
---|
35 | ;process the MSH segment
|
---|
36 | S (HLFS,HL("FS"))=$E(MSG,4),(HLECH,HL("ECH"))=$E(MSG,5,8)
|
---|
37 | S HLCOMP=$E(HL("ECH"),1)
|
---|
38 | S MPIFARR("SENDING SITE")=$P(MSG,HL("FS"),4)
|
---|
39 | Q
|
---|
40 | EVN ;;EVN
|
---|
41 | ;process the EVN segment
|
---|
42 | S STATN=+$$SITE^VASITE()_"^"_$$FMDATE^HLFNC($P(MSG,HL("FS"),3))
|
---|
43 | Q
|
---|
44 | PID ;;PID
|
---|
45 | ;process the PID segment
|
---|
46 | N COMP,REP,SUBCOMP,AUTH,IDTYP,LOC,AUTHTYP,MPIJ
|
---|
47 | S COMP=$E(HL("ECH"),1),SUBCOMP=$E(HL("ECH"),4),REP=$E(HL("ECH"),2)
|
---|
48 | S MPIJ=$P(MSG,HL("FS"),2)
|
---|
49 | D PIDP^RGADTP1(.MSG,.ARRAY,.HL)
|
---|
50 | ;ARRAY("ICN") = NEW ICN and ARRAY("DFN") = mismatched record to be corrected
|
---|
51 | Q
|
---|
52 | PD1 ;processing PD1 fields for new CMOR
|
---|
53 | N COMP
|
---|
54 | S COMP=$E(HL("ECH"),1)
|
---|
55 | S ARRAY("CMOR")=$P($P(HLNODE,HL("FS"),4),COMP,3)
|
---|
56 | Q
|
---|
57 | MRG ;
|
---|
58 | N COMP,REP,SUBCOMP,AUTH,IDTYP,LOC,AUTHTYP,FID,ID
|
---|
59 | S COMP=$E(HL("ECH"),1),SUBCOMP=$E(HL("ECH"),4),REP=$E(HL("ECH"),2)
|
---|
60 | N MPIFX,ID,AUTH
|
---|
61 | S FID=$P(MSG,HL("FS"),2)
|
---|
62 | F MPIFX=1:1:$L(FID,REP)+1 S ID=$P(FID,REP,MPIFX),PID=$P(ID,COMP),AUTH=$P($P(ID,COMP,4),SUBCOMP),AUTHTYP=$P($P(ID,COMP,4),SUBCOMP,2),IDTYP=$P(ID,COMP,5),LOC=$P($P(ID,COMP,6),SUBCOMP,2) D
|
---|
63 | . I AUTH="USSSA" S MPISSN=PID
|
---|
64 | . ;capture the old or mismatched ICN in ARRAY("ICNMISMATCH")
|
---|
65 | . I AUTH="USVHA" I IDTYP="NI" S (ARRAY("ICNMISMATCH"),ICN)=PID S ARRAY("ICNMISMATCHLOC")=LOC
|
---|
66 | . I AUTH="USVHA" I IDTYP="PI" S MPIDFN=PID S ARRAY("DFNLOC")=LOC
|
---|
67 | Q
|
---|
68 | RSP ;response process logic entry point
|
---|
69 | Q
|
---|
70 | ROUTE ;routing logic entry point
|
---|
71 | N MPI S MPI=$$MPILINK^MPIFAPI() D
|
---|
72 | .I $P($G(MPI),U)'=-1 S HLL("LINKS",1)="MPIF ADT-A43 CLIENT"_"^"_MPI
|
---|
73 | .I $P($G(MPI),U)=-1 D
|
---|
74 | ..N RGLOG D START^RGHLLOG(HLMTIEN,"","")
|
---|
75 | ..D EXC^RGHLLOG(224,"No MPI link identified ",$G(PDFN))
|
---|
76 | ..D STOP^RGHLLOG(0)
|
---|
77 | Q
|
---|
78 | MOVE(ARRAY,ERROR) ;
|
---|
79 | ;replace ARRAY("ICNMISMATCHED") with ARRAY("ICN")
|
---|
80 | N MPIARR
|
---|
81 | S ERROR=0
|
---|
82 | ;I ARRAY("DFNLOC")="" OLD MESSAGING SO USE ARRAY("ICNMISMATCHLOC")
|
---|
83 | I $G(ARRAY("DFNLOC"))="" S ARRAY("DFNLOC")=ARRAY("ICNMISMATCHLOC")
|
---|
84 | I $G(ARRAY("CMOR"))="" S ARRAY("CMOR")=ARRAY("DFNLOC")
|
---|
85 | ;if assigning authority'= site station# then Quit because this is not the mismatched site so MFN-M05 sent as a result of site removal on MPI will remove it from all sites TF list
|
---|
86 | I ARRAY("DFNLOC")'=$P($$SITE^VASITE,"^",3) D Q
|
---|
87 | .;if assigning authority '= site station# then remove assigning authority from TF list for the given ICN
|
---|
88 | .N MPISITE S MPISITE=$$IEN^XUAF4(ARRAY("DFNLOC"))
|
---|
89 | . I ARRAY("DFNLOC")'>0 S ERROR="-1^Unable to remove station#"_ARRAY("DFNLOC")_" from TF list" Q
|
---|
90 | . I +ARRAY("DFNLOC")>0 S ERROR=$$DELETETF^VAFCTFU(+ARRAY("ICNMISMATCH"),MPISITE)
|
---|
91 | ;delete all TF's for this mismatched record
|
---|
92 | S ERROR=$$DELALLTF^VAFCTFU(ARRAY("ICNMISMATCH"))
|
---|
93 | ;if ARRAY("DFN")="" assume this is old message format and use ARRAY("ICNMISMATCHED") to get the DFN that was mismatched
|
---|
94 | I $G(ARRAY("DFN"))="" D Q
|
---|
95 | . S ARRAY("DFN")=$$GETDFN^MPIF001(ARRAY("ICNMISMATCH")) I +ARRAY("DFN")'>0 S ERROR="-1^Unable to break ICN "_ARRAY("ICNMISMATCH")_" because that ICN is unknown"
|
---|
96 | . Q:+$G(ERROR)=-1
|
---|
97 | . S MPIARR(991.01)="@",MPIARR(991.02)="@",MPIARR(991.03)="@",MPIARR(991.05)="@",MPIARR(992)=$P(ARRAY("ICNMISMATCH"),"V"),MPIARR(993)=$P($$SITE^VASITE,"^")
|
---|
98 | . S ERROR=$$UPDATE^MPIFAPI(ARRAY("DFN"),"MPIARR",1)
|
---|
99 | ;if new messaging
|
---|
100 | I ARRAY("ICN")'="""" D
|
---|
101 | . ;delete the entry first to prevent the ICN from going into history
|
---|
102 | . S MPIARR(991.01)="@",MPIARR(991.02)="@",MPIARR(991.03)="@",MPIARR(991.05)="@",MPIARR(992)=$P(ARRAY("ICNMISMATCH"),"V"),MPIARR(993)=$P($$SITE^VASITE,"^")
|
---|
103 | . S ERROR=$$UPDATE^MPIFAPI(ARRAY("DFN"),"MPIARR",1)
|
---|
104 | . ;update the record with the new ICN
|
---|
105 | . S MPIARR(991.01)=$P(ARRAY("ICN"),"V"),MPIARR(991.02)=$P(ARRAY("ICN"),"V",2),MPIARR(991.03)=$$IEN^XUAF4(ARRAY("CMOR")),MPIARR(991.05)="@",MPIARR(992)=$P(ARRAY("ICNMISMATCH"),"V"),MPIARR(993)=$P($$SITE^VASITE,"^")
|
---|
106 | ;move the mismatched record from ARRAY("ICNMISMATCH") to ARRAY("ICN")
|
---|
107 | S ERROR=$$UPDATE^MPIFAPI(ARRAY("DFN"),"MPIARR",1)
|
---|
108 | ;add LOCAL site to TF, if CMOR is different it will be auto added
|
---|
109 | D FILE^VAFCTFU(ARRAY("DFN"),+$$SITE^VASITE,1)
|
---|
110 | Q
|
---|