| 1 | ECEFPAT ;ALB/JAM-Enter Event Capture Data Patient Filer ;12 Oct 00
 | 
|---|
| 2 |  ;;2.0; EVENT CAPTURE ;**25,32,39,42,47,49,54,65,72**;8 May 96
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | FILE ;Used by the RPC broker to file patient encounter in file #721
 | 
|---|
| 5 |  ;     Variables passed in
 | 
|---|
| 6 |  ;       ECIEN   - IEN of #721, if editing
 | 
|---|
| 7 |  ;       ECDEL   - Delete record. 1- YES; 0- 0, null or undefine for NO.
 | 
|---|
| 8 |  ;       ECDFN   - Patient IEN for file #2
 | 
|---|
| 9 |  ;       ECDT    - Date and time of procedure
 | 
|---|
| 10 |  ;       ECL     - Location
 | 
|---|
| 11 |  ;       ECD     - DSS Unit
 | 
|---|
| 12 |  ;       ECC     - Category
 | 
|---|
| 13 |  ;       ECP     - Procedure
 | 
|---|
| 14 |  ;       ECVOL   - Volume
 | 
|---|
| 15 |  ;       ECU1..n - Provider (1 thru n), Prov 1 is required,other optional
 | 
|---|
| 16 |  ;       ECMN    - Ordering Section
 | 
|---|
| 17 |  ;       ECDUZ   - Entered/Edited by, pointer to #200
 | 
|---|
| 18 |  ;       ECDX    - Primary Diagnosis
 | 
|---|
| 19 |  ;       ECDXS   - Secondary Diagnosis; multiple, optional
 | 
|---|
| 20 |  ;       EC4     - Associated Clinic, required if sending data to PCE
 | 
|---|
| 21 |  ;       ECPTSTAT- Patient Status
 | 
|---|
| 22 |  ;       ECPXREAS- Procedure reason, optional
 | 
|---|
| 23 |  ;       ECMOD   - CPT modifiers, optional
 | 
|---|
| 24 |  ;       ECLASS  - Classification, optional
 | 
|---|
| 25 |  ;       ECELIG  - Eligibility, optional
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ;     Variable return
 | 
|---|
| 28 |  ;       ^TMP($J,"ECMSG",n)=Success or failure to file in #721^Message
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  N NODE,ECS,ECM,ECID,ECCPT,ECINT,ECPCE,ECX,ECERR,ECOUT,ECFLG,ECRES
 | 
|---|
| 31 |  N ECFIL,ECPRV
 | 
|---|
| 32 |  S ECFLG=1,ECERR=0 D CHKDT(1) I ECERR Q
 | 
|---|
| 33 |  F ECX=1:1 Q:'$D(@("ECU"_ECX))  D  I ECERR Q
 | 
|---|
| 34 |  .I @("ECU"_ECX)="" Q
 | 
|---|
| 35 |  .S NODE=$$GET^XUA4A72(@("ECU"_ECX),ECDT) I +NODE'>0 S ECERR=1 D  Q
 | 
|---|
| 36 |  ..S ^TMP($J,"ECMSG",1)="0^Provider doesn't have an active Person class"
 | 
|---|
| 37 |  .S ECPRV(ECX)=@("ECU"_ECX)_"^^"_$S(ECX=1:"P",1:"S")
 | 
|---|
| 38 |  I $G(ECIEN)'="" S ECFLG=0 D  I ECERR Q
 | 
|---|
| 39 |  . I '$D(^ECH(ECIEN)) S ECERR=1,^TMP($J,"ECMSG",1)="0^Pat IEN Not Found"
 | 
|---|
| 40 |  I $G(ECDEL) K ^TMP($J,"ECMSG") D  Q
 | 
|---|
| 41 |  .S ECVST=$P($G(^ECH(ECIEN,0)),"^",21) I ECVST D
 | 
|---|
| 42 |  ..;* Resend all EC records with same Visit file entry to PCE
 | 
