| 1 | MPIFEXT ;SFCIO/CMC-EXTENDED PDAT - RPC ;26 JUN 01
 | 
|---|
| 2 |  ;;1.0; MASTER PATIENT INDEX VISTA ;**20**;30 Apr 99
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Integration Agreements Utilized:
 | 
|---|
| 5 |  ;  ^DGCN(391.91 - #2751
 | 
|---|
| 6 |  ;  EN1^XWB2HL7 - #3144
 | 
|---|
| 7 |  ;  RTNDATA^XEBDRPC - #3149
 | 
|---|
| 8 |  ;
 | 
|---|
| 9 | PEXT(RETURN,ICN,SSN,LOCAL,ALL,SITE,RPC) ;get patient info array
 | 
|---|
| 10 |  N MPINODE,ARRAY,DFN,TICN,TSSN
 | 
|---|
| 11 |  I RPC="" S RPC=0 ; default is 0 for RPC
 | 
|---|
| 12 |  I $G(ICN)=""&($G(SSN)="") S RETURN="-1^NO ICN OR SSN PASSED" Q
 | 
|---|
| 13 |  I $G(LOCAL)=""&($G(ALL)="")&($G(SITE)="") S ALL=1
 | 
|---|
| 14 |  ; ^ All is the default
 | 
|---|
| 15 |  I LOCAL=1 D PATINFO^MPIFEXT2(.RETURN,ICN,SSN,0) Q
 | 
|---|
| 16 |  I ALL=1 D ALL(.RETURN,ICN,SSN,RPC) Q
 | 
|---|
| 17 |  I SITE'="" D SITE(.RETURN,ICN,SSN,SITE,RPC)
 | 
|---|
| 18 |  Q
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 | SITE(RETS,ICN,SSN,SITE,RPC) ;
 | 
|---|
| 21 |  ; request PDAT from one remote site
 | 
|---|
| 22 |  I $G(SITE)="" S RETS="-1^No Site Passed" Q
 | 
|---|
| 23 |  I $G(ICN)=""&($G(SSN)="") S RETS="-1^No ICN or SSN passed" Q
 | 
|---|
| 24 |  I ICN="" S EXIST=$$ASK(SSN,SITE)
 | 
|---|
| 25 |  I SSN="" S EXIST=$$ASK(ICN,SITE)
 | 
|---|
| 26 |  I EXIST=1 D
 | 
|---|
| 27 |  .I ICN="" S RETS(0)=$G(^XTMP("MPIF EXT PDAT"_SSN,SITE))
 | 
|---|
| 28 |  .I SSN="" S RETS(0)=$G(^XTMP("MPIF EXT PDAT"_ICN,SITE))
 | 
|---|
| 29 |  .I RETS(0)="" S EXIST=0
 | 
|---|
| 30 |  I EXIST=0 D
 | 
|---|
| 31 |  .I ICN="" K ^XTMP("MPIF EXT PDAT"_SSN,SITE)
 | 
|---|
| 32 |  .I SSN="" K ^XTMP("MPIF EXT PDAT"_ICN,SITE)
 | 
|---|
| 33 |  .D EN1^XWB2HL7(.RETS,SITE,"MPIF EXT PDAT REMOTE",1,ICN,SSN,1)
 | 
|---|
| 34 |  .I $G(ICN)'="" S ^XTMP("MPIF EXT PDAT"_ICN,0)=$$FMADD^XLFDT($$NOW^XLFDT,2)_"^"_$$NOW^XLFDT_"^"_"Remote data from site",^XTMP("MPIF EXT PDAT"_ICN,SITE)=RETS(0)
 | 
|---|
| 35 |  .I $G(SSN)'="" S ^XTMP("MPIF EXT PDAT"_SSN,0)=$$FMADD^XLFDT($$NOW^XLFDT,2)_"^"_$$NOW^XLFDT_"^"_"Remote data from site",^XTMP("MPIF EXT PDAT"_SSN,SITE)=RETS(0)
 | 
|---|
| 36 |  ;
 | 
|---|
| 37 |  N CNT,SUB
 | 
|---|
| 38 |  S CNT=0
 | 
|---|
| 39 | AGAIN H 2 K RES D RTNDATA^XWBDRPC(.RES,RETS(0)) S CNT=CNT+1
 | 
|---|
| 40 |  I +RES(0)=-1&(RES(0)["Not DONE") I CNT<10 G AGAIN
 | 
|---|
| 41 |  I +RES(0)=-1&(RES(0)["Not DONE") I CNT>10 S RETS(SITE)="Unable to get data" Q
 | 
|---|
| 42 |  I RES(0)="0^New" I CNT<10 G AGAIN
 | 
|---|
| 43 |  I RES(0)="0^New" I CNT>10 S RETS(SITE)="Unable to get data" Q
 | 
|---|
| 44 |  I +RES(0)=-1 S RETS=RES(0) Q
 | 
|---|
| 45 |  I RES'="" I CNT<10 G AGAIN
 | 
|---|
| 46 |  I RES'="" I CNT>10 S RETS(SITE)="Unable to get data" Q
 | 
|---|
| 47 |  D REFORMAT(.RES)
 | 
|---|
| 48 |  K RETS,EXIST
 | 
|---|
| 49 |  M RETS(SITE)=RES
 | 
|---|
| 50 |  K RES
 | 
|---|
| 51 |  Q
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 | ALL(RETS2,ICN,SSN,RPC) ;
 | 
|---|
| 54 |  ; request PDAT from ALL TFs and the MPI
 | 
|---|
| 55 |  I $G(ICN)=""&($G(SSN)="") S RETS1="-1^No ICN or SSN passed" Q
 | 
|---|
| 56 |  N DFN,ICN2
 | 
|---|
| 57 |  I ICN="" S EXIST=$$ASK(SSN,1)
 | 
|---|
| 58 |  I SSN="" S EXIST=$$ASK(ICN,1)
 | 
|---|
| 59 |  I SSN'="" S ICN=$$GETICNS^MPIF002(SSN)
 | 
|---|
| 60 |  F XX=1:1 S ICN2=$P(ICN,"^",XX) Q:ICN2=""  D
 | 
|---|
| 61 |  .S DFN=$$GETDFN^MPIF001(ICN2)
 | 
|---|
| 62 |  .I +DFN<0 S RETS2(ICN2)="-1^No such ICN" Q
 | 
|---|
| 63 |  .D ALL2(DFN,ICN2,SSN,1,.RETS2,EXIST)
 | 
|---|
| 64 |  K EXIST
 | 
|---|
| 65 |  Q
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 | ALL2(DFN,ICN,SSN,RPC,RETS1,EXIST) ;
 | 
|---|
| 68 |  D GETTFS(DFN,.ARR)
 | 
|---|
| 69 |  I +ARR=-1 G MPI
 | 
|---|
| 70 |  S SITE=""
 | 
|---|
| 71 |  F  S SITE=$O(ARR(SITE)) Q:SITE=""  D
 | 
|---|
| 72 |  .K RETS1
 | 
|---|
| 73 |  .I EXIST=1 D
 | 
|---|
| 74 |  ..I ICN="" S RETS1(0)=$G(^XTMP("MPIF EXT PDAT"_SSN,SITE))
 | 
|---|
| 75 |  ..I SSN="" S RETS1(0)=$G(^XTMP("MPIF EXT PDAT"_ICN,SITE))
 | 
|---|
| 76 |  ..I RETS1(0)="" S EXIST=0
 | 
|---|
| 77 |  .I EXIST=0 D
 | 
|---|
| 78 |  ..I ICN="" K ^XTMP("MPIF EXT PDAT"_SSN,SITE)
 | 
|---|
| 79 |  ..I SSN="" K ^XTMP("MPIF EXT PDAT"_ICN,SITE)
 | 
|---|
| 80 |  ..D EN1^XWB2HL7(.RETS1,SITE,"MPIF EXT PDAT REMOTE",1,ICN,SSN,RPC)
 | 
|---|
| 81 |  ..I $G(ICN)'="" S ^XTMP("MPIF EXT PDAT"_ICN,SITE,0)=$$FMADD^XLFDT($$NOW^XLFDT,2)_"^"_$$NOW^XLFDT_"^"_"Remote data from site",^XTMP("MPIF EXT PDAT"_ICN,SITE)=RETS1(0)
 | 
|---|
| 82 |  ..I $G(SSN)'="" S ^XTMP("MPIF EXT PDAT"_SSN,SITE,0)=$$FMADD^XLFDT($$NOW^XLFDT,2)_"^"_$$NOW^XLFDT_"^"_"Remote data from site",^XTMP("MPIF EXT PDAT"_SSN,SITE)=RETS1(0)
 | 
|---|
| 83 |  ;
 | 
|---|
| 84 | MPI K RETS1
 | 
|---|
| 85 |  I EXIST=1 D
 | 
|---|
| 86 |  .I ICN="" S RETS1(0)=$G(^XTMP("MPIF EXT PDAT"_SSN,"MPI"))
 | 
|---|
| 87 |  .I SSN="" S RETS1(0)=$G(^XTMP("MPIF EXT PDAT"_ICN,"MPI"))
 | 
|---|
| 88 |  .I RETS1(0)="" S EXIST=0
 | 
|---|
| 89 |  I EXIST=0 D
 | 
|---|
| 90 |  .I ICN="" K ^XTMP("MPIF EXT PDAT"_SSN,"MPI")
 | 
|---|
| 91 |  .I SSN="" K ^XTMP("MPIF EXT PDAT"_ICN,"MPI")
 | 
|---|
| 92 |  .D EN1^XWB2HL7(.RETS1,"MPI","MPIF EXT PDAT REMOTE",1,ICN,SSN,RPC)
 | 
|---|
| 93 |  .I $G(ICN)'="" S ^XTMP("MPIF EXT PDAT"_ICN,"MPI",0)=$$FMADD^XLFDT($$NOW^XLFDT,2)_"^"_$$NOW^XLFDT_"^"_"Remote data from site",^XTMP("MPIF EXT PDAT"_ICN,"MPI")=RETS1(0)
 | 
|---|
| 94 |  .I $G(SSN)'="" S ^XTMP("MPIF EXT PDAT"_SSN,"MPI",0)=$$FMADD^XLFDT($$NOW^XLFDT,2)_"^"_$$NOW^XLFDT_"^"_"Remote data from site",^XTMP("MPIF EXT PDAT"_SSN,"MPI")=RETS1(0)
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 |  K RETS1,RES,RESS2
 | 
|---|
| 97 |  N ZNODE,IEN
 | 
|---|
| 98 |  H 2
 | 
|---|
| 99 |  I SSN="" S IEN=ICN
 | 
|---|
| 100 |  I ICN="" S IEN=SSN
 | 
|---|
| 101 |  S SITE=""
 | 
|---|
| 102 |  F  S SITE=$O(^XTMP("MPIF EXT PDAT"_IEN,SITE)) Q:SITE=""  D
 | 
|---|
| 103 |  .S ZNODE=$G(^XTMP("MPIF EXT PDAT"_IEN,SITE))
 | 
|---|
| 104 |  .K RES
 | 
|---|
| 105 |  .D RET(.RES,SITE,ZNODE)
 | 
|---|
| 106 |  .K RETS1(SITE)
 | 
|---|
| 107 |  .M RETS1(SITE)=RES
 | 
|---|
| 108 |  .K RES
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  K RES,RESS2
 | 
|---|
| 111 |  D PATINFO^MPIFEXT2(.RESS2,ICN,SSN,0)
 | 
|---|
| 112 |  S SITE=$P($$SITE^VASITE,"^",3)
 | 
|---|
| 113 |  K RETS1(SITE)
 | 
|---|
| 114 |  M RETS1(SITE)=RESS2
 | 
|---|
| 115 |  K RESS2,ARR
 | 
|---|
| 116 |  Q
 | 
|---|
| 117 |  ;
 | 
|---|
| 118 | RET(REST,SITE,IEN) ;
 | 
|---|
| 119 |  ; RETRIEVING DATA
 | 
|---|
| 120 |  N RES1,CNT S CNT=0
 | 
|---|
| 121 | AGAIN1 H 2 K RES1,REST D RTNDATA^XWBDRPC(.RES1,IEN) S CNT=CNT+1
 | 
|---|
| 122 |  I +RES1(0)=-1&(RES1(0)["Not DONE") I CNT<10 G AGAIN1
 | 
|---|
| 123 |  I +RES1(0)=-1&(RES1(0)["Not DONE") I CNT>10 S REST(SITE)="Unable to get data" Q
 | 
|---|
| 124 |  I RES1(0)="0^New" I CNT<10 G AGAIN1
 | 
|---|
| 125 |  I RES1(0)="0^New" I CNT>10 S REST(SITE)="Unable to get data" Q
 | 
|---|
| 126 |  I +RES1(0)=-1 S REST(SITE)=RES1(0) Q
 | 
|---|
| 127 |  I RES1'="" I CNT<10 G AGAIN1
 | 
|---|
| 128 |  I RES1'="" I CNT>10 S REST(SITE)="Unable to get data" Q
 | 
|---|
| 129 |  D REFORMAT(.RES1)
 | 
|---|
| 130 |  K REST
 | 
|---|
| 131 |  M REST=RES1
 | 
|---|
| 132 |  Q
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 | GETTFS(DFN,ARRAY) ;
 | 
|---|
| 135 |  ; get list of TF station numbers for a patient (dfn)
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 |  N SITE,HERE,HSTN,CNT
 | 
|---|
| 138 |  I $D(^DGCN(391.91,"APAT",DFN))="" S ARRAY="-1^No TFs" Q
 | 
|---|
| 139 |  S HERE=+$$SITE^VASITE(),HSTN=$P($$SITE^VASITE(),"^",3)
 | 
|---|
| 140 |  S SITE="",CNT=0
 | 
|---|
| 141 |  F  S SITE=$O(^DGCN(391.91,"APAT",DFN,SITE)) Q:SITE=""  D
 | 
|---|
| 142 |  .Q:SITE=HERE
 | 
|---|
| 143 |  .S CNT=CNT+1
 | 
|---|
| 144 |  .S ARRAY($P($$NNT^XUAF4(SITE),"^",2))=""
 | 
|---|
| 145 |  I CNT=0 S ARRAY="-1^No other site TFs" Q
 | 
|---|
| 146 |  S ARRAY=CNT
 | 
|---|
| 147 |  Q
 | 
|---|
| 148 |  ;
 | 
|---|
| 149 | REFORMAT(ARRAY) ; Reformat from RPC=1 format to RPC=0 format
 | 
|---|
| 150 |  N XX,ARR,TARR
 | 
|---|
| 151 |  S XX=0
 | 
|---|
| 152 |  F  S XX=$O(ARRAY(XX)) Q:XX=""  D
 | 
|---|
| 153 |  .I XX=1 S TARR=$P(ARRAY(XX),"(")
 | 
|---|
| 154 |  .S ARR=$P(ARRAY(XX),"=")
 | 
|---|
| 155 |  .S @ARR=$P(ARRAY(XX),"=",2)
 | 
|---|
| 156 |  K ARRAY
 | 
|---|
| 157 |  M ARRAY=@TARR
 | 
|---|
| 158 |  K @TARR
 | 
|---|
| 159 |  Q
 | 
|---|
| 160 |  ;
 | 
|---|
| 161 | ASK(ICNSSN,SITE) ; Function to check if there has been a previous request
 | 
|---|
| 162 |  ; made for this ICN/SSN. If so, ask the user if they wish to view if or 
 | 
|---|
| 163 |  ; create a new request.
 | 
|---|
| 164 |  ;
 | 
|---|
| 165 |  N DIR,X,Y,SITE1
 | 
|---|
| 166 |  I '$D(^XTMP("MPIF EXT PDAT"_ICNSSN)) Q 0
 | 
|---|
| 167 |  I SITE=1 D
 | 
|---|
| 168 |  .S SITE1=0
 | 
|---|
| 169 |  .W !!,"There has been a request made for this patient to site(s): "
 | 
|---|
| 170 |  .F  S SITE1=$O(^XTMP("MPIF EXT PDAT"_ICNSSN,SITE1)) Q:SITE1=""  D
 | 
|---|
| 171 |  ..I SITE1=$P($$SITE^VASITE(),"^",3) Q
 | 
|---|
| 172 |  ..W !,SITE1,?10,$P($$NNT^XUAF4($$LKUP^XUAF4(SITE1)),"^"),?40,"made at "
 | 
|---|
| 173 |  ..N Y S Y=$P(^XTMP("MPIF EXT PDAT"_ICNSSN,SITE1,0),"^",2) D DD^%DT
 | 
|---|
| 174 |  ..W Y
 | 
|---|
| 175 |  I SITE'=1,'$D(^XTMP("MPIF EXT PDAT"_ICNSSN,SITE)) Q 0
 | 
|---|
| 176 |  I SITE'=1,SITE'=$P($$SITE^VASITE(),"^",3) D
 | 
|---|
| 177 |  .W !!,"There has been a previous request made for this patient from the same "
 | 
|---|
| 178 |  .W !,"site you are requesting.  The request was made at "
 | 
|---|
| 179 |  .N Y S Y=$P($G(^XTMP("MPIF EXT PDAT"_ICNSSN,SITE,0)),"^",2) D DD^%DT
 | 
|---|
| 180 |  .W Y
 | 
|---|
| 181 |  S DIR("A")="Would you like to view this data?"
 | 
|---|
| 182 |  S DIR(0)="Y",DIR("B")="No"
 | 
|---|
| 183 |  D ^DIR
 | 
|---|
| 184 |  I Y'=1 Q 0
 | 
|---|
| 185 |  Q 1
 | 
|---|