| 1 | ECUTL2 ;ALB/JAM - Event Capture Diagnosis Code Selection ;11 Jan 2000 | 
|---|
| 2 | ;;2.0; EVENT CAPTURE ;**23,33,47,63,72**;8 May 96 | 
|---|
| 3 | DIAG ;ask dx question (primary and multiple secondary) | 
|---|
| 4 | ;check for primary dx and display message | 
|---|
| 5 | D PDXMSG | 
|---|
| 6 | ;ask for primary dx | 
|---|
| 7 | D PDX I ECOUT Q | 
|---|
| 8 | ;ask for secondary dx | 
|---|
| 9 | D SDX I ECOUT Q | 
|---|
| 10 | I $D(DTOUT)!$D(DUOUT) W:$P(ECPCE,"~",2)'="N" !!,"Please note that this record cannot be sent to PCE without a diagnosis.",!! | 
|---|
| 11 | Q | 
|---|
| 12 | PDXMSG ; Check for existence of primary diagnoses and display message | 
|---|
| 13 | N TXT,ECPDX | 
|---|
| 14 | S (ECDX,ECDXN,ECDXO)="" K ECDXS | 
|---|
| 15 | ;Check if primary dx exist in file #721 | 
|---|
| 16 | S ECPDX=$$PDXCK(ECDFN,ECDT,ECL,EC4) | 
|---|
| 17 | I +ECPDX W ! D | 
|---|
| 18 | . W !?5,"WARNING: Primary Diagnoses already on File for this encounter." | 
|---|
| 19 | . W !?5,"If changed, all procedures will be updated. ("_ECDXN_")" | 
|---|
| 20 | . S ECDXO=ECDX | 
|---|
| 21 | I $P(ECPDX,U,2) D | 
|---|
| 22 | . S TXT="WARNING: Primary diagnoses already sent to PCE. If changed," | 
|---|
| 23 | . S TXT=TXT_" all procedures" | 
|---|
| 24 | . W !!?5,TXT | 
|---|
| 25 | . S TXT="associated with this encounter will be updated and resent " | 
|---|
| 26 | . S TXT=TXT_"to PCE." | 
|---|
| 27 | . W !?5,TXT | 
|---|
| 28 | Q | 
|---|
| 29 | PDXCK(ECDFN,ECDTX,ECLX,EC4X) ;Get primary dx frm file #721 for pat encounter | 
|---|
| 30 | ;   Input:   ECDFN     = Patient ien | 
|---|
| 31 | ;            ECDTX     = Date/time of procedure | 
|---|
| 32 | ;            ECLX      = Location ien | 
|---|
| 33 | ;            EC4X      = Clinic ien | 
|---|
| 34 | ; | 
|---|
| 35 | ;   Output:  PDXF^PCEF = primary dx flag (1/0)^dx sent to PCE flag (1/0) | 
|---|
| 36 | ;            ECDX      = Primary diagnoses ien | 
|---|
| 37 | ;            ECDXN     = Primary diagnoses code | 
|---|
| 38 | ;            ECDXIEN   = Array of encounter IENs w primary dx | 
|---|
| 39 | ; | 
|---|
| 40 | N PDXF,PCEF,DA,DXIEN,DXS,DXN | 
|---|
| 41 | S (PDXF,PCEF)=0,DA="" K ECDXIEN | 
|---|
| 42 | I $G(ECDFN)=""!($G(ECDTX)="")!($G(ECLX)="")!($G(EC4X)="") Q PDXF_U_PCEF | 
|---|
| 43 | I $O(^ECH("APAT",ECDFN,ECDTX,""))="" Q PDXF_U_PCEF | 
|---|
| 44 | F  S DA=$O(^ECH("APAT",ECDFN,ECDTX,DA)) Q:DA=""  D | 
|---|
| 45 | . I EC4X'=$P($G(^ECH(DA,0)),U,19) Q | 
|---|
| 46 | . S ECDX=$P($G(^ECH(DA,"P")),U,2) I ECDX="" Q | 
|---|
| 47 | . S ECDXN=$P($$ICDDX^ICDCODE(ECDX,ECDTX),U,2) | 
|---|
| 48 | . S ECDXIEN(DA)=ECDXN_U_ECDX,PDXF=1 | 
|---|
| 49 | . I $D(^ECH(DA,"SEND")),^("SEND")="" S PCEF=1 | 
|---|
| 50 | . I $D(^ECH(DA,"DX")) D | 
|---|
| 51 | . . S DXS=0 F  S DXS=$O(^ECH(DA,"DX",DXS)) Q:'DXS  D | 
|---|
| 52 | ...S DXIEN=$P($G(^ECH(DA,"DX",DXS,0)),U) | 
|---|
| 53 | ...S DXN=$P($$ICDDX^ICDCODE(DXIEN,ECDTX),U,2) S:DXN'="" ECDXS(DXN)=DXIEN | 
|---|
| 54 | Q PDXF_U_PCEF | 
|---|
| 55 | PDX ;Ask primary diagnoses code | 
|---|
| 56 | ;   Variables:   ECDX    = Primary diagnoses ien | 
|---|
| 57 | ;                ECDXN   = Primary diagnoses code, default if define | 
|---|
| 58 | ;                ECOUT   = Error flag (1/0) | 
|---|
| 59 | ; | 
|---|
| 60 | N DIC,X,Y,DTOUT,DUOUT,DEFX,ECODE,PROMPT | 
|---|
| 61 | S ECDX=$G(ECDX),ECDXN=$G(ECDXN),PROMPT="Primary ICD-9 Code: " | 
|---|
| 62 | S:ECDXN'="" DEFX=ECDXN | 
|---|
| 63 | F  D LEX Q:$G(ECOUT)  D  I $D(ECODE) Q | 
|---|
| 64 | .I X="" W !,"This is a required response. Enter '^' to exit" Q | 
|---|
| 65 | .S ECDXN=ECODE,ECDX=+$$ICDDX^ICDCODE(ECODE,$G(ECDT)) | 
|---|
| 66 | Q | 
|---|
| 67 | SDX ;Ask secondary diagnoses code | 
|---|
| 68 | ;   Variables:   ECDX    = Primary diagnoses ien, default if define | 
|---|
| 69 | ;                ECDXN   = Primary diagnoses code | 
|---|
| 70 | ;                ECOUT   = Error flag (1/0) | 
|---|
| 71 | ;                ECDXS   = Array with secondary diagnosis code | 
|---|
| 72 | ;                          subscript=dx code and set equal to dx ien | 
|---|
| 73 | ; | 
|---|
| 74 | N Y,X,DEFX,DIC,DTOUT,DUOUT,ECODE | 
|---|
| 75 | S ECOUT=$G(ECOUT),PROMPT="Secondary ICD-9 Code: " | 
|---|
| 76 | F  D LSTDXS,LEX Q:Y<0  D  I ECOUT Q | 
|---|
| 77 | .I ECODE="" Q | 
|---|
| 78 | .I ECODE=$G(ECDXN) W "  Already exist as primary dx." Q | 
|---|
| 79 | .I $D(ECDXS(ECODE)) D DELDUP Q | 
|---|
| 80 | .S ECDXS(ECODE)=+$$ICDDX^ICDCODE(ECODE,$G(ECDT)) | 
|---|
| 81 | Q | 
|---|
| 82 | DELDUP ;Delete secondary diagnosis code from list | 
|---|
| 83 | N DIR,DIRUT,DTOUT,DUOUT,DIROUT | 
|---|
| 84 | S DIR("A")="Delete "_ECODE_" Code from List" | 
|---|
| 85 | S DIR(0)="Y" | 
|---|
| 86 | D ^DIR | 
|---|
| 87 | I $D(DIRUT)!($D(DIROUT)) S ECOUT=1 Q | 
|---|
| 88 | I Y K ECDXS(ECODE) | 
|---|
| 89 | Q | 
|---|
| 90 | LEX ;ICD code from LEX database | 
|---|
| 91 | ;K X,Y | 
|---|
| 92 | S X=$G(DEFX) | 
|---|
| 93 | ;LEX DBIA1577 | 
|---|
| 94 | D CONFIG^LEXSET("ICD",,$G(ECDT)) | 
|---|
| 95 | S DIC="757.01",DIC(0)=$S('$L($G(X)):"A",1:"")_"EQM",DIC("A")=PROMPT | 
|---|
| 96 | D ^DIC | 
|---|
| 97 | I $D(DTOUT)!$D(DUOUT) S ECOUT=1 Q | 
|---|
| 98 | I X="" Q | 
|---|
| 99 | I Y<0 S ECOUT=1 Q | 
|---|
| 100 | S ECODE=$G(Y(1)) | 
|---|
| 101 | Q | 
|---|
| 102 | LSTDXS ;list icd9-code | 
|---|
| 103 | N DXS | 
|---|
| 104 | I $D(ECDXS) D | 
|---|
| 105 | . W !?1,"Secondary ICD-9 code entered:" | 
|---|
| 106 | . S DXS="" | 
|---|
| 107 | . F  S DXS=$O(ECDXS(DXS)) Q:DXS=""  W !,?4,DXS,?15,$P($$ICDDX^ICDCODE(DXS,$G(ECDT)),"^",4) | 
|---|
| 108 | Q | 
|---|
| 109 | PXUPD(ECDFN,ECDT,ECL,EC4,ECDXP,ECDXX,ECXIEN) ; Update all associated | 
|---|
| 110 | ; procedures for an EC Patient encounter with the same primary and | 
|---|
| 111 | ; secondary dx codes | 
|---|
| 112 | ; | 
|---|
| 113 | ;   Input:   ECDFN     = Patient ien | 
|---|
| 114 | ;            ECDT      = Date/time of procedure | 
|---|
| 115 | ;            ECL       = Location ien | 
|---|
| 116 | ;            EC4       = Clinic ien | 
|---|
| 117 | ;            ECDXP     = Primary diagnoses code | 
|---|
| 118 | ;            ECDXX     = Array of secondary diagnoses codes | 
|---|
| 119 | ;            ECXIEN    = 721 ien, if define don't process | 
|---|
| 120 | ; | 
|---|
| 121 | ;  Output: ECERR  0 - Process completed | 
|---|
| 122 | ; | 
|---|
| 123 | N ECIEN,ECERR,DIE,DR,DA,DTOUT,DIROUT,ECDXIEN,ECPDX,ECDX,ECDXN,DIC,X | 
|---|
| 124 | N ECVST,ECVAR1,VALQUIET,DXN,DXSIEN,DIK,ECDXS | 
|---|
| 125 | S ECERR=0 | 
|---|
| 126 | I $D(ECDXP)="" Q ECERR | 
|---|
| 127 | S ECPDX=$$PDXCK(ECDFN,ECDT,ECL,EC4) | 
|---|
| 128 | I '$D(ECDXIEN) Q ECERR | 
|---|
| 129 | S ECIEN="",DIE="^ECH(" | 
|---|
| 130 | F  S ECIEN=$O(ECDXIEN(ECIEN)) Q:ECIEN=""  D | 
|---|
| 131 | . I $G(ECXIEN)'="",ECXIEN=ECIEN Q | 
|---|
| 132 | . S ECNODE=$G(^ECH(ECIEN,"P")) I ECNODE="" Q | 
|---|
| 133 | . I ECDXP'=$P(ECNODE,U,2) D | 
|---|
| 134 | . . S DA=ECIEN,DR="20////"_ECDXP D ^DIE | 
|---|
| 135 | . . S $P(^ECH(ECIEN,"PCE"),"~",11)=ECDXP | 
|---|
| 136 | . ;delete all secondary diagnosis codes | 
|---|
| 137 | . S DA(1)=ECIEN,DIK="^ECH("_DA(1)_",""DX"",",DA=0 | 
|---|
| 138 | . F  S DA=$O(^ECH(ECIEN,"DX",DA)) Q:'DA  D ^DIK | 
|---|
| 139 | . I $D(^ECH(ECIEN,"DX")) K ^ECH(ECIEN,"DX") | 
|---|
| 140 | . ;update secondary diagnosis codes on procedure | 
|---|
| 141 | . S DXN="" F  S DXN=$O(ECDXX(DXN)) Q:DXN=""  D | 
|---|
| 142 | . . S DXSIEN=$P(ECDXX(DXN),U) I DXSIEN<0 Q | 
|---|
| 143 | . . K DIC,DD,DO S DIC(0)="L",DA(1)=ECIEN,DIC("P")=$P(^DD(721,38,0),U,2) | 
|---|
| 144 | . . S X=DXSIEN,DIC="^ECH("_DA(1)_","_"""DX"""_"," D FILE^DICN | 
|---|
| 145 | . ;delete visit and resend to PCE | 
|---|
| 146 | . S ECVST=+$P($G(^ECH(ECIEN,0)),"^",21) I 'ECVST Q | 
|---|
| 147 | . ;* Prepare all EC records with same Visit file entry to resend to PCE | 
|---|
| 148 | . S ECVAR1=$$FNDVST^ECUTL(ECVST) | 
|---|
| 149 | . ;- Set VALQUIET to stop Amb Care validator from broadcasting to screen | 
|---|
| 150 | . S VALQUIET=1,ECVV=$$DELVFILE^PXAPI("ALL",ECVST) | 
|---|
| 151 | Q ECERR | 
|---|