|---|
| 43 |  ..;* Remove Visit entry from ^ECH( so DELVFILE will complete cleanup
 | 
|---|
| 44 |  ..S ECVAR1=$$FNDVST^ECUTL(ECVST) K ECVAR1
 | 
|---|
| 45 |  ..;Set VALQUIET to stop Amb Care validator from broadcasting to screen
 | 
|---|
| 46 |  ..S VALQUIET=1,ECVV=$$DELVFILE^PXAPI("ALL",ECVST) K ECVST,VALQUIET
 | 
|---|
| 47 |  .S DA=ECIEN,DIK="^ECH(" D ^DIK K DA,DIK,ECVV
 | 
|---|
| 48 |  .S ^TMP($J,"ECMSG",1)="1^Procedure Deleted"
 | 
|---|
| 49 |  I '$D(ECPRV) S ^TMP($J,"ECMSG",1)="0^No provider present" Q
 | 
|---|
| 50 |  S ECDT=+ECDT,NODE=$G(^ECD(ECD,0)) I NODE="" D MSG Q
 | 
|---|
| 51 |  S ECFN=$G(ECIEN),ECVOL=$G(ECVOL,1),ECS=$P(NODE,U,2),ECM=$P(NODE,U,3)
 | 
|---|
| 52 |  S ECPCE="U~"_$S($P(NODE,"^",14)]"":$P(NODE,"^",14),1:"N")
 | 
|---|
| 53 |  ;S ECPTSTAT=$$INOUTPT^ECUTL0(ECDFN,+ECDT) ;pat stat may not need
 | 
|---|
| 54 |  I $G(EC4)="" D GETCLN^ECEDF
 | 
|---|
| 55 |  S ECID=$S(+EC4:$P($G(^SC(+EC4,0)),"^",7),1:""),ECINP=ECPTSTAT
 | 
