| 1 | ECUMRPC2 ;ALB/JAM;Event Capture Management Broker Utils ; 10/4/00 4:58pm
 | 
|---|
| 2 |  ;;2.0; EVENT CAPTURE ;**25,30,42,46,47,49,75,72**;8 May 96
 | 
|---|
| 3 | GLOC(RESULTS,ECARY) ;
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 |  ;This broker entry point returns all active Event Capture locations
 | 
|---|
| 6 |  ;        RPC: EC GETLOC
 | 
|---|
| 7 |  ;INPUTS         ECARY - Contains the following subscripted elements
 | 
|---|
| 8 |  ;               STAT   - Active or inactive locations (optional)
 | 
|---|
| 9 |  ;               A-ctive (default), I-nactive, B-oth
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 |  ;OUTPUTS        RESULTS - The array of active Event Capture locations.
 | 
|---|
| 12 |  ;               PIECE - Description
 | 
|---|
| 13 |  ;                 1     Location IEN
 | 
|---|
| 14 |  ;                 2     LOC description
 | 
|---|
| 15 |  ;                 3     State Abbreviation
 | 
|---|
| 16 |  ;                 4     Current Location Flag
 | 
|---|
| 17 |  ;                 5     Facility Type
 | 
|---|
| 18 |  ;                 6     Station Number
 | 
|---|
| 19 |  N LOC,STAT,CNT,CLOC,ST,NODE,ACT,ECLOC,ELOC,ECFT,ECSN
 | 
|---|
| 20 |  D SETENV^ECUMRPC
 | 
|---|
| 21 |  K ^TMP($J,"ECLOCATION")
 | 
|---|
| 22 |  S STAT=$P($G(ECARY),U),(CNT,LOC)=0,ACT=0 S:STAT="" STAT="A"
 | 
|---|
| 23 |  D GETLOC^ECL(.ECLOC)
 | 
|---|
| 24 |  F  S LOC=$O(ECLOC(LOC)) Q:'LOC  S ELOC($P(ECLOC(LOC),U,2))=""
 | 
|---|
| 25 |  S LOC=0
 | 
|---|
| 26 |  F  S LOC=$O(^DIC(4,LOC)) Q:'LOC  S NODE=$G(^DIC(4,LOC,0)) I NODE'="" D
 | 
|---|
| 27 |  . I $P(NODE,U)="" Q
 | 
|---|
| 28 |  . I ($P(NODE,U,11)="I")!($P($G(^DIC(4,LOC,99)),U,4)) S ACT=1
 | 
