[613] | 1 | ICDSUPT ;DLS/DEK - ICD SUPPORT FOR APIS ; 04/28/2003
|
---|
| 2 | ;;18.0;DRG Grouper;**6**;Oct 20, 2000;Build 1
|
---|
| 3 | ;
|
---|
| 4 | ; External References
|
---|
| 5 | ; DBIA 10103 $$DT^XLFDT
|
---|
| 6 | ;
|
---|
| 7 | EFF(FILE,CODE,EDT) ; returns effective date and status for code/modifier
|
---|
| 8 | ; Input:
|
---|
| 9 | ; FILE = file number REQUIRED
|
---|
| 10 | ; 80 = ICD DX
|
---|
| 11 | ; 80.1 = ICD O/P
|
---|
| 12 | ; CODE = ICD CODE ien REQUIRED
|
---|
| 13 | ; EDT = date to check (FileMan format) REQUIRED
|
---|
| 14 | ;
|
---|
| 15 | ; Output: STATUS^Inactivation Date^Activation Date
|
---|
| 16 | ; where STATUS = 1 = active
|
---|
| 17 | ; 0 = inactive
|
---|
| 18 | ; Activation Date = date code became active
|
---|
| 19 | ; Inactivation Date = date code became inactive
|
---|
| 20 | ; -or-
|
---|
| 21 | ; -1^error message
|
---|
| 22 | ;
|
---|
| 23 | ; Variables:
|
---|
| 24 | ; EFILE = indirect file reference for code
|
---|
| 25 | ; EFF,EFFDT,EFFDOS,EFFDFLT = effective dates
|
---|
| 26 | ; EFFN = sub-entry ien
|
---|
| 27 | ; EFFST = effective status
|
---|
| 28 | ; STR = output
|
---|
| 29 | ;
|
---|
| 30 | I $G(CODE)="" Q "-1^NO CODE SELECTED"
|
---|
| 31 | I $G(FILE)="" Q "-1^NO FILE SELECTED"
|
---|
| 32 | I '(FILE=80!(FILE=80.1)) Q "-1^INVALID FILE"
|
---|
| 33 | I '$G(EDT) Q "-1^NO DATE SELECTED"
|
---|
| 34 | N EFILE,EFF,EFFN,STR,EFFDT,EFFST,EFFB,EFFDOS
|
---|
| 35 | S EFILE=$S(FILE=80:"^ICD9(",1:"^ICD0(")_CODE_",66,"
|
---|
| 36 | S EDT=$S($G(EDT)="":$$DT^XLFDT,1:$$DTBR^ICDAPIU(EDT))+.001 ;date business rules
|
---|
| 37 | S EFF=$O(@(EFILE_"""B"","_EDT_")"),-1)
|
---|
| 38 | I 'EFF Q "0^^"
|
---|
| 39 | S EFFN=$O(@(EFILE_"""B"","_EFF_",0)")) ; node 66 (effective date) sub-entry
|
---|
| 40 | S STR=$G(@(EFILE_EFFN_",0)"))
|
---|
| 41 | I STR="" Q "0^^"
|
---|
| 42 | ;set Opposite eff. date based on status
|
---|
| 43 | S EFFDT=$P(STR,"^"),EFFST=$P(STR,"^",2),EFFB=0,EFF=+EFF
|
---|
| 44 | F S EFF=$O(@(EFILE_"""B"","_EFF_")"),-1) Q:'EFF!EFFB D
|
---|
| 45 | . S EFFN=$O(@(EFILE_"""B"","_EFF_",0)")) I 'EFFN S EFFB=1 Q
|
---|
| 46 | . S EFFDOS=$G(@(EFILE_EFFN_",0)")) I 'EFFDOS S EFFB=1 Q
|
---|
| 47 | . S EFFB=(EFFST'=$P(EFFDOS,"^",2))
|
---|
| 48 | S EFFDOS=$P($G(EFFDOS),"^")
|
---|
| 49 | I EFFST S $P(STR,"^",3,4)=(EFFDOS)_"^"_EFFDT
|
---|
| 50 | E S $P(STR,"^",3,4)=EFFDT_"^"_(EFFDOS)
|
---|
| 51 | Q $P(STR,"^",2,4)
|
---|
| 52 | ;
|
---|
| 53 | NUM(Y) ; convert ICD to $A() of alpha _ numeric portion
|
---|
| 54 | ; Input: Y - ICD code
|
---|
| 55 | ; Output: 'plussed' value for ICD OP code,
|
---|
| 56 | ; numeric for ICD based on $A of 1st character (alpha)
|
---|
| 57 | ; concatenated with the remainder of the ICD DX code
|
---|
| 58 | ;
|
---|
| 59 | ; **This does not convert to ien**
|
---|
| 60 | ;
|
---|
| 61 | ; This converts to a numeric that may be used for range sorting
|
---|
| 62 | ;
|
---|
| 63 | ; A few ICD DX codes start with "E", "M", or "V" - use ascii
|
---|
| 64 | ; Remaining ICD DX codes will use 10 as a prefix - insuring DX > OP
|
---|
| 65 | ; All ICD OP codes match dd.d, dd.dd, or dd.ddd
|
---|
| 66 | ; where 'd' is a digit; e.g. "V83.89"=8683.89 and "008.8"=10008.8
|
---|
| 67 | ;
|
---|
| 68 | Q $S(Y?2N1"."1.3N:+Y,Y?1U2.3N1".".2N:$A($E(Y))_$E(Y,2,6),1:10_$E(Y,2,7))
|
---|
| 69 | ;
|
---|