1 | MPIFBT2 ;SLC/ARS-BATCH RESPONSE FROM MPI ;FEB 4, 1997
|
---|
2 | ;;1.0; MASTER PATIENT INDEX VISTA ;**1,3,10,17,21,31,43**;30 Apr 99
|
---|
3 | ;
|
---|
4 | ; Integration Agreements Utilized:
|
---|
5 | ; ^DGCN(391.91 - #2751
|
---|
6 | ; EXC, START, STOP ^RGHLLOG - #2796
|
---|
7 | ; XMITFLAG^VAFCDD01 - #3493
|
---|
8 | ; $$PIVNW^VAFHPIVT - #3494
|
---|
9 | ;
|
---|
10 | ADDPAT ;Called when response from MPI is received for messages sent.
|
---|
11 | K ^XTMP($J,"MPIF") D NOW^%DTC S ST=%,X1=ST,X2=20 D C^%DTC
|
---|
12 | S STP=X,^XTMP($J,"MPIF","MPIIN",0)=STP_"^"_ST_"^"_"MPI BATCH JOB"
|
---|
13 | K %,X,Y,X1,X2,ST,STP N RGLOG,MPIMSG S MPIMSG=HLMTIEN
|
---|
14 | D START^RGHLLOG(HLMTIEN,"","ADDPAT^MPIFBT2")
|
---|
15 | D PREPMSG,PROCESS(MPIMSG),STOP^RGHLLOG(0)
|
---|
16 | K ACK1,ACK2,ACK3,ACK4,HDR,MPICKG,MPIIN,MPIIPPF,MPIIT,MPINUM,MPIPPF,DA
|
---|
17 | K CNTR,COM,ENC,ESC,LOCAL,MSHDR,PATID,REP,SCOM,SEP,SITE,MPIDTH,VISTDTH,MPITMP,MPICNTR,MPIFOK,^XTMP($J,"MPIF"),DGSENFLG
|
---|
18 | Q
|
---|
19 | PREPMSG ;prepare for response
|
---|
20 | N I,J,X F I=1:1 X HLNEXT Q:HLQUIT'>0 D
|
---|
21 | .S ^XTMP($J,"MPIF","MPIIN",I)=HLNODE,J=0
|
---|
22 | .F S J=$O(HLNODE(J)) Q:'J S ^XTMP($J,"MPIF","MPIIN",I,J)=HLNODE(J)
|
---|
23 | Q
|
---|
24 | PROCESS(MPIMSG) ;Process mesage out of array
|
---|
25 | N HDR,MPICNTR S MPICNTR=1,HDR=^XTMP($J,"MPIF","MPIIN",1) ;check hdr here
|
---|
26 | D CHDR(HDR,.SEP,MPICNTR,MPIMSG)
|
---|
27 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
28 | F S MPICNTR=$O(^XTMP($J,"MPIF","MPIIN",MPICNTR)) Q:'MPICNTR D LOOPS(.MPICNTR,SEP,MPIMSG)
|
---|
29 | Q
|
---|
30 | LOOPS(CNTR,SEP,MPIMSG) ;Loop in the batch
|
---|
31 | K ^XTMP($J,"MPIF","MSHERR") N MSHDR,ACK1,ACK2,ACK3,ACK4,ACK5,PATID,LOCAL,MPITMP,LICN
|
---|
32 | S MSHDR=^XTMP($J,"MPIF","MPIIN",+CNTR)
|
---|
33 | D CHKMSH(MSHDR,.SITE,SEP,MPIMSG)
|
---|
34 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
35 | S CNTR=$O(^XTMP($J,"MPIF","MPIIN",CNTR)) Q:CNTR'>0
|
---|
36 | S ACK1=^XTMP($J,"MPIF","MPIIN",CNTR)
|
---|
37 | I $P(ACK1,SEP)'="MSA" S ^XTMP($J,"MPIF","MSHERR")="NOT AN MSA SEGMENT" D EXC^RGHLLOG(203,"Around line number "_(CNTR*2)_" of message "_MPIMSG_".")
|
---|
38 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
39 | I ACK1["AR" S ^XTMP($J,"MPIF","MSHERR")="APP REJECT ERROR" D EXC^RGHLLOG(207,"Around line number "_(CNTR*2)_" of message "_MPIMSG_".")
|
---|
40 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
41 | I ACK1["AE" S ^XTMP($J,"MPIF","MSHERR")="APP ERROR" D EXC^RGHLLOG(208,"Around line number "_(CNTR*2)_" of message "_MPIMSG_".")
|
---|
42 | ;ACK1 must be an AA
|
---|
43 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
44 | S CNTR=$O(^XTMP($J,"MPIF","MPIIN",CNTR)) Q:CNTR'>0
|
---|
45 | S ACK2=^XTMP($J,"MPIF","MPIIN",CNTR)
|
---|
46 | I $P(ACK2,SEP)'="QAK" S ^XTMP($J,"MPIF","MSHERR")="NOT A QAK SEGMENT" D EXC^RGHLLOG(202,"Around line number "_(CNTR*2)_" of message "_MPIMSG_".")
|
---|
47 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
48 | I ACK2["NO DATA" D
|
---|
49 | .S ^XTMP($J,"MPIF","MSHERR")="NO DATA in MPI "
|
---|
50 | .;**43 NO DATA FOUND TRIGGER ADD
|
---|
51 | .S MPIFRPC=1 D A28^MPIFQ3($P(ACK2,SEP,2)) K MPIFRPC
|
---|
52 | .I ACK2["POTENTIAL MATCHES" D EXC^RGHLLOG(218,"Potential matches found, please review via MPI/PD Exception Handler",$P(ACK2,SEP,2))
|
---|
53 | .;.;D EXC^RGHLLOG(218,"For Patient DFN="_$P(ACK2,SEP,2)_". Use Single Patient Initialization to MPI option to manually process.",$P(ACK2,SEP,2))
|
---|
54 | .;I $D(^DPT($P(ACK2,SEP,2),0)) S LICN=$$ICNLC^MPIF001($P(ACK2,SEP,2))
|
---|
55 | .; ^ create a local ICN
|
---|
56 | .;I ACK2'["POTENTIAL MATCHES" D
|
---|
57 | .;D EXC^RGHLLOG(209,"For Patient DFN="_$P(ACK2,SEP,2)_". Need required fields before patient can be processed again the MPI.",$P(ACK2,SEP,2))
|
---|
58 | .;I $D(^DPT($P(ACK2,SEP,2),0)) S LICN=$$ICNLC^MPIF001($P(ACK2,SEP,2))
|
---|
59 | .; ^ create a local ICN
|
---|
60 | .N TACK,TCNTR S TCNTR=CNTR,CNTR=$O(^XTMP($J,"MPIF","MPIIN",CNTR)),TACK=^XTMP($J,"MPIF","MPIIN",CNTR)
|
---|
61 | .I $P(TACK,SEP)="MSH" S CNTR=TCNTR
|
---|
62 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
63 | S PATID=$P(ACK2,SEP,2),LOCAL=$G(^DPT(PATID,0)) ;Verify patient is in database
|
---|
64 | I LOCAL']"" S ^XTMP($J,"MPIF","MSHERR")="PATIENT DFN NOT IN DATABASE- BAD " D EXC^RGHLLOG(210,"Around line number "_(CNTR*2)_" DFN= "_PATID_" MESSAGE# "_MPIMSG,PATID)
|
---|
65 | S CNTR=$O(^XTMP($J,"MPIF","MPIIN",CNTR)) Q:CNTR'>0
|
---|
66 | ; **43 MOVED CNTR INCREASE TO GET TO NEXT MSH
|
---|
67 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
68 | S ACK3=^XTMP($J,"MPIF","MPIIN",CNTR) ;RDF DEFINITION SEGMENT NO-OP
|
---|
69 | I $P(ACK3,SEP)'="RDF" S ^XTMP($J,"MPIF","MSHERR")="NOT RDF SEGMENT" D EXC^RGHLLOG(204,"Around line number "_(CNTR*2)_" of message "_MPIMSG_".",PATID)
|
---|
70 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
71 | S CNTR=$O(^XTMP($J,"MPIF","MPIIN",CNTR)) Q:CNTR'>0
|
---|
72 | S RDTSEQ=1
|
---|
73 | S ACK4(RDTSEQ)=^XTMP($J,"MPIF","MPIIN",CNTR)
|
---|
74 | I $P(ACK4(RDTSEQ),SEP)'="RDT" S ^XTMP($J,"MPIF","MSHERR")="NOT RDT SEGMENT" D EXC^RGHLLOG(205,"Around line number "_(CNTR*2)_" of message "_MPIMSG_".",PATID)
|
---|
75 | ;
|
---|
76 | N RDTSQ S RDTSQ=0
|
---|
77 | F S RDTSQ=$O(^XTMP($J,"MPIF","MPIIN",CNTR,RDTSQ)) Q:'RDTSQ D
|
---|
78 | .S ACK4(RDTSEQ+1)=^XTMP($J,"MPIF","MPIIN",CNTR,RDTSQ),RDTSEQ=RDTSEQ+1
|
---|
79 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
80 | S MPITMP=$O(^XTMP($J,"MPIF","MPIIN",CNTR))
|
---|
81 | I MPITMP'>0 S:$E($G(^XTMP($J,"MPIF","MPIIN",MPITMP)),1,3)="BTS" CNTR=$O(^XTMP($J,"MPIF","MPIIN",CNTR))
|
---|
82 | Q:CNTR'>0
|
---|
83 | D VFYRDT^MPIFBT3(.ACK4,SEP,CNTR,PATID,SITE,MPIMSG)
|
---|
84 | S MPITMP=$O(^XTMP($J,"MPIF","MPIIN",CNTR))
|
---|
85 | Q:MPITMP'>0
|
---|
86 | S ACK5=^XTMP($J,"MPIF","MPIIN",MPITMP)
|
---|
87 | I $P(ACK5,SEP)="RDT" D MULT^MPIFBT3(.CNTR,ACK5,SEP,MPIMSG,PATID)
|
---|
88 | K RDTSEQ
|
---|
89 | Q
|
---|
90 | TFLIST(TFSITE,PATID) ;adding TFSITE site for patient to Treating Facility List (#391.91)
|
---|
91 | I $G(TFSITE)="" S ^XTMP($J,"MPIF","MSHERR")="Treating Facility = null" D EXC^RGHLLOG(212,"DFN = "_PATID_" Treating Facility = Null",PATID) Q
|
---|
92 | S TFSITE=$$LKUP^XUAF4(TFSITE)
|
---|
93 | Q:+TFSITE'>0
|
---|
94 | Q:$D(^DGCN(391.91,"APAT",PATID,TFSITE))
|
---|
95 | K DD,DO N DIC,X,Y L +^DGCN(391.91,0):60
|
---|
96 | I '$T D EXC^RGHLLOG(212,"Unable to Lock Treating Facility file to add patient DFN="_PATID_" Facility= "_TFSITE,PATID) Q
|
---|
97 | S DIC="^DGCN(391.91,",DIC("DR")=".02///`"_TFSITE,X=PATID,DIC(0)="LQZ"
|
---|
98 | I $D(^DGCN(391.91,"APAT",PATID,TFSITE)) L -^DGCN(391.91,0) Q
|
---|
99 | D FILE^DICN L -^DGCN(391.91,0)
|
---|
100 | I +Y=-1,'$D(^DGCN(391.91,"APAT",PATID,TFSITE)) S ^XTMP($J,"MPIF","MSHERR")="Treating Facility Add Failed" D EXC^RGHLLOG(212,"DFN= "_PATID_" Treating Facility= "_TFSITE_" failed when adding an entry to the Treating Facility file.",PATID)
|
---|
101 | K DD,DO,DIC,X,Y
|
---|
102 | Q
|
---|
103 | TFUPDT(PATID,MPIMSG,CNTR) ;treating facility update message to pivot file
|
---|
104 | N ERR,TRANS,EVDT,X,Y,%
|
---|
105 | D NOW^%DTC S EVDT=% K %,X,Y
|
---|
106 | S ERR=$$PIVNW^VAFHPIVT(PATID,EVDT,5,PATID_";DPT(")
|
---|
107 | I +ERR<1 D EXC^RGHLLOG(212,"When trying to add Patient (DFN)"_PATID_" message# "_MPIMSG_" around line number "_(CNTR*2),PATID)
|
---|
108 | Q:+ERR<1
|
---|
109 | D XMITFLAG^VAFCDD01("",+ERR)
|
---|
110 | Q
|
---|
111 | CHDR(HDR,SEP,CNTR,MPIMSG) ;Only process Batch message responses
|
---|
112 | I $P(HDR,"^")'="BHS" S ^XTMP($J,"MPIF","MSHERR")="BHS SEGMENT MISSING" D EXC^RGHLLOG(200,"for message "_MPIMSG_". The segment contains "_HDR)
|
---|
113 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
114 | S SEP=$G(HL("FS")) ;get field sep, and encoding characters
|
---|
115 | I SEP="" S ^XTMP($J,"MPIF","MSHERR")="Missing field seperator" D EXC^RGHLLOG(200,"Missing field seperator")
|
---|
116 | Q
|
---|
117 | CHKMSH(MSHDR,SITE,SEP,MPIMSG) ;VERIFY MSH
|
---|
118 | I $P(MSHDR,SEP)="BTS" S ^XTMP($J,"MPIF","MSHERR")="BTS FOUND" Q
|
---|
119 | S:$P(MSHDR,SEP)'="MSH" ^XTMP($J,"MPIF","MSHERR")="NOT MSH HEADER MESSAGE# "_MPIMSG
|
---|
120 | S:$E(MSHDR,4)'=SEP ^XTMP($J,"MPIF","MSHERR")="FIELD SEPARATOR MISMATCH MESSAGE# "_MPIMSG
|
---|
121 | I $D(^XTMP($J,"MPIF","MSHERR")) D EXC^RGHLLOG(201,$G(^XTMP($J,"MPIF","MSHERR")))
|
---|
122 | Q:$D(^XTMP($J,"MPIF","MSHERR"))
|
---|
123 | S SITE=$P(MSHDR,SEP,6)
|
---|
124 | I SITE="" S ^XTMP($J,"MPIF","MSHERR")="SITE NOT IN MSH"
|
---|
125 | I $D(^XTMP($J,"MPIF","MSHERR")) D EXC^RGHLLOG(8,"MSH Doesn't Have SITE as 6th piece. MESSAGE# "_MPIMSG)
|
---|
126 | Q
|
---|