| [613] | 1 | ECPRVMUT ;ALB/JAM - Event Capture Multiple Provider Utilities ;24 Aug 05
 | 
|---|
 | 2 |  ;;2.0; EVENT CAPTURE ;**72**;8 May 96
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 | GETPRV(ECIEN,OUTARR) ;Returns providers associated with an encounter
 | 
|---|
 | 5 |  ;*** This recall replaces GET^ECPRVUTL to allow for multiple providers 
 | 
|---|
 | 6 |  ;    instead of three.
 | 
|---|
 | 7 |  ;  Input: ECIEN  - IEN entry in file 721/^ECH(
 | 
|---|
 | 8 |  ;
 | 
|---|
 | 9 |  ; Output: OUTARR - output array with providers
 | 
|---|
 | 10 |  ;                  ^ECH IEN^provider ien^provider description^
 | 
|---|
 | 11 |  ;                  Primary/Secondary code^Primary/Secondary description
 | 
|---|
 | 12 |  ;         returns 0 if successful or 1 if unsuccessful
 | 
|---|
 | 13 |  ;      
 | 
|---|
 | 14 |  I $G(ECIEN)="" Q 1  ;IEN not define.
 | 
|---|
 | 15 |  I '$D(^ECH(ECIEN)) Q 1  ;IEN does not exist in file 721/^ECH(
 | 
|---|
 | 16 |  I $O(^ECH(ECIEN,"PRV",0))="" Q 1  ;No provider on file for entry
 | 
|---|
 | 17 |  N PRV,IEN,ECERR,SEQ,TYP,TYD,TMPARR,PRI,CNT,PRVARY
 | 
|---|
 | 18 |  S PRI=0
 | 
|---|
 | 19 |  D GETS^DIQ(721,ECIEN,"42*","IE","PRVARY","ECERR")
 | 
|---|
 | 20 |  I $D(ECERR) Q 1  ;Error looking up entry
 | 
|---|
 | 21 |  S SEQ="" F  S SEQ=$O(PRVARY(721.042,SEQ)) Q:SEQ=""  D
 | 
|---|
 | 22 |  . S IEN=$G(PRVARY(721.042,SEQ,.01,"I")) I IEN="" Q
 | 
|---|
 | 23 |  . S PRV=$G(PRVARY(721.042,SEQ,.01,"E")) I PRV="" S PRV="Unknown"
 | 
|---|
 | 24 |  . S TYP=$G(PRVARY(721.042,SEQ,.02,"I")) I TYP="" S TYP="Ukn"
 | 
|---|
 | 25 |  . S TYD=$G(PRVARY(721.042,SEQ,.02,"E")) I TYD="" S TYD="Unknown"
 | 
|---|
 | 26 |  . I 'PRI,TYP="P" S PRI=1_U_$P(SEQ,",")
 | 
|---|
 | 27 |  . I $P(SEQ,",")'="" S TMPARR($P(SEQ,","))=IEN_U_PRV_U_TYP_U_TYD
 | 
|---|
 | 28 |  ;set primary provider as first subscript
 | 
|---|
 | 29 |  S CNT=1,PRI=$S(PRI:$P(PRI,U,2),1:$O(TMPARR(0))),OUTARR(CNT)=TMPARR(PRI)
 | 
|---|
 | 30 |  K TMPARR(PRI)
 | 
|---|
 | 31 |  S IEN=0 F  S IEN=$O(TMPARR(IEN)) Q:'IEN  D
 | 
|---|
 | 32 |  . S CNT=CNT+1,OUTARR(CNT)=TMPARR(IEN)
 | 
|---|
 | 33 |  Q $S($D(OUTARR):0,1:1)
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 | GETPPRV(ECIEN,ECPPROV) ;returns primary provider associated with an encounter
 | 
|---|
 | 36 |  ;  Input: ECIEN  - IEN entry in file 721/^ECH(
 | 
|---|
 | 37 |  ;
 | 
|---|
 | 38 |  ; Output: ECPPROV - primary provider
 | 
|---|
 | 39 |  ;                   provider ien^provider description
 | 
|---|
 | 40 |  ;         returns 0 if successful or 1 if unsuccessful
 | 
|---|
 | 41 |  ;      
 | 
|---|
 | 42 |  I $G(ECIEN)="" Q 1  ;IEN not define.
 | 
|---|
 | 43 |  I '$D(^ECH(ECIEN)) Q 1  ;IEN does not exist in file 721/^ECH(
 | 
|---|
 | 44 |  I $O(^ECH(ECIEN,"PRV",0))="" Q 1  ;No provider on file for entry
 | 
|---|
 | 45 |  N PRVARY,PRV,IEN,ECERR,SEQ,ECOUT,TYP
 | 
|---|
 | 46 |  S ECOUT=0
 | 
|---|
 | 47 |  D GETS^DIQ(721,ECIEN,"42*","IE","PRVARY","ECERR")
 | 
|---|
 | 48 |  I $D(ECERR) Q 1  ;Error looking up entry
 | 
|---|
 | 49 |  S SEQ="" F  S SEQ=$O(PRVARY(721.042,SEQ)) Q:SEQ=""  D  I ECOUT Q
 | 
|---|
 | 50 |  . S IEN=$G(PRVARY(721.042,SEQ,.01,"I")) I IEN="" Q
 | 
|---|
 | 51 |  . S PRV=$G(PRVARY(721.042,SEQ,.01,"E")) I PRV="" S PRV="Unknown"
 | 
|---|
 | 52 |  . S TYP=$G(PRVARY(721.042,SEQ,.02,"I")) I TYP="" S TYD="Unknown"
 | 
|---|
 | 53 |  . I TYP="P" S ECPPROV=IEN_U_PRV,ECOUT=1
 | 
|---|
 | 54 |  Q $S($D(ECPPROV):0,1:1)
 | 
|---|
 | 55 |  ;
 | 
|---|
 | 56 | FILPRV(ECIEN,ECPRVARY,ECOUT) ;File multiple providers for an encounter
 | 
|---|
 | 57 |  ;  Input: ECIEN    - IEN entry in file 721/^ECH(
 | 
|---|
 | 58 |  ;         ECPRVARY - array with providers
 | 
|---|
 | 59 |  ;         ECOUT    - Error flag (1/0)
 | 
|---|
 | 60 |  ;
 | 
|---|
 | 61 |  ; Output: returns 1 if successful or 0 if unsuccessful
 | 
|---|
 | 62 |  ;      
 | 
|---|
 | 63 |  I $G(ECIEN)="" Q 0  ;IEN not define.
 | 
|---|
 | 64 |  I '$D(^ECH(ECIEN)) Q 0  ;IEN does not exist in file 721/^ECH(
 | 
|---|
 | 65 |  I '$O(ECPRVARY(0)) Q 0  ;No entry in provider array
 | 
|---|
 | 66 |  N SIEN,ECERR,ERR,ECPRVDA,ECDATA,DA,DIK
 | 
|---|
 | 67 |  ;delete old entries
 | 
|---|
 | 68 |  S DA(1)=ECIEN,DIK="^ECH("_DA(1)_",""PRV"",",DA=0
 | 
|---|
 | 69 |  F  S DA=$O(^ECH(DA(1),"PRV",DA)) Q:'DA  D ^DIK
 | 
|---|
 | 70 |  S SIEN=0,ERR=""
 | 
|---|
 | 71 |  F  S SIEN=$O(ECPRVARY(SIEN)) Q:SIEN=""  D
 | 
|---|
 | 72 |  .K ECPRVDA,ECERR
 | 
|---|
 | 73 |  .S ECDATA=ECPRVARY(SIEN)
 | 
|---|
 | 74 |  .S ECPRVDA(721,"?1,",.01)=ECIEN
 | 
|---|
 | 75 |  .S ECPRVDA(721.042,"+2,?1,",.01)=$P(ECDATA,U)
 | 
|---|
 | 76 |  .S ECPRVDA(721.042,"+2,?1,",.02)=$P(ECDATA,U,3)
 | 
|---|
 | 77 |  .D UPDATE^DIE("","ECPRVDA","","ECERR")
 | 
|---|
 | 78 |  .I $D(ECERR) S ERR=ERR_SIEN_";"
 | 
|---|
 | 79 |  Q $S(ERR="":1,1:"0^"_ERR)
 | 
|---|
 | 80 |  ;
 | 
|---|
 | 81 | DSPPRV ;Display providers
 | 
|---|
 | 82 |  N ECX,ECDAT,ECW
 | 
|---|
 | 83 |  W "Encounter Providers"
 | 
|---|
 | 84 |  S ECX=0  F  S ECX=$O(ECPRVARY(ECX)) Q:'ECX  D
 | 
|---|
 | 85 |  .S ECDAT=ECPRVARY(ECX)
 | 
|---|
 | 86 |  .W !,?3,$P(ECDAT,U),?15,$P(ECDAT,U,2) I $P(ECDAT,U,3)="P" W " (Primary)"
 | 
|---|
 | 87 |  Q
 | 
|---|
 | 88 | ASKPRV(ECIEN,ECDT,ECPRVARY,ECOUT) ;ask provider question (primary and multiple secondary)
 | 
|---|
 | 89 |  ; Variables: ECIEN    - IEN entry in file 721/^ECH(
 | 
|---|
 | 90 |  ;            ECDT     - date/time of encounter
 | 
|---|
 | 91 |  ;            ECPRVARY - array with providers
 | 
|---|
 | 92 |  ;            ECOUT    - Error flag (1/0)
 | 
|---|
 | 93 |  ;
 | 
|---|
 | 94 |  ; Output: returns 1 if successful or 0 if unsuccessful
 | 
|---|
 | 95 |  N ECINF
 | 
|---|
 | 96 |  K ECPRVARY,ECPRV,ECPRVN
 | 
|---|
 | 97 |  ;get providers
 | 
|---|
 | 98 |  I $G(ECIEN)'="" D
 | 
|---|
 | 99 |  .S ECINF=$$GETPRV(ECIEN,.ECPRVARY)
 | 
|---|
 | 100 |  .S ECINF=$$GETPPRV(ECIEN,.ECPRVN) I 'ECINF S ECPRV=$P(ECPRVN,U),ECPRVN=$P(ECPRVN,U,2)
 | 
|---|
 | 101 |  ;display providers
 | 
|---|
 | 102 |  I $O(ECPRVARY(""))'="" D DSPPRV
 | 
|---|
 | 103 |  ;ask for primary provider
 | 
|---|
 | 104 |  D PPRV I $G(ECOUT) Q
 | 
|---|
 | 105 |  ;ask for secondary provider
 | 
|---|
 | 106 |  D SPRV
 | 
|---|
 | 107 |  Q
 | 
|---|
 | 108 | PPRV ;Ask primary provider
 | 
|---|
 | 109 |  ;   Variables:   ECPRV   = Primary provider ien
 | 
|---|
 | 110 |  ;                ECPRVN  = Primary provider descript, default if define
 | 
|---|
 | 111 |  ;                ECPRVARY= Array with providers
 | 
|---|
 | 112 |  ;                          subscript=provider IEN, 
 | 
|---|
 | 113 |  ;                          data=(P)rimary_^_provider description
 | 
|---|
 | 114 |  ;                ECOUT   = Error flag (1/0)
 | 
|---|
 | 115 |  ;   
 | 
|---|
 | 116 |  N DIR,DIROUT,DIRUT,DTOUT,DUOUT,ECW,X,Y,IEN
 | 
|---|
 | 117 |  S ECPRV=$G(ECPRV),ECPRVN=$G(ECPRVN)
 | 
|---|
 | 118 |  S DIR(0)="P^VA(200,:AEZQM",DIR("A")="Primary Provider"
 | 
|---|
 | 119 |  S DIR("?")="Enter the provider responsible for providing primary care for this encounter."
 | 
|---|
 | 120 |  I ECPRV'="" S DIR("B")=$$DICLK^ECPRVUTL(ECPRV)
 | 
|---|
 | 121 |  ;get provider with active person class
 | 
|---|
 | 122 |  S DIR("S")="I +$$GET^XUA4A72(+Y,$G(ECDT,DT))>0"
 | 
|---|
 | 123 |  D ^DIR
 | 
|---|
 | 124 |  I +Y>0 D  Q
 | 
|---|
 | 125 |  .;check if provider exist as secondary and remove.
 | 
|---|
 | 126 |  .S IEN=0
 | 
|---|
 | 127 |  .F  S IEN=$O(ECPRVARY(IEN)) Q:'IEN  I $P(ECPRVARY(IEN),U,3)'="P" D
 | 
|---|
 | 128 |  ..I +ECPRVARY(IEN)=+Y D
 | 
|---|
 | 129 |  ...W !?25,"*** (Provider removed as secondary.) ***" K ECPRVARY(IEN)
 | 
|---|
 | 130 |  .S ECW=$$CLASS^ECPRVUTL(+Y,$G(ECDT,DT))
 | 
|---|
 | 131 |  .S ECPRV=+Y,ECPRVN=Y(0,0),ECPRVARY(1)=ECPRV_"^"_Y(0,0)_"^P^PRIMARY"
 | 
|---|
 | 132 |  S ECOUT=1 Q
 | 
|---|
 | 133 |  Q
 | 
|---|
 | 134 | SPRV ;Ask secondary provider(s)
 | 
|---|
 | 135 |  ;   Variables:   ECPRV   = Primary provider ien, default if define
 | 
|---|
 | 136 |  ;                ECPRVARY= Array with providers
 | 
|---|
 | 137 |  ;                          subscript=provider IEN, 
 | 
|---|
 | 138 |  ;                          data=(S)econdary_^_provider description
 | 
|---|
 | 139 |  ;
 | 
|---|
 | 140 |  N Y,X,DEF,DA,DIR,DIROUT,DIRUT,DTOUT,DUOUT,CNT,X,Y
 | 
|---|
 | 141 |  ;create "B" xref and subscript by provider ien in array ECPRVARY
 | 
|---|
 | 142 |  ;set last provider as default
 | 
|---|
 | 143 |  S DEF="",IEN=$O(ECPRVARY(""),-1),CNT=+IEN+1 I IEN D
 | 
|---|
 | 144 |  .I $P(ECPRVARY(IEN),U)'=$G(ECPRV) S DEF=$P(ECPRVARY(IEN),U)
 | 
|---|
 | 145 |  S IEN=0
 | 
|---|
 | 146 |  F  S IEN=$O(ECPRVARY(IEN)) Q:'IEN  I $P(ECPRVARY(IEN),U,3)'="P" D
 | 
|---|
 | 147 |  .S ECPRVARY("B",+ECPRVARY(IEN))=IEN
 | 
|---|
 | 148 |  S:DEF'="" DIR("B")=$$DICLK^ECPRVUTL(DEF) ;DIR("B")="`"_DEF
 | 
|---|
 | 149 |  S DIR(0)="PO^VA(200,:AEZQM",DIR("A")="Secondary Provider"
 | 
|---|
 | 150 |  S DIR("?")="^D PRVHLP^ECPRVMUT"
 | 
|---|
 | 151 |  ;get providers with active person class
 | 
|---|
 | 152 |  S DIR("S")="I +$$GET^XUA4A72(+Y,$G(ECDT,DT))>0"
 | 
|---|
 | 153 |  F  D ^DIR S:$D(DUOUT) ECOUT=1 Q:(X="")!($D(DTOUT))!($D(DUOUT))  D
 | 
|---|
 | 154 |  .I +Y>0,+Y=$G(ECPRV) W "    Provider already entered as primary." Q
 | 
|---|
 | 155 |  .I +Y=DEF K DIR("B") S DEF="" Q
 | 
|---|
 | 156 |  .I X="@",DEF'="" D  Q
 | 
|---|
 | 157 |  ..I DEF=$G(ECPRV) W "    Provider flag as primary. Can't delete." Q
 | 
|---|
 | 158 |  ..W "    "_$$GET1^DIQ(200,DEF,.01)_"...deleted"
 | 
|---|
 | 159 |  ..K ECPRVARY(ECPRVARY("B",DEF)),ECPRVARY("B",DEF),DIR("B")
 | 
|---|
 | 160 |  .Q:+Y<0  I $D(ECPRVARY("B",+Y)) S DEF=+Y,DIR("B")=$$DICLK^ECPRVUTL(DEF) Q
 | 
|---|
 | 161 |  .S ECW=$$CLASS^ECPRVUTL(+Y,$G(ECDT,DT))
 | 
|---|
 | 162 |  .S ECPRVARY("B",+Y)=CNT,ECPRVARY(CNT)=+Y_"^"_Y(0,0)_"^S^SECONDARY"
 | 
|---|
 | 163 |  .S DEF="",CNT=CNT+1 K DIR("B")
 | 
|---|
 | 164 |  K ECPRVARY("B")
 | 
|---|
 | 165 |  Q 
 | 
|---|
 | 166 | PRVHLP ;Help for Provider Code
 | 
|---|
 | 167 |  N DIC,PRV,D
 | 
|---|
 | 168 |  I $D(ECPRVARY) D
 | 
|---|
 | 169 |  .W !?1,"Provider Already Entered:" S PRV=0
 | 
|---|
 | 170 |  .F  S PRV=$O(ECPRVARY(PRV)) Q:'PRV  D
 | 
|---|
 | 171 |  ..W !,?3,$P(ECPRVARY(PRV),U),?15,$P(ECPRVARY(PRV),U,2)
 | 
|---|
 | 172 |  ..I $P(ECPRVARY(PRV),U,3)="P" W " (Primary)"
 | 
|---|
 | 173 |  W !?1,"You may enter a new Provider, if you wish.  Enter the secondary Provider"
 | 
|---|
 | 174 |  W !?1,"for this procedure."
 | 
|---|
 | 175 |  Q
 | 
|---|
 | 176 |  ;
 | 
|---|
 | 177 | COMP(ECUX,ECDTX) ;get provider information, similar to COMP^ECPRVUTL
 | 
|---|
 | 178 |  ;Input:  ECUX  = IEN in file #200
 | 
|---|
 | 179 |  ;        ECDTX = Date of encounter
 | 
|---|
 | 180 |  ;
 | 
|---|
 | 181 |  ;Output: ECUX  = ien in file #200^name^compress person class info
 | 
|---|
 | 182 |  ;
 | 
|---|
 | 183 |  I $G(ECUX)="" Q
 | 
|---|
 | 184 |  S ECDTX=$G(ECDTX,DT)
 | 
|---|
 | 185 |  ;build ECUX=ien in file #200^name^person class ien^occupation^specialty^
 | 
|---|
 | 186 |  ;           subspecialty^etc.
 | 
|---|
 | 187 |  S ECUX=+ECUX_"^"_$$GET1^DIQ(200,+ECUX,.01)_"^"_$$GET^XUA4A72(+ECUX,ECDTX)
 | 
|---|
 | 188 |  D COMP^ECPRVUTL(.ECUX,ECDTX)
 | 
|---|
 | 189 |  Q
 | 
|---|
 | 190 | DSP1416(ECPRVARY) ;Display providers for data entry options
 | 
|---|
 | 191 |  N ECI,ECDAT,ECUP,CNT
 | 
|---|
 | 192 |  S (ECI,CNT)=0 F  S ECI=$O(ECPRVARY(ECI)) Q:'ECI  D
 | 
|---|
 | 193 |  .S ECDAT=ECPRVARY(ECI),CNT=CNT+1
 | 
|---|
 | 194 |  .W !,"Provider"_$S(CNT=1:"",1:" #"_CNT)_":",?14,$P(ECDAT,U,2)
 | 
|---|
 | 195 |  .I +$P(ECDAT,U) S ECUP=+$P(ECDAT,U) D COMP(.ECUP,$G(ECDT,DT)) D
 | 
|---|
 | 196 |  ..W !?16,$P(ECUP,"^",3)
 | 
|---|
 | 197 |  Q
 | 
|---|
 | 198 | DSP1442(ECPRVARY) ;Display providers for data entry options
 | 
|---|
 | 199 |  N ECI,ECDAT,ECUP,CNT
 | 
|---|
 | 200 |  S (ECI,CNT)=0  F  S ECI=$O(ECPRVARY(ECI)) Q:'ECI  D
 | 
|---|
 | 201 |  .S ECDAT=ECPRVARY(ECI),CNT=CNT+1
 | 
|---|
 | 202 |  .W !,"Provider"_$S(CNT=1:"",1:" #"_CNT)_":",?14,$E($P(ECDAT,U,2),1,24)
 | 
|---|
 | 203 |  .I +$P(ECDAT,U) S ECUP=+$P(ECDAT,U) D COMP^ECPRVMUT(.ECUP,$G(ECDT,DT)) D
 | 
|---|
 | 204 |  ..W ?42,$E($P(ECUP,U,3),1,36)
 | 
|---|
 | 205 |  Q
 | 
|---|
 | 206 | DSP1444(ECPRVARY) ;Display providers for data entry options
 | 
|---|
 | 207 |  N ECI,ECDAT,ECUP,CNT
 | 
|---|
 | 208 |  S (ECI,CNT)=0  F  S ECI=$O(ECPRVARY(ECI)) Q:'ECI  D
 | 
|---|
 | 209 |  .S ECDAT=ECPRVARY(ECI),CNT=CNT+1
 | 
|---|
 | 210 |  .W !,"Provider"_$S(CNT=1:"",1:" #"_CNT)_":",?14,$E($P(ECDAT,U,2),1,24)
 | 
|---|
 | 211 |  .I +$P(ECDAT,U) S ECUP=+$P(ECDAT,U) D COMP^ECPRVMUT(.ECUP,$G(ECDT,DT)) D
 | 
|---|
 | 212 |  ..W ?44,$E($P(ECUP,U,3),1,34)
 | 
|---|
 | 213 |  Q
 | 
|---|