|---|
| 56 |  I $S($P(ECPCE,"~",2)="N":0,$P(ECPCE,"~",2)="O"&(ECINP'="O"):0,1:1) D
 | 
|---|
| 57 |  .D CHKDT(2)
 | 
|---|
| 58 |  I +EC4 S ECRES=$$CLNCK^SDUTL2(+EC4,0) I 'ECRES D  S ECERR=1
 | 
|---|
| 59 |  .S ^TMP($J,"ECMSG",1)=ECRES_" Clinic MUST be corrected before filing."
 | 
|---|
| 60 |  Q:ECERR  I ECFLG D NEWIEN
 | 
|---|
| 61 |  S ECCPT=$S(ECP["ICPT":+ECP,1:$P($G(^EC(725,+ECP,0)),U,5))
 | 
|---|
| 62 |  K DA,DR,DIE S DIE="^ECH(",(DA,ECFN)=ECIEN K ECIEN
 | 
|---|
| 63 |  S DR=".01////"_ECFN_";1////"_ECDFN_";3////"_ECL_";4////"_ECS
 | 
|---|
| 64 |  S DR=DR_";5////"_ECM_";6////"_ECD_";7////"_+ECC_";9////"_ECVOL
 | 
|---|
| 65 |  S $P(^ECH(ECFN,0),"^",9)=ECP
 | 
|---|
| 66 |  D ^DIE I $D(DTOUT) D RECDEL,MSG Q
 | 
|---|
| 67 |  S DA=ECFN,DR="11////"_ECMN_";13////"_ECDUZ_";2////"_ECDT
 | 
|---|
| 68 |  S ECPXREAS=$G(ECPXREAS)
 | 
|---|
| 69 |  S DR=DR_";19////"_$S(+ECCPT:ECCPT,1:"@")_";20////"_ECDX
 | 
|---|
| 70 |  S DR=DR_";26////"_$G(EC4)_";27////"_$G(ECID)_";29////"_ECPTSTAT
 | 
|---|
| 71 |  S DR=DR_";34////"_$S(ECPXREAS="":"@",1:ECPXREAS)
 | 
|---|
| 72 |  D ^DIE I $D(DTOUT) D RECDEL,MSG Q
 | 
|---|
| 73 |  I ECDX S ^DISV(DUZ,"^ICD9(")=ECDX  ;last ICD9 code
 | 
|---|
| 74 |  S ECX=$O(ECPRV("A"),-1) I ECX'="" S ^DISV(DUZ,"^VA(200,")=+ECPRV(ECX)
 | 
|---|
| 75 |  ;Remove Old CPT modifiers
 | 
|---|
| 76 |  I 'ECFLG D
 | 
|---|
| 77 |  . K OLDMOD S (ECDA,DA(1))=ECFN,DIK="^ECH("_DA(1)_",""MOD"",",DA=0
 | 
|---|
| 78 |  . F  S DA=$O(^ECH(ECDA,"MOD",DA)) Q:'DA  S OLDMOD(DA)="" D ^DIK
 | 
|---|
| 79 |  . K DA,ECDA,DIK,^ECH(ECFN,"MOD")
 | 
|---|
| 80 |  .;Remove old secondary diagnosis codes
 | 
|---|
| 81 |  . K OLDDXS S (ECDA,DA(1))=ECFN,DIK="^ECH("_DA(1)_",""DX"",",DA=0
 | 
|---|
| 82 |  . F  S DA=$O(^ECH(ECDA,"DX",DA)) Q:'DA  S OLDDXS(DA)="" D ^DIK
 | 
|---|
| 83 |  . K DA,ECDA,DIK,^ECH(ECFN,"DX")
 | 
|---|
| 84 |  I $D(DTOUT) D RECDEL,MSG Q
 | 
|---|
| 85 |  ;File multiple providers
 | 
|---|
| 86 |  S ECFIL=$$FILPRV^ECPRVMUT(ECFN,.ECPRV,.ECOUT) K ECOUT
 | 
|---|
| 87 |  I 'ECFIL D RECDEL,MSG Q
 | 
|---|
| 88 |  ;File CPT modifiers
 | 
|---|
| 89 |  I $G(ECMOD)'="" D
 | 
|---|
| 90 |  . S DIC(0)="L",DA(1)=ECFN,DIC("P")=$P(^DD(721,36,0),U,2)
 | 
|---|
| 91 |  . S DIC="^ECH("_DA(1)_","_"""MOD"""_","
 | 
|---|
| 92 |  . F ECX=1:1:$L(ECMOD,"^") S MODIEN=$P(ECMOD,U,ECX) I +MODIEN>0 D
 | 
|---|
| 93 |  . . K DD,DO S X=MODIEN D FILE^DICN
 | 
|---|
| 94 |  . K MODIEN,DIC
 | 
|---|
| 95 |  I $D(DTOUT) D RECDEL,MSG Q
 | 
|---|
| 96 |  ; File multiple secondary diagnosis codes
 | 
|---|
| 97 |  I $G(ECDXS)'="" D
 | 
|---|
| 98 |  . S DXS="",DIC(0)="L",DA(1)=ECFN,DIC("P")=$P(^DD(721,38,0),U,2)
 | 
|---|
| 99 |  . S DIC="^ECH("_DA(1)_","_"""DX"""_",",ECDXY=ECDX K ECDXX
 | 
|---|
| 100 |  . F ECX=1:1:$L(ECDXS,"^") S DXSIEN=$P(ECDXS,U,ECX) I +DXSIEN>0 D
 | 
|---|
| 101 |  . . S DXCDE=$$ICDDX^ICDCODE(DXSIEN,ECDT) Q:+DXCDE<0  I '$P(DXCDE,U,10) Q
 | 
|---|
| 102 |  . . K DD,DO S X=DXSIEN D FILE^DICN
 | 
|---|
| 103 |  . . S DXCDE=$P(DXCDE,U,2),ECDXX(DXCDE)=DXSIEN
 | 
|---|
| 104 |  . . S ^DISV(DUZ,"^ICD9(")=DXSIEN  ;last ICD9 code
 | 
|---|
| 105 |  . ; Update all procedures for an encounter with same primary & second dx
 | 
|---|
| 106 |  . S PXUPD=$$PXUPD^ECUTL2(ECDFN,ECDT,ECL,EC4,ECDXY,.ECDXX,ECFN)
 | 
|---|
| 107 |  . K PXUPD,ECDXY,ECDXX,DXS,DXSIEN,DIC,DXCDE,DA,DD,DO
 | 
|---|
| 108 |  I $D(DTOUT) D RECDEL,MSG Q
 | 
|---|
| 109 |  S DA=ECFN
 | 
|---|
| 110 |  ;File classification AO^IR^SC^EC^MST^HNC^CV
 | 
|---|
| 111 |  I $G(ECLASS)'="" D
 | 
|---|
| 112 |  . S CLSTR="21^22^24^23^35^39^40",DR=""
 | 
|---|
| 113 |  . F ECX=1:1:$L(CLSTR,"^") D
 | 
|---|
| 114 |  . . S DR=DR_$P(CLSTR,U,ECX)_"////"_$P(ECLASS,U,ECX)_";"
 | 
|---|
| 115 |  . S DR=$E(DR,1,($L(DR)-1)) D ^DIE
 | 
|---|
| 116 |  . K CLSTR,DR,DIE
 | 
|---|
| 117 |  I $D(DTOUT) D RECDEL,MSG Q
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 | PCE ; format PCE data to send
 | 
|---|
| 120 |  I ($P(ECPCE,"~",2)="N")!($P(ECPCE,"~",2)="O"&(ECINP'="O")) D  Q
 | 
|---|
| 121 |  .S ^TMP($J,"ECMSG",1)="1^Record Filed"
 | 
|---|
| 122 |  D:ECFLG PCE^ECBEN2U I 'ECFLG S EC(0)=^ECH(ECFN,0) D PCEE^ECBEN2U K EC
 | 
|---|
| 123 |  I $G(ECOUT)!(ECERR) D  Q
 | 
|---|
| 124 |  . D RECDEL S STR=$S($G(^ECH(ECFN,"R")):^("R"),1:" PCE Data Missing")
 | 
|---|
| 125 |  . S ^TMP($J,"ECMSG",1)="0^Record Not Filed, "_STR K STR
 | 
|---|
| 126 |  S ^TMP($J,"ECMSG",1)="1^Record Filed"_U_$G(ECIEN)
 | 
|---|
| 127 |  Q
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 | NEWIEN ;Create new IEN in file #721
 | 
|---|
| 130 |  N DIC,DA,DD,DO,ECRN
 | 
|---|
| 131 | RLCK L +^ECH(0) S ECRN=$P(^ECH(0),"^",3)+1
 | 
|---|
| 132 |  I $D(^ECH(ECRN)) S $P(^ECH(0),"^",3)=$P(^(0),"^",3)+1 L -^ECH(0) G RLCK
 | 
|---|
| 133 |  L -^ECH(0) S DIC(0)="L",DIC="^ECH(",X=ECRN
 | 
|---|
| 134 |  D FILE^DICN S ECIEN=+Y
 | 
|---|
| 135 |  Q
 | 
|---|
| 136 | RECDEL ; Delete record
 | 
|---|
| 137 |  ;restore old data
 | 
|---|
| 138 |  I 'ECFLG D  Q
 | 
|---|
| 139 |  . I $O(OLDMOD("")) D
 | 
|---|
| 140 |  . . S DIC(0)="L",DA(1)=ECFN,DIC("P")=$P(^DD(721,36,0),U,2)
 | 
|---|
| 141 |  . . S DIC="^ECH("_DA(1)_","_"""MOD"""_",",ECX=0
 | 
|---|
| 142 |  . . F  S ECX=$O(OLDMOD(ECX)) Q:'ECX  I ECX>0 K DD,DO S X=ECX D FILE^DICN
 | 
|---|
| 143 |  . I $O(OLDDXS("")) D
 | 
|---|
| 144 |  . . S DIC(0)="L",DA(1)=ECFN,DIC("P")=$P(^DD(721,38,0),U,2)
 | 
|---|
| 145 |  . . S DIC="^ECH("_DA(1)_","_"""DX"""_",",ECX=0
 | 
|---|
| 146 |  . . F  S ECX=$O(OLDDXS(ECX)) Q:'ECX  I ECX>0 K DD,DO S X=ECX D FILE^DICN
 | 
|---|
| 147 |  . K DIC,DA,DD,DO,OLDMOD,OLDDXS,ECX
 | 
|---|
| 148 |  S DA=ECFN,DIK="^ECH(" D ^DIK K DA,DIK
 | 
|---|
| 149 |  Q
 | 
|---|
| 150 | MSG ;Record not filed
 | 
|---|
| 151 |  S ^TMP($J,"ECMSG",1)="0^Record not Filed"
 | 
|---|
| 152 |  Q
 | 
|---|
| 153 | CHKDT(FLG) ;Required Data Check
 | 
|---|
| 154 |  N I,C
 | 
|---|
| 155 |  S C=1
 | 
|---|
| 156 |  I FLG=1 D  Q
 | 
|---|
| 157 |  .F I="ECD","ECC","ECL","ECDT","ECP","ECDFN","ECMN","ECDUZ","ECPTSTAT" D
 | 
|---|
| 158 |  ..I $G(@I)="" S ^TMP($J,"ECMSG",C)="0^Key data missing "_I,C=C+1,ECERR=1
 | 
|---|
| 159 |  .I $G(ECDEL),$D(ECIEN) K ^TMP($J,"ECMSG") S ECERR=0
 | 
|---|
| 160 |  ;check PCE data
 | 
|---|
| 161 |  I FLG=2 D  Q
 | 
|---|
| 162 |  .F I="EC4","ECDX" D  Q
 | 
|---|
| 163 |  ..I $G(@I)="" S ^TMP($J,"ECMSG",C)="0^Key PCE data missing "_I,C=C+1,ECERR=1
 | 
|---|
| 164 |  Q
 | 
|---|
| 165 | VALDATA ;validate data
 | 
|---|
| 166 |  N ECRRX
 | 
|---|
| 167 |  D CHK^DIE(721,1,,"`"_ECDFN,.ECRRX) I ECRRX'=ECDFN D  Q
 | 
|---|
| 168 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Patient"
 | 
|---|
| 169 |  D CHK^DIE(721,2,,ECDT,.ECRRX) I ECRRX'=ECDT D  Q
 | 
|---|
| 170 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Procedure Date"
 | 
|---|
| 171 |  D CHK^DIE(721,3,,"`"_ECL,.ECRRX) I ECRRX'=ECL D  Q
 | 
|---|
| 172 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Location"
 | 
|---|
| 173 |  D CHK^DIE(721,6,,"`"_ECD,.ECRRX) I ECRRX'=ECD D  Q
 | 
|---|
| 174 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid DSS Unit"
 | 
|---|
| 175 |  D CHK^DIE(721,7,,"`"_ECC,.ECRRX) I ECRRX'=ECC D  Q
 | 
|---|
| 176 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Category"
 | 
|---|
| 177 |  D  I ECERR Q
 | 
|---|
| 178 |  .I ECP["ICPT" S ECRRX=$$CPT^ICPTCOD(+ECP,ECDT) I +ECRRX>0,$P(ECRRX,U,7) Q
 | 
|---|
| 179 |  .I ECP["EC",$D(^EC(725,+ECP,0)) Q
 | 
|---|
| 180 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Procedure"
 | 
|---|
| 181 |  D CHK^DIE(721,11,,"`"_ECMN,.ECRRX) I ECRRX'=ECMN D  Q
 | 
|---|
| 182 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Ordering Section"
 | 
|---|
| 183 |  D CHK^DIE(721,20,,"`"_ECDX,.ECRRX) I ECRRX'=ECDX D  Q
 | 
|---|
| 184 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Primary Diagnosis"
 | 
|---|
| 185 |  I $G(EC4)'="" D CHK^DIE(721,26,,"`"_EC4,.ECRRX) I ECRRX'=EC4 D  Q
 | 
|---|
| 186 |  .S ECERR=1,^TMP($J,"ECMSG",1)="0^Invalid Associated Clinic"
 | 
|---|
| 187 |  Q
 | 
|---|