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