1 | MPIFRES ;SF/CMC-LOCAL AND MISSING ICN RESOLUTION ;JUL 13, 1998
|
---|
2 | ;;1.0; MASTER PATIENT INDEX VISTA ;**1,7,10,15,17,21,26,28,33,35,43,39**;30 Apr 99;Build 3
|
---|
3 | ;
|
---|
4 | ; Integration Agreements Utilized:
|
---|
5 | ; EXC, START and STOP^RGHLLOG - #2796
|
---|
6 | ; ^DPT("AICNL", ^DPT("AMPIMIS" - #2070
|
---|
7 | ; ^RGHL7(991.1 - #3259
|
---|
8 | ; ^RGSITE - #2746
|
---|
9 | ;
|
---|
10 | BKG ;
|
---|
11 | I $D(ZTQUEUED) D GO Q
|
---|
12 | S ZTRTN="GO^MPIFRES",ZTDESC="USE HL7 MSGS AND MAIL TO BUILD ICN"
|
---|
13 | S ZTIO="",ZTDTH=$$FMADD^XLFDT($$NOW^XLFDT,0,0,1,0)
|
---|
14 | I $D(DUZ) S ZTSAVE("DUZ")=DUZ
|
---|
15 | D ^%ZTLOAD
|
---|
16 | D HOME^%ZIS K IO("Q")
|
---|
17 | K ZTDESC,ZTDTH,ZTIO,ZTQUEUED,ZTREQ,ZTRTN,ZTSAVE,ZTSK,%
|
---|
18 | Q
|
---|
19 | ;
|
---|
20 | GO ;ENTRY POINT
|
---|
21 | N MPIMORE,MPITOT
|
---|
22 | L +^XTMP("MPIF RESOLUTION"):3 E Q
|
---|
23 | I $D(ZTQUEUED) S ZTREQ="@"
|
---|
24 | ;
|
---|
25 | K ^TMP("HLS",$J),STOP
|
---|
26 | D START^RGHLLOG()
|
---|
27 | D HLRDF
|
---|
28 | I $D(STOP) K STOP Q ;patch 7 added to quit if init returned an error
|
---|
29 | D LOOP
|
---|
30 | I $D(^TMP("HLS",$J)) D SEND
|
---|
31 | D STOP^RGHLLOG(0)
|
---|
32 | K MPIIT,MPITOT,HLDT,HLDT1,MPICNT,MPIDNUM,MPIEROR,MPIMIDT,MPIMSH
|
---|
33 | K MPIOUT,MPIQRYNM,MPISEQ,QCNT,MPIMCNT,MPIMTX,ENDT,MPIFRES
|
---|
34 | L -^XTMP("MPIF RESOLUTION")
|
---|
35 | ; mark job completion date/time
|
---|
36 | S $P(^RGSITE(991.8,1,0),"^",4)=$$NOW^XLFDT
|
---|
37 | Q
|
---|
38 | ;
|
---|
39 | HLRDF ;
|
---|
40 | S (MPIOUT,MPIMCNT)=""
|
---|
41 | S HL("ECH")="^~\&"
|
---|
42 | S HL("FS")="|"
|
---|
43 | D INIT^HLFNC2("MPIF ICN-Q02 SERVER",.HL)
|
---|
44 | I $O(HL("")) D EXC^RGHLLOG(220,"INIT^HLFNC2 call error returned") S STOP="" Q
|
---|
45 | D CREATE^HLTF(.MPIMCNT,.MPIMTX,.HLDT,.HLDT1)
|
---|
46 | Q
|
---|
47 | LOOP ;
|
---|
48 | S (MPICNT,MPIDNUM)=1
|
---|
49 | D MAKE
|
---|
50 | Q
|
---|
51 | SEND ;ready to send
|
---|
52 | D GENERATE^HLMA("MPIF ICN-Q02 SERVER","GB",1,.MPIMTX,.MPIEROR,.MPIMORE)
|
---|
53 | I +MPIEROR=0 D EXC^RGHLLOG(220,"GENERATE^HLMA call returned error") Q
|
---|
54 | K %,MPIMTX,MPIEROR,MPIMORE
|
---|
55 | K ^TMP("HLS",$J)
|
---|
56 | Q
|
---|
57 | MAKE ;
|
---|
58 | N LOCAL,MPIIT,TICN,STOP,X,Y,%,%H,%I,TODAY,SITE,XX,SDT,NDT
|
---|
59 | S LOCAL="",MPIIT=0,MPIFRES="",SITE=$P($$SITE^VASITE(),"^",3)
|
---|
60 | D NOW^%DTC S TODAY=X
|
---|
61 | ;local ICNs
|
---|
62 | F S MPIIT=$O(^DPT("AICNL",1,MPIIT)) Q:MPIIT="" D
|
---|
63 | .; LINE BELOW ADDED FOR PATCH 26 TO CLEANUP AICNL X-REF WHEN LEFT AROUND
|
---|
64 | .I $E($$GETICN^MPIF001(MPIIT),1,3)'=SITE S XX=$$SETLOC^MPIF001(MPIIT,0) K ^DPT("AICNL",1,MPIIT) Q
|
---|
65 | .;Q:+$G(^DPT("AICNL",1,MPIIT))=1 **39 changing check
|
---|
66 | .Q:+$G(^DPT("AICNL",1,MPIIT))=2&($P($G(^DPT("AICNL",1,MPIIT)),"^",2)=TODAY)
|
---|
67 | .; ^ check if A28 failed to get ICN back and should now be sent up
|
---|
68 | .; DON'T send if is the 2^today **35
|
---|
69 | .S SDT=$P($G(^DPT("AICNL",1,MPIIT)),"^",2)
|
---|
70 | .N X1,X2 K X S X1=SDT,X2=2 D C^%DTC S NDT=X ;**39 FIGURE 2 DAYS FROM NOW
|
---|
71 | .Q:+$G(^DPT("AICNL",1,MPIIT))=1&(SDT=TODAY)
|
---|
72 | .; **39 ^ if send up today don't send again
|
---|
73 | .Q:+$G(^DPT("AICNL",1,MPIIT))=1&(NDT>TODAY)
|
---|
74 | .;**39 ^ only send patient to MPI for Local ICN resolution 1 time UNLESS its day 3 since it was sent
|
---|
75 | .;I $D(^RGHL7(991.1,"ADFN",218,MPIIT)) S ^DPT("AICNL",1,MPIIT)="1^"_TODAY Q
|
---|
76 | .; ^ checking if potential match exception **43 REMOVE CHECK ON POTENTIAL MATCH EXCEPTIONS
|
---|
77 | .D MAKE3
|
---|
78 | ;missing ICNs
|
---|
79 | S MPIIT=0
|
---|
80 | F S MPIIT=$O(^DPT("AMPIMIS",MPIIT)) Q:MPIIT="" D
|
---|
81 | .K STOP
|
---|
82 | .I $D(^DPT(MPIIT,-9)) K ^DPT("AMPIMIS",MPIIT) Q ;**43 CHECK IF MERGED PATIENT AND CLEANUP CROSS REFERENCE
|
---|
83 | .S TICN=+$$GETICN^MPIF001(MPIIT)
|
---|
84 | .I TICN<0 L +^DPT(MPIIT):5 I '$T Q ;**35
|
---|
85 | .L -^DPT(MPIIT,0) ;**35
|
---|
86 | .;**35 If don't have ICN yet, try to lock if can't get lock skip record - still creating patient.
|
---|
87 | .I TICN<0,'$D(STOP) D MAKE3
|
---|
88 | .I TICN>0 K ^DPT("AMPIMIS",MPIIT)
|
---|
89 | Q
|
---|
90 | MAKE3 ;
|
---|
91 | K MPIOUT
|
---|
92 | S MPIFRES=""
|
---|
93 | S:$G(MPIQRYNM)="" MPIQRYNM="EXACT_MATCH_QUERY" ;**43 changed MPIQRYNM from VTQ_PID_ICN_LOAD_1 to stop automatic add pts on the MPI
|
---|
94 | D VTQ1^MPIFVTQ(MPIIT,.MPIOUT,.HL,.MPIQRYNM)
|
---|
95 | I $P(MPIOUT(0),"^")<0,$P(MPIOUT(0),"^",2)="invalid DFN"!($P(MPIOUT(0),"^",2)="no encoding characters") D EXC^RGHLLOG(206,"DFN = "_MPIIT_" Problem with building VTQ was "_$P(MPIOUT(0),"^",2),MPIIT) Q
|
---|
96 | ;I $P(MPIOUT(0),"^")<0,$P(MPIOUT(0),"^",2)="Missing Required Field(s)" Q
|
---|
97 | ;Q:$P(MPIOUT(0),"^")<0
|
---|
98 | S ^DPT("AICNL",1,MPIIT)="1^"_TODAY
|
---|
99 | ; ^ mark Local ICN as having been sent to MPI for resolution
|
---|
100 | ;call for HL7 header
|
---|
101 | S MPIMIDT=MPIMCNT_"-"_MPIDNUM
|
---|
102 | D MSH^HLFNC2(.HL,MPIMIDT,.MPIMSH)
|
---|
103 | S MPIOUT(1)=MPIMSH
|
---|
104 | S ^TMP("HLS",$J,MPICNT)=MPIOUT(1)
|
---|
105 | S MPICNT=MPICNT+1
|
---|
106 | ;MESSAGE BUILT
|
---|
107 | S MPISEQ=0
|
---|
108 | ;setup VTQ segment in HL array
|
---|
109 | S ^TMP("HLS",$J,MPICNT)=MPIOUT(2)
|
---|
110 | S MPICNT=MPICNT+1
|
---|
111 | ;setup RDF segment in HL array
|
---|
112 | S ^TMP("HLS",$J,MPICNT)=MPIOUT(3)
|
---|
113 | ;loop through and add the additional RDF continuations
|
---|
114 | N SCNT,Y S Y=3,SCNT=1 F S Y=$O(MPIOUT(Y)) Q:'Y D
|
---|
115 | .S ^TMP("HLS",$J,MPICNT,SCNT)=MPIOUT(Y),SCNT=SCNT+1
|
---|
116 | S MPICNT=MPICNT+1
|
---|
117 | S MPIDNUM=MPIDNUM+1
|
---|
118 | I MPIDNUM>100 D
|
---|
119 | .D SEND
|
---|
120 | .S (MPICNT,MPIDNUM)=1
|
---|
121 | .D HLRDF
|
---|
122 | Q
|
---|