|---|
| 29 |  . I $S(STAT="A"&(ACT):1,STAT="I"&('ACT):1,1:0) Q
 | 
|---|
| 30 |  . S CLOC=$D(ELOC(LOC)),CLOC=$S(CLOC:"YES",1:"")
 | 
|---|
| 31 |  . S CNT=CNT+1,ST=$P(NODE,U,2) S:ST'="" ST=$$GET1^DIQ(5,ST,1,"I")
 | 
|---|
| 32 |  . S ECFT=$P($G(^DIC(4.1,+$G(^DIC(4,LOC,3)),0)),U)
 | 
|---|
| 33 |  . S ECSN=$P($G(^DIC(4,LOC,99)),U)
 | 
|---|
| 34 |  . S ^TMP($J,"ECLOCATION",CNT)=LOC_U_$P(NODE,U)_U_ST_U_CLOC_U_ECFT_U_ECSN
 | 
|---|
| 35 |  S RESULTS=$NA(^TMP($J,"ECLOCATION"))
 | 
|---|
| 36 |  Q
 | 
|---|
| 37 | CPTFND(RESULTS,ECARY) ;
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;This broker entry point does a search on a CPT string and returns
 | 
|---|
| 40 |  ;a list of matches from file #81
 | 
|---|
| 41 |  ;        RPC: EC GETCPTLST
 | 
|---|
| 42 |  ;INPUTS      ECARY   - Contains the following subscripted elements
 | 
|---|
| 43 |  ;             CPTSTR - CPT search string
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;OUTPUTS     RESULTS - The array of cpt codes. Data pieces as follows:-
 | 
|---|
| 46 |  ;             CPT ien^CPT code^Name
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  N CPTSTR,ECNT,DIC,ECTG,ECER
 | 
|---|
| 49 |  D SETENV^ECUMRPC
 | 
|---|
| 50 |  S CPTSTR=$P(ECARY,U),ECNT=0 I CPTSTR="" Q
 | 
|---|
| 51 |  K ^TMP($J,"ECPTSRCH"),^TMP("ECCPT",$J)
 | 
|---|
| 52 |  D CPTSRH(81,CPTSTR)
 | 
|---|
| 53 |  F  S ECNT=$O(^TMP("ECCPT",$J,"DILIST","ID",ECNT)) Q:'ECNT  D
 | 
|---|
| 54 |  .S ^TMP($J,"ECPTSRCH",ECNT)=$G(^TMP("ECCPT",$J,"DILIST",2,ECNT))_U_^TMP("ECCPT",$J,"DILIST","ID",ECNT,.01)_U_^TMP("ECCPT",$J,"DILIST","ID",ECNT,2)
 | 
|---|
| 55 |  K ^TMP("ECCPT",$J)
 | 
|---|
| 56 |  S RESULTS=$NA(^TMP($J,"ECPTSRCH"))
 | 
|---|
| 57 |  Q
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 | PXFND(RESULTS,ECARY) ;
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  ;This broker entry point does a search on a procedure string and returns
 | 
|---|
| 62 |  ;a list of matches from file #81 and/or #725
 | 
|---|
| 63 |  ;        RPC: EC GETPXLST
 | 
|---|
| 64 |  ;INPUTS      ECARY   - Contains the following subscripted elements
 | 
|---|
| 65 |  ;             PXSTR -  Procedure search string
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 |  ;OUTPUTS     RESULTS - The array of procedures. Data pieces as follows:-
 | 
|---|
| 68 |  ;             Procedure ien^Procedure code  Procedure Name
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  N CPTSTR,ECNT,DIC,ECX,CNT,ECTG,ECER,PXSTR,ECSTR
 | 
|---|
| 71 |  D SETENV^ECUMRPC
 | 
|---|
| 72 |  S PXSTR=$P(ECARY,U),ECNT=0 I PXSTR="" Q
 | 
|---|
| 73 |  K ^TMP($J,"ECPXSRCH"),^TMP("ECCPT",$J),^TMP("ECCPT1",$J)
 | 
|---|
| 74 |  D 
 | 
|---|
| 75 |  . I $P(PXSTR,".")="A" D CPTSRH(81,$P(PXSTR,".",2)) Q
 | 
|---|
| 76 |  . I $P(PXSTR,".")="B" D CPTSRH(725,$P(PXSTR,".",2)) Q
 | 
|---|
| 77 |  . F ECX=81,725 D CPTSRH(ECX,PXSTR)
 | 
|---|
| 78 |  F  S ECNT=$O(^TMP("ECCPT",$J,"DILIST","ID",ECNT)) Q:'ECNT  D
 | 
|---|
| 79 |  .S ECID=$G(^TMP("ECCPT",$J,"DILIST",2,ECNT))_";ICPT("
 | 
|---|
| 80 |  .S ECSTR=^TMP("ECCPT",$J,"DILIST","ID",ECNT,.01)_"  "_^(2)
 | 
|---|
| 81 |  .S ^TMP($J,"ECPXSRCH",ECNT)=ECID_U_ECSTR
 | 
|---|
| 82 |  S ECNT=0,CNT=+$O(^TMP($J,"ECPXSRCH","A"),-1)
 | 
|---|
| 83 |  F  S ECNT=$O(^TMP("ECCPT1",$J,"DILIST","ID",ECNT)) Q:'ECNT  D
 | 
|---|
| 84 |  .S CNT=CNT+1,ECID=$G(^TMP("ECCPT1",$J,"DILIST",2,ECNT))_";EC(725,"
 | 
|---|
| 85 |  .S ECSTR=^TMP("ECCPT1",$J,"DILIST","ID",ECNT,1)_"  "_^(.01)
 | 
|---|
| 86 |  .S ^TMP($J,"ECPXSRCH",CNT)=ECID_U_ECSTR
 | 
|---|
| 87 |  K ^TMP("ECCPT",$J),^TMP("ECCPT1",$J)
 | 
|---|
| 88 |  S RESULTS=$NA(^TMP($J,"ECPXSRCH"))
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 | CPTSRH(FILE,CPTSTR) ;Searches either file 81 or 725 for a CPT string
 | 
|---|
| 91 |  I FILE=81 D
 | 
|---|
| 92 |  .D FINDIC(81,"",".01;2","M",CPTSTR,100,"","I $P($$CPT^ICPTCOD(+Y),""^"",7)","","^TMP(""ECCPT"",$J)")
 | 
|---|
| 93 |  I FILE=725 D
 | 
|---|
| 94 |  .D FINDIC(725,"",".01;1","M",CPTSTR,100,"","I '$P(^(0),""^"",3)","","^TMP(""ECCPT1"",$J)")
 | 
|---|
| 95 |  Q
 | 
|---|
| 96 | FINDIC(ECFL,ECIEN,ECFLD,ECFLG,ECVAL,ECN,ECINDX,ECSCN,ECID,ECTG,ECER) ;
 | 
|---|
| 97 |  ;Find records in a file base on search string
 | 
|---|
| 98 |  S ECER=$G(ECER)
 | 
|---|
| 99 |  D FIND^DIC(ECFL,ECIEN,ECFLD,ECFLG,ECVAL,ECN,ECINDX,ECSCN,ECID,ECTG,ECER)
 | 
|---|
| 100 |  K ECFL,ECIEN,ECFLD,ECFLG,ECVAL,ECN,ECINDX,ECSCN,ECID
 | 
|---|
| 101 |  Q
 | 
|---|
| 102 | PROV ;Return a set of providers from the NEW PERSON file
 | 
|---|
| 103 |  ;Input Variables:-
 | 
|---|
| 104 |  ;  FROM   - text to $O from
 | 
|---|
| 105 |  ;  DATE   - checks for an active person class on this date (optional)
 | 
|---|
| 106 |  ;  ECDIR  - $O direction
 | 
|---|
| 107 |  ;  KEY    - screen users by security key (optional)
 | 
|---|
| 108 |  ;
 | 
|---|
| 109 |  ;Output Variables:-
 | 
|---|
| 110 |  ;  ^TMP($J,"ECFIND",1..n - returned array
 | 
|---|
| 111 |  ;     IEN of file 200^Provider Name^occupation^specialty^subspecialty
 | 
|---|
| 112 |  ;
 | 
|---|
| 113 |  N I,IEN,CNT,FROM,DATE,ECUTN S I=0,CNT=44  ;KEY="PROVIDER"
 | 
|---|
| 114 |  ;S FROM=$P(ECSTR,"|"),DATE=$P(ECSTR,"|",2)
 | 
|---|
| 115 |  S FROM=$P(ECSTR,"|"),DATE=$P(ECSTR,"|",2),REPORT=$P(ECSTR,"|",3)
 | 
|---|
| 116 |  F  Q:I'<CNT  S FROM=$O(^VA(200,"B",FROM),ECDIR) Q:FROM=""  D
 | 
|---|
| 117 |  . S IEN="" F  S IEN=$O(^VA(200,"B",FROM,IEN),ECDIR) Q:'IEN  D 
 | 
|---|
| 118 |  . . ;I $L(KEY),'$D(^XUSEC(KEY,+IEN)) Q
 | 
|---|
| 119 |  . . ;I +$G(ALLUSERS)=0,'$$ACTIVE^XUSER(IEN) Q  ; terminated user
 | 
|---|
| 120 |  . . I REPORT="R" S I=I+1,^TMP($J,"ECFIND",I)=IEN_"^"_FROM_"^" Q
 | 
|---|
| 121 |  . . S ECUTN=$$GET^XUA4A72(IEN,DATE)
 | 
|---|
| 122 |  . . I DATE>0,ECUTN<1 Q
 | 
|---|
| 123 |  . . S I=I+1,^TMP($J,"ECFIND",I)=IEN_"^"_FROM_"^"_$P(ECUTN,"^",2,4)
 | 
|---|
| 124 |  Q
 | 
|---|
| 125 | LEX ; returns a list of ICD code from lexicon lookup; called from ECUMRPC1
 | 
|---|
| 126 |  ;Input Variables:-
 | 
|---|
| 127 |  ;  ECSTR  - APP|ECX|ECDT
 | 
|---|
| 128 |  ;           application|Search string|procedure date
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  ;Output Variables:-
 | 
|---|
| 131 |  ;  ^TMP($J,"ECFIND",1..n - returned array
 | 
|---|
| 132 |  ;     ICD9 Code^LEX description^IEN of file 80^IEN of file 757.01
 | 
|---|
| 133 |  ;
 | 
|---|
| 134 |  N LEX,ILST,I,IEN,ECX,APP,ECDT,ICD9,ICDIEN,DIC,ECCD
 | 
|---|
| 135 |  S APP=$P(ECSTR,"|"),ECX=$P(ECSTR,"|",2),ECDT=$P(ECSTR,"|",3)
 | 
|---|
| 136 |  S ECDT=$G(ECDT,DT),DIC="^ICD9("
 | 
|---|
| 137 |  ;spacebar default for DUZ
 | 
|---|
| 138 |  I ECX=" ",+($G(DUZ))>0 S IEN=$G(^DISV(DUZ,DIC)) I +IEN D
 | 
|---|
| 139 |  .S ECCD=$$ICDDX^ICDCODE(IEN,ECDT) S:+ECCD>0 ECX=$P(ECCD,U,2)
 | 
|---|
| 140 |  D CONFIG^LEXSET(APP,APP,ECDT)    ;LEX DBIA1577
 | 
|---|
| 141 |  D LOOK^LEXA(ECX,APP,1,"",ECDT)   ;LEX DBIA2950
 | 
|---|
| 142 |  I '$D(LEX("LIST",1)) S ^TMP($J,"ECFIND",1)="0^No matches found." Q
 | 
|---|
| 143 |  ;LEX DBIA1573
 | 
|---|
| 144 |  S ILST=1,IEN=+LEX("LIST",1)
 | 
|---|
| 145 |  D ICD I ICDIEN<0 S ^TMP($J,"ECFIND",1)="0^No matches found." Q
 | 
|---|
| 146 |  S ^TMP($J,"ECFIND",ILST)=ICD9_U_$P(LEX("LIST",1),U,2)_U_ICDIEN_U_LEX("LIST",1),I=""
 | 
|---|
| 147 |  F  S I=$O(^TMP("LEXFND",$J,I)) Q:I'<0  D
 | 
|---|
| 148 |  . S IEN=$O(^TMP("LEXFND",$J,I,0))
 | 
|---|
| 149 |  . D ICD I ICDIEN<0 Q
 | 
|---|
| 150 |  . S ILST=ILST+1
 | 
|---|
| 151 |  . S ^TMP($J,"ECFIND",ILST)=ICD9_U_^TMP("LEXFND",$J,I,IEN)_U_ICDIEN_U_IEN
 | 
|---|
| 152 |  I $O(^TMP($J,"ECFIND",0))="" S ^TMP($J,"ECFIND",1)="0^No matches found."
 | 
|---|
| 153 |  K ^TMP("LEXFND",$J),^TMP("LEXHIT",$J)
 | 
|---|
| 154 |  Q
 | 
|---|
| 155 | ICD ;ICD code
 | 
|---|
| 156 |  S ICD9=$$ICDONE^LEXU(IEN,ECDT)
 | 
|---|
| 157 |  S ICDIEN=+$$ICDDX^ICDCODE(ICD9,ECDT)
 | 
|---|
| 158 |  Q
 | 
|---|