| 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
 | 
|---|