| 1 | ICDSUPT ;DLS/DEK - ICD SUPPORT FOR APIS ; 04/28/2003
 | 
|---|
| 2 |  ;;18.0;DRG Grouper;**6**;Oct 20, 2000
 | 
|---|
| 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 |  ;
 | 
|---|