[613] | 1 | MPIFRPC ;SFCIO/CMC-MPIF RPC APIS ;26 JUN 01
|
---|
| 2 | ;;1.0; MASTER PATIENT INDEX VISTA ;**20**;30 Apr 99
|
---|
| 3 | ;
|
---|
| 4 | ;Integration Agreements Utilized:
|
---|
| 5 | ; ^DPT( - #2070
|
---|
| 6 | ; AVAFC^VAFCDD01 - #3493
|
---|
| 7 | ; GETEX^RGEX03 - #3554
|
---|
| 8 | ; NOTICE^DGSEC4 - #3027
|
---|
| 9 | ; PTSEC^DGSEC4 - #3027
|
---|
| 10 | ;
|
---|
| 11 | ICNSTAT(RETURN,ICN,SSN,RPC) ;
|
---|
| 12 | ;RPC to return status of ICN passed or if SSN is passed find ICN and return status including ICN, ICN History, CMOR History, Exceptions pending
|
---|
| 13 | ; RETURN - array to return ICN data
|
---|
| 14 | ; ICN - ICN for the patient in the Patient (#2) file data is to be returned on
|
---|
| 15 | ; SSN - social security number for the patient in the Patient (#2) file data is to be returned on
|
---|
| 16 | ; RPC - 0 or 1 to denote if the call is being made from a RPC or called locally. 1=RPC remote call 0=locally called - 1 is default
|
---|
| 17 | ;
|
---|
| 18 | N PICN,CNTD,DFN,TICN,LOCAL,XX,RETS,TEXT,CMOR,ICNH,CMORH
|
---|
| 19 | I $G(RPC)="" S RPC=1
|
---|
| 20 | I $G(ICN)=""&($G(SSN)="") S RETURN="-1^NO ICN OR SSN PASSED" Q
|
---|
| 21 | I $G(SSN)'="" S ICN=$$GETICNS^MPIF002(SSN),RETURN(1,"SSN USED")="MPI(""SSN USED"")="_""""_SSN_"""" ; possible to have multiple entries with same SSN
|
---|
| 22 | S PICN=ICN,CNTD=0,TEXT=""
|
---|
| 23 | F XX=1:1 S ICN=$P(PICN,"^",XX) Q:ICN="" D
|
---|
| 24 | .S DFN=$$GETDFN^MPIF001(+ICN),CNTD=CNTD+1
|
---|
| 25 | .I +DFN=-1 S RETURN(XX)="-1^NO SUCH ICN "_ICN Q
|
---|
| 26 | .I '$D(^DPT(DFN)) S RETURN(DFN)="-1^BAD AICN X-REF, PT FILE ENTRY DOESN'T EXIST DFN= "_DFN_" ICN= "_ICN Q
|
---|
| 27 | .; check if this data can be returned and if sensative pt bulletin needed
|
---|
| 28 | .N SENS D PTSEC^DGSEC4(.SENS,DFN,1,"Remote Procedure from MPI^RPC from MPI for ICN Information")
|
---|
| 29 | .N NOT D NOTICE^DGSEC4(.NOT,DFN,"Remote Procedure from MPI^RPC from MPI for ICN Information")
|
---|
| 30 | .I SENS(1)=3!(SENS(1)=4)!(SENS(1)=-1) S RETURN(XX)="-1^SENSATIVE PT ISSUE "_SENS(2)_" DFN= "_DFN_" ICN= "_ICN Q
|
---|
| 31 | .I RPC=1 S TEXT="MPI("_DFN_",""DFN"")="
|
---|
| 32 | .S RETURN(DFN,"DFN")=TEXT_""""_DFN_""""
|
---|
| 33 | .S TICN=$$GETICN^MPIF001(DFN)
|
---|
| 34 | .I +TICN<0 D
|
---|
| 35 | ..I RPC=1 S RETURN(DFN,1)="MPI("_DFN_",1)="_""""_"No current ICN"
|
---|
| 36 | ..I RPC=0 S RETURN(DFN,1)="""No Current ICN"
|
---|
| 37 | .I +TICN>0 D
|
---|
| 38 | ..I RPC=1 S RETURN(DFN,"ICN")="MPI("_DFN_",""ICN"")="_""""_TICN_""""
|
---|
| 39 | ..I RPC=0 S RETURN(DFN,"ICN")=""""_TICN_""""
|
---|
| 40 | .S LOCAL=""
|
---|
| 41 | .I $E($G(RETURN(DFN,"ICN")),1,3)=$P($$SITE^VASITE(),"^",3) S LOCAL="Y"
|
---|
| 42 | .I LOCAL=""&(+TICN>0) D
|
---|
| 43 | ..I RPC=1 S RETURN(DFN,1)="MPI("_DFN_",1)="_""""_"NATIONAL ICN"
|
---|
| 44 | ..I RPC=0 S RETURN(DFN,1)=""""_"NATIONAL ICN"
|
---|
| 45 | .I LOCAL="Y"&(+TICN>0) D
|
---|
| 46 | ..I RPC=1 S RETURN(DFN,1)="MPI("_DFN_",1)="_""""_"LOCAL ICN"
|
---|
| 47 | ..I RPC=0 S RETURN(DFN,1)=""""_"LOCAL ICN"_""""
|
---|
| 48 | .S CMOR=$$GETVCCI^MPIF001(DFN)
|
---|
| 49 | .I +CMOR=-1 S CMOR=$P(CMOR,"^",2)
|
---|
| 50 | .I RPC=1 S RETURN(DFN,"CMOR")="MPI("_DFN_",""CMOR"")="""_CMOR_""""
|
---|
| 51 | .I RPC=0 S RETURN(DFN,"CMOR")=""""_CMOR_""""
|
---|
| 52 | .D GETICNH^MPIF002(DFN,.ICNH)
|
---|
| 53 | .I +ICNH=-1 D
|
---|
| 54 | ..I RPC=1 S RETURN(DFN,"ICN HISTORY")="MPI("_DFN_",""ICN HISTORY"")="""_$P(ICNH,"^",2)_""""
|
---|
| 55 | ..I RPC=0 S RETURN(DFN,"ICN HISTORY")=""""_$P(ICNH,"^",2)_""""
|
---|
| 56 | .I +ICNH'=-1 D
|
---|
| 57 | ..M RETURN(DFN,"ICN HISTORY")=ICNH
|
---|
| 58 | ..I RPC=1 D
|
---|
| 59 | ...N IEN
|
---|
| 60 | ...S IEN="" F S IEN=$O(RETURN(DFN,"ICN HISTORY",IEN)) Q:IEN="" S RETURN(DFN,"ICN HISTORY",IEN)="MPI("_DFN_",""ICN HISTORY"","_IEN_")="_$G(RETURN(DFN,"ICN HISTORY",IEN))
|
---|
| 61 | ...S RETURN(DFN,"ICN HISTORY")="MPI("_DFN_",""ICN HISTORY"")="_$G(RETURN(DFN,"ICN HISTORY"))
|
---|
| 62 | .;
|
---|
| 63 | .D GETCMORH^MPIF002(DFN,.CMORH)
|
---|
| 64 | .I +CMORH=-1 D
|
---|
| 65 | ..I RPC=1 S RETURN(DFN,"CMOR HISTORY")="MPI("_DFN_",""CMOR HISTORY"")="""_$P(CMORH,"^",2)_""""
|
---|
| 66 | ..I RPC=0 S RETURN(DFN,"CMOR HISTORY")=""""_$P(CMORH,"^",2)_""""
|
---|
| 67 | .I +CMORH'=-1 D
|
---|
| 68 | ..M RETURN(DFN,"CMOR HISTORY")=CMORH
|
---|
| 69 | ..I RPC=1 D
|
---|
| 70 | ...N IEN
|
---|
| 71 | ...S IEN="" F S IEN=$O(RETURN(DFN,"CMOR HISTORY",IEN)) Q:IEN="" S RETURN(DFN,"CMOR HISTORY",IEN)="MPI("_DFN_",""CMOR HISTORY"","_IEN_")="_$G(RETURN(DFN,"CMOR HISTORY",IEN))
|
---|
| 72 | ...S RETURN(DFN,"CMOR HISTORY")="MPI("_DFN_",""CMOR HISTORY"")="_$G(RETURN(DFN,"CMOR HISTORY"))
|
---|
| 73 | .;
|
---|
| 74 | .D EXC(DFN,.RETS,XX)
|
---|
| 75 | .I RETS(XX,"EXCEPTIONS")="No Exceptions" D
|
---|
| 76 | ..I RPC=1 S RETURN(DFN,"EXCEPTIONS")="MPI("_DFN_",""EXCEPTIONS"")=""NO EXCEPTIONS""",RETURN(DFN,1)=$G(RETURN(DFN,1))_" with No Exceptions"_""""
|
---|
| 77 | ..I RPC=0 S RETURN(DFN,"EXCEPTIONS")="""NO EXCEPTIONS""",RETURN(DFN,1)=$G(RETURN(DFN,1))_" with No Exceptions"_""""
|
---|
| 78 | .I RETS(XX,"EXCEPTIONS")'="No Exceptions" D
|
---|
| 79 | ..I RPC=1 S RETURN(DFN,1)=$G(RETURN(DFN,1))_" with Exceptions"_"""",RETURN(DFN,"EXCEPTIONS")="MPI("_DFN_",""EXCEPTIONS"")="_""""_$G(RETS(XX,"EXCEPTIONS"))_""""
|
---|
| 80 | ..I RPC=0 S RETURN(DFN,1)=$G(RETURN(DFN,1))_" with Exceptions"_"""",RETURN(DFN,"EXCEPTIONS")=$G(RETS(XX,"EXCEPTIONS"))
|
---|
| 81 | I CNTD>1 D
|
---|
| 82 | .I RPC=1 S RETURN(1,"ICNS PROCESSED")="MPI(""ICNS PROCESSED"")="_""""_CNTD_""""
|
---|
| 83 | .I RPC=0 S RETURN(1,"ICNS PROCESSED")="MPI(""ICNS PROCESSED"")="_CNTD
|
---|
| 84 | Q
|
---|
| 85 | EXC(DFN,RET,YY) ;
|
---|
| 86 | ; process exceptions into single value
|
---|
| 87 | N TVAL,IEN
|
---|
| 88 | D GETEX^RGEX03(.VAL,DFN)
|
---|
| 89 | I +VAL(0)=0 S RET(YY,"EXCEPTIONS")="No Exceptions"
|
---|
| 90 | I +VAL(0)'=0 D
|
---|
| 91 | .S IEN=0,TVAL=""
|
---|
| 92 | .F IEN=$O(VAL(IEN)) Q:IEN="" S TVAL=TVAL_$P($G(VAL(IEN)),"^")_"^"
|
---|
| 93 | .S RET(YY,"EXCEPTIONS")=""""_TVAL_""""
|
---|
| 94 | K VAL
|
---|
| 95 | Q
|
---|
| 96 | ;
|
---|
| 97 | INACT(RETURN,ICN) ;
|
---|
| 98 | ;RPC to inactivate the ICN passed.
|
---|
| 99 | ; RETURN - 1 for successful inactivation or -1^error msg
|
---|
| 100 | ; ICN = is the ICN for the patient that is to be inactivated
|
---|
| 101 | ;
|
---|
| 102 | I $G(ICN)="" S RETURN="-1^No ICN Passed" Q
|
---|
| 103 | I +ICN<1 S RETURN="-1^Invalid ICN" Q
|
---|
| 104 | N DFN,TICN,ER
|
---|
| 105 | S DFN=$$GETDFN^MPIF001(ICN)
|
---|
| 106 | I +DFN<0 S RETURN="-1^No such ICN" Q
|
---|
| 107 | S TICN=$$GETICN^MPIF001(DFN)
|
---|
| 108 | I +TICN'=+ICN S RETURN="-1^ICN is not active" Q
|
---|
| 109 | D PAT^MPIFDEL(DFN,.ER)
|
---|
| 110 | I ER'="" S RETURN="-1^"_ER Q
|
---|
| 111 | S RETURN=1
|
---|
| 112 | Q
|
---|
| 113 | ;
|
---|
| 114 | RCCMOR(RETURN,ICN,CMOR,SSN,A08) ;
|
---|
| 115 | ;RPC to change the CMOR value to CMOR for patient with ICN value ICN
|
---|
| 116 | ; RETURN - array to return 1 for successful update or -1^ERROR MSG
|
---|
| 117 | ; ICN = ICN for the patient that the CMOR is to be changed for
|
---|
| 118 | ; CMOR = Station Number of the site that should become the CMOR
|
---|
| 119 | ; SSN = Social Security Number of the patient involved, to be used if
|
---|
| 120 | ; ICN is not found due to bad AICN x-ref
|
---|
| 121 | ; A08 = 1 means trigger A08 message, 0 means don't send A08 msg
|
---|
| 122 | ;
|
---|
| 123 | I $G(ICN)=""!($G(CMOR)="") S RETURN="-1^Missing Required fields" Q
|
---|
| 124 | N DFN,CIEN,DFNS
|
---|
| 125 | S DFN=$$GETDFN^MPIF001(ICN)
|
---|
| 126 | I DFN'>0&($G(SSN)="") S RETURN(1)="-1^Unknown ICN" Q
|
---|
| 127 | I DFN'>0 D
|
---|
| 128 | .Q:'$D(^DPT("SSN",SSN))
|
---|
| 129 | .S DFNS=$$GETDFNS^MPIF002(SSN)
|
---|
| 130 | .S DFN=$$CHK(DFNS,ICN)
|
---|
| 131 | I DFN'>0!(+ICN=-1) S RETURN(1)="-1^Unknown ICN" Q
|
---|
| 132 | S CIEN=$$IEN^XUAF4(CMOR)
|
---|
| 133 | I CIEN'>0 S RETURN(1)="-1^Unknown Institution" Q
|
---|
| 134 | S RETURN(1)=$$CHANGE^MPIF001(DFN,CIEN)
|
---|
| 135 | I A08=1 D AVAFC^VAFCDD01(DFN) ; trigger A08 msg
|
---|
| 136 | I A08=1 S RETURN(1)=RETURN(1)_"^and A08 triggered"
|
---|
| 137 | ;trigger a08
|
---|
| 138 | Q
|
---|
| 139 | ;
|
---|
| 140 | CHK(DFNS,ICN) ; see if had broken AICN x-ref, if so, fix it and return
|
---|
| 141 | ; correct DFN for patient that's CMOR is to be changed.
|
---|
| 142 | ;
|
---|
| 143 | N IEN,NODE,NXT,FOUND,DFN
|
---|
| 144 | S FOUND=0
|
---|
| 145 | F NXT=1:1 S IEN=$P(DFNS,"^",NXT) Q:IEN=""!(FOUND=1) D
|
---|
| 146 | .S NODE=$$MPINODE^MPIFAPI(NXT)
|
---|
| 147 | .I $P(NODE,"^")=ICN S FOUND=1,^DPT("AICN",ICN,IEN)="",DFN=IEN
|
---|
| 148 | I FOUND=0 Q "-1^No such ICN"
|
---|
| 149 | Q DFN
|
---|