[613] | 1 | ECUTL ;ALB/GTS/JAM - Event Capture Utilities ;18 May 98
|
---|
| 2 | ;;2.0; EVENT CAPTURE ;**10,18,47,63**;8 May 96
|
---|
| 3 | ;
|
---|
| 4 | FNDVST(ECVST,ECRECNUM) ; Search EC Patient records for associated Visits
|
---|
| 5 | ;
|
---|
| 6 | ; Input: ECVST - Visit file IEN to search for
|
---|
| 7 | ; ECRECNUM - Event Capture record number to skip processing
|
---|
| 8 | ;
|
---|
| 9 | ; Output: ECERR 1 - One of the records to resend lacks a zero node
|
---|
| 10 | ; 0 - All of the records to resend have zero nodes
|
---|
| 11 | ;
|
---|
| 12 | N ECIEN,ECERR,ECVAR
|
---|
| 13 | I '$D(ECRECNUM) S ECRECNUM=0
|
---|
| 14 | S (ECVAR,ECERR)=0
|
---|
| 15 | S:+ECVST'>0 ECERR=1
|
---|
| 16 | I ECERR=0 DO
|
---|
| 17 | .S ECIEN=""
|
---|
| 18 | .F S ECIEN=$O(^ECH("C",ECVST,ECIEN)) Q:+ECIEN=0 DO
|
---|
| 19 | ..S:ECRECNUM'=ECIEN ECVAR=$$RSEND(ECIEN)
|
---|
| 20 | ..S:ECVAR>0 ECERR=1
|
---|
| 21 | FNDVSTQ Q ECERR
|
---|
| 22 | ;
|
---|
| 23 | RSEND(ECIEN) ; Prepare EC Patient record for resending to PCE
|
---|
| 24 | ;
|
---|
| 25 | ; Input: ECIEN - IEN for record to resend to PCE
|
---|
| 26 | ;
|
---|
| 27 | ; Output: 0 if successful - EC Patient record will be resent to PCE
|
---|
| 28 | ; 1 if Unsuccessful - EC Patient record lacks zero node
|
---|
| 29 | ;
|
---|
| 30 | N ECERR,DA,DIE,DR,ECPROCDT
|
---|
| 31 | S ECERR=0
|
---|
| 32 | I '$D(^ECH(ECIEN,0)) S ECERR=1
|
---|
| 33 | I ECERR=0 DO
|
---|
| 34 | .S ECPROCDT=$P(^ECH(ECIEN,0),"^",3)
|
---|
| 35 | .S DA=ECIEN,DIE=721,DR="25///@;28///@;31///^S X=ECPROCDT;32///@"
|
---|
| 36 | .D ^DIE
|
---|
| 37 | RSENDQ Q ECERR
|
---|
| 38 | MODSCN() ;Screen CPT Procedure Modifier
|
---|
| 39 | N ECPT,ECCPT,ECPDT
|
---|
| 40 | S ECCPT="" I $G(ECP)'="" D
|
---|
| 41 | . S ECCPT=$S(ECP["EC":$P($G(^EC(725,+ECP,0)),"^",5),1:+ECP)
|
---|
| 42 | S ECPDT=$S($D(^ECH(DA,0)):$P(^ECH(DA,0),U,3),$D(ECDT):ECDT,1:"")
|
---|
| 43 | S ECPT=$S($D(^ECH(DA,"P")):$P(^ECH(DA,"P"),U),ECCPT'="":ECCPT,1:"")
|
---|
| 44 | I ECPT'="",+$$MODP^ICPTMOD(ECPT,+Y,"I",ECPDT)>0
|
---|
| 45 | Q
|
---|
| 46 | ASKMOD(PROC,MOD,PRDT,ECMOD,ECERR) ; Ask CPT modifiers for CPT procedure
|
---|
| 47 | ; Input PROC = CPT Procedure
|
---|
| 48 | ; MOD = Default modifier
|
---|
| 49 | ; PRDT = Date/Time of procedure. Checks modifier status
|
---|
| 50 | ;
|
---|
| 51 | ;Output ECMOD( array with modifiers
|
---|
| 52 | ; ECERR = Error flag 1 - error or 0 - no error.
|
---|
| 53 | ;
|
---|
| 54 | N DTOUT,DUOUT,DIROUT,SUB,I,DEF,DIR,DIC,DSC,IEN,DATA,MODAR
|
---|
| 55 | S ECERR=$G(ECERR,0),DEF=""
|
---|
| 56 | I PROC="" S ECERR=1 G ASKMODQ
|
---|
| 57 | I '$D(PRDT) S PRDT=""
|
---|
| 58 | S DIC="^ICPT(",DIC(0)="N",X=PROC
|
---|
| 59 | S DIC("S")="I $P($$CPT^ICPTCOD(+Y,PRDT),""^"",7)"
|
---|
| 60 | D ^DIC I +Y=-1 S ECERR=1 G ASKMODQ
|
---|
| 61 | ;If no modifiers present for CPT code quit
|
---|
| 62 | S DATA=$$CODM^ICPTCOD(PROC,"MODAR","",PRDT)
|
---|
| 63 | G:$O(MODAR(""))="" ASKMODQ K MODAR
|
---|
| 64 | ;Set modifiers in ECMOD array if a valid pair (CPT code/modifier)
|
---|
| 65 | S SUB="" F I=1:1 S SUB=$P(MOD,",",I) Q:SUB="" D
|
---|
| 66 | . S DATA=$$MODP^ICPTMOD(PROC,SUB,"E",PRDT)
|
---|
| 67 | . I +DATA'>0 W !?2,"Modifier: ",SUB," Invalid - ",$P(DATA,U,2) Q
|
---|
| 68 | . S DSC=$P(DATA,U,2),IEN=$P(DATA,U),ECMOD(PROC,SUB)=DSC_U_IEN,DEF=SUB
|
---|
| 69 | ;List modifiers entered
|
---|
| 70 | S SUB="" F I=1:1 S SUB=$O(ECMOD(PROC,SUB)) Q:SUB="" D
|
---|
| 71 | . W !?2,"Modifier: ",SUB," ",$P(ECMOD(PROC,SUB),U)
|
---|
| 72 | I DEF'="" S DIR("B")=DEF
|
---|
| 73 | AGAIN N Y,X,DEFX,ECY
|
---|
| 74 | S DIR("A")="Modifier",DIR("?")="^D MODHLP^ECUTL"
|
---|
| 75 | S DIR(0)="FO^^I $$VALMOD^ECUTL(PROC,X,PRDT)",DEFX=""
|
---|
| 76 | D ^DIR K DIR G:X="" ASKMODQ
|
---|
| 77 | I $D(DTOUT)!($D(DUOUT))!($D(DIROUT)) K ECMOD(PROC) S ECERR=1 G ASKMODQ
|
---|
| 78 | D G AGAIN
|
---|
| 79 | . I X="@" K:DEF'="" ECMOD(PROC,DEF) W " ...deleted" Q
|
---|
| 80 | . I '$D(ECY) Q
|
---|
| 81 | . I DEF'=DEFX,DEFX'="",$D(ECMOD(PROC,DEFX)) S (DEF,DIR("B"))=DEFX Q
|
---|
| 82 | . K DIR("B") S ECMOD(PROC,$P(ECY,U,2))=$P(ECY(0),U,2)_U_$P(ECY,U),DEF=""
|
---|
| 83 | ;
|
---|
| 84 | ASKMODQ Q $S(ECERR:0,1:1)
|
---|
| 85 | ;
|
---|
| 86 | VALMOD(PROC,X,PRDT) ;Validate modifiers
|
---|
| 87 | N DIC,DTOUT,DUOUT,DIROUT,DUOUT
|
---|
| 88 | S DIC="^DIC(81.3,",DIC(0)="MEQZ"
|
---|
| 89 | S DIC("W")="W "" "" W "" "",$P($$MOD^ICPTMOD(+Y,""I"",$G(PRDT)),U,3)"
|
---|
| 90 | S DIC("S")="I +$$MODP^ICPTMOD(PROC,Y,""I"",PRDT)>0"
|
---|
| 91 | D ^DIC I Y<0 K X Q 1
|
---|
| 92 | M ECY=Y S DEFX=$P(Y,U,2)
|
---|
| 93 | Q 1
|
---|
| 94 | MODHLP ;Help for CPT modifiers
|
---|
| 95 | N DIC,MOD,D
|
---|
| 96 | Q:'$D(PROC) I $D(ECMOD(PROC)) D
|
---|
| 97 | . W !?2,"Answer with CPT MODIFIER",!?1,"Choose from:"
|
---|
| 98 | . S MOD="" F S MOD=$O(ECMOD(PROC,MOD)) Q:MOD="" W !,?4,MOD
|
---|
| 99 | W !?6,"You may enter a new CPT MODIFIER, if you wish"
|
---|
| 100 | W !?6,"Enter a modifier that is valid for the CPT procedure code."
|
---|
| 101 | S DIC="^DIC(81.3,",DIC("W")="W "" "" W "" "",$P($$MOD^ICPTMOD(+Y,""I"",$G(PRDT)),U,3)",D="B"
|
---|
| 102 | S DIC(0)="QEZ",DIC("S")="I +$$MODP^ICPTMOD(PROC,Y,""I"",$G(PRDT))>0"
|
---|
| 103 | D DQ^DICQ
|
---|
| 104 | Q
|
---|
| 105 | MOD(ECIEN,MFT,OUTARR) ;Returns modifiers associated with an EC Patient IEN
|
---|
| 106 | ; Input: ECIEN - IEN entry in file 721/^ECH(
|
---|
| 107 | ; MFT - format to provide modifier
|
---|
| 108 | ; "I" - ien format
|
---|
| 109 | ; "E" - .01 format (default)
|
---|
| 110 | ;
|
---|
| 111 | ; Output: OUTARR - output array subscripted by modifer ien or .01 value
|
---|
| 112 | ; ien^modifier^modifier description
|
---|
| 113 | ; returns 1 if successful or 0 if unsuccessful
|
---|
| 114 | ;
|
---|
| 115 | I $G(ECIEN)="" Q 0 ;IEN not define.
|
---|
| 116 | I '$D(^ECH(ECIEN)) Q 0 ;IEN does not exist in file 721/^ECH(
|
---|
| 117 | I $O(^ECH(ECIEN,"MOD",0))="" Q 0 ;No modifiers on file for entry
|
---|
| 118 | N MOD,IEN,ECMERR,MODARY,MODESC,SUB,SEQ,ECDT
|
---|
| 119 | S MFT=$S($G(MFT)="":"E",1:MFT) I "E^I"'[$E(MFT) S MFT="E"
|
---|
| 120 | S ECDT=$P($G(^ECH(ECIEN,0)),U,3)
|
---|
| 121 | D GETS^DIQ(721,ECIEN,"36*","IE","MODARY","ECMERR")
|
---|
| 122 | I $D(ECMERR) Q 0 ;Error looking up entry
|
---|
| 123 | S SEQ="" F S SEQ=$O(MODARY(721.036,SEQ)) Q:SEQ="" D
|
---|
| 124 | . S SUB=$G(MODARY(721.036,SEQ,.01,MFT)) I SUB="" Q
|
---|
| 125 | . S IEN=$G(MODARY(721.036,SEQ,.01,"I")) I IEN="" Q
|
---|
| 126 | . S MOD=$G(MODARY(721.036,SEQ,.01,"E")) I MOD="" S MOD="Unknown"
|
---|
| 127 | . S MODESC=$P($$MOD^ICPTMOD(MOD,"E",ECDT),U,3)
|
---|
| 128 | . I MODESC="" S MODESC="Unknown"
|
---|
| 129 | . S OUTARR(SUB)=IEN_U_MOD_U_MODESC
|
---|
| 130 | Q $S($D(OUTARR):1,1:0)
|
---|