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