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