Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: ICDEXD2

ICDEXD2.m

Go to the documentation of this file.
  1. ICDEXD2 ;SLC/KER - ICD Extractor - DRG APIs (cont) ;12/19/2014
  1. ;;18.0;DRG Grouper;**57,67,82**;Oct 20, 2000;Build 21
  1. ;
  1. ; Global Variables
  1. ; ^ICDS( N/A
  1. ;
  1. ; External References
  1. ; $$DT^XLFDT ICR 10103
  1. ; $$FMADD^XLFDT ICR 10103
  1. ; $$FMTE^XLFDT ICR 10103
  1. ; ^%DT ICR 10003
  1. ; ^DIR ICR 10026
  1. ;
  1. Q
  1. MD(FILE,IEN,CDT,ARY,FLAG) ; MDC DRGs
  1. ;
  1. ; Input
  1. ;
  1. ; FILE File Number/Identifier
  1. ; IEN Internal entry in file
  1. ; CDT Code Set Versioning Date
  1. ; .ARY Array name passed by reference
  1. ; FLAG Flag I=Internal (default)
  1. ; E=External
  1. ;
  1. ; Output
  1. ;
  1. ; ICD Procedures file 80.1 (multiple MDC)
  1. ;
  1. ; ARY(<fiscal year>,<MDC>)=DRG^;FY;STA
  1. ; ARY(<fiscal year>,<MDC>)="DRG^DRG^;FY;STA
  1. ;
  1. ; If Flag contains "E"
  1. ; ARY(<fiscal year>,"E",<MDC>)=MDC Name
  1. ; ARY(<fiscal year>,"E",<MDC>,<DRG>)=DRG Name
  1. ; ARY(<fiscal year>,"E",<MDC>)=MDC Name
  1. ; ARY(<fiscal year>,"E",<MDC>,<DRG>)=DRG Name
  1. ; ARY(<fiscal year>,"E",<MDC>,<DRG>)=DRG Name
  1. ; ARY(<fiscal year>,"E","FY")=External FY
  1. ;
  1. ; ICD Diagnosis file 80 (single MDC)
  1. ;
  1. ; ARY(<fiscal year>,<MDC>)="DRG^DRG^;FY;STA
  1. ;
  1. ; If Flag contains "E"
  1. ; ARY(<fiscal year>,"E",<MDC>)=MDC Name
  1. ; ARY(<fiscal year>,"E",<MDC>,<DRG>)=DRG Name
  1. ; ARY(<fiscal year>,"E",<MDC>,<DRG>)=DRG Name
  1. ; ARY(<fiscal year>,"E","FY")=External FY
  1. ;
  1. ; NOTE: If no Fiscal Year found for the input
  1. ; date then the first (earliest) Fiscal Year is
  1. ; used.
  1. ;
  1. N DRG,FY,FYIEN,MDC,MDCIEN,MY,MYIEN,ROOT,STA,STR S FLAG=$G(FLAG) S:'$L(FLAG) FLAG="I"
  1. S FILE=$G(FILE) S:FILE=9!(FILE["ICD9") FILE=80 S:FILE=0!(FILE["ICD0") FILE=80.1
  1. Q:"^80^80.1^"'[("^"_FILE_"^") "-1;Invalid file selected"
  1. S IEN=+($G(IEN)),CDT=$P($G(CDT),".",1)
  1. S ROOT=$$ROOT^ICDEX(FILE) S:CDT'?7N CDT=$$DT^XLFDT
  1. Q:'$L(ROOT) "-1;Invalid file selected"
  1. K ARY I FILE=80.1 D
  1. . S STA=1,FY=$O(^ICD0(IEN,2,"B",(CDT+.001)),-1)
  1. . S:FY'?7N STA=0,FY=$O(^ICD0(IEN,2,"B","")) Q:FY'?7N
  1. . S FYIEN=$O(^ICD0(IEN,2,"B",+$G(FY),0)) Q:+FYIEN'>0
  1. . S MDC=0 F S MDC=$O(^ICD0(IEN,2,FYIEN,1,"B",MDC)) Q:'$L(MDC) D
  1. . . S MDCIEN=0 F S MDCIEN=$O(^ICD0(IEN,2,FYIEN,1,"B",MDC,MDCIEN)) Q:+MDCIEN'>0 D
  1. . . . S STR="",DRG=""
  1. . . . F S DRG=$O(^ICD0(IEN,2,FYIEN,1,MDCIEN,1,"B",DRG)) Q:'$L(DRG) S STR=STR_DRG_"^"
  1. . . S ARY(FY,MDC)=STR_";"_FY_";"_STA
  1. . . I FLAG["E" D
  1. . . . N ED,EMDC,DRGI,IDRG,DRGOUT
  1. . . . S ED=$$FMTE^XLFDT(FY,"5DZ"),EMDC=$P($G(^ICM(+MDC,0)),"^",1)
  1. . . . S ARY(FY,"E","FY")=ED,ARY(FY,"E",MDC)=EMDC
  1. . . . F DRGI=1:1 Q:'$L($P($G(STR),"^",DRGI)) D
  1. . . . . N IDRG,DRGOUT S IDRG=$P($G(STR),"^",DRGI) Q:+IDRG'>0
  1. . . . . K DRGOUT D DRGD^ICDGTDRG(IDRG,"DRGOUT",,$G(CDT))
  1. . . . . S:$L($G(DRGOUT(1)))&(+DRGI>0) ARY(FY,"E",MDC,IDRG)=$G(DRGOUT(1))
  1. I FILE=80 D
  1. . S STA=1,FY=$O(^ICD9(IEN,3,"B",(CDT+.001)),-1)
  1. . S:FY'?7N STA=0,FY=$O(^ICD9(IEN,3,"B","")) Q:FY'?7N
  1. . S MY=$O(^ICD9(IEN,4,"B",(FY+.001)))
  1. . S:MY'?7N MY=$O(^ICD9(IEN,4,"B",""))
  1. . S MYIEN=$O(^ICD9(IEN,4,"B",+$G(MY),0))
  1. . S MDC=$P($G(^ICD9(IEN,4,+MYIEN,0)),"^",2)
  1. . S FYIEN=$O(^ICD9(IEN,3,"B",+$G(FY),0)) Q:+FYIEN'>0
  1. . S STR="",DRG=""
  1. . F S DRG=$O(^ICD9(IEN,3,FYIEN,1,"B",DRG)) Q:'$L(DRG) S STR=STR_DRG_"^"
  1. . I +MDC'>0 S MDC=$$DRGMDC^ICDEXD(+STR)
  1. . S ARY(FY,MDC)=STR_";"_FY_";"_STA
  1. . I FLAG["E" D
  1. . . N ED,EMDC,DRGI,IDRG,DRGOUT
  1. . . S ED=$$FMTE^XLFDT(FY,"5DZ"),EMDC=$P($G(^ICM(+MDC,0)),"^",1)
  1. . . S ARY(FY,"E","FY")=ED,ARY(FY,"E",MDC)=EMDC
  1. . . F DRGI=1:1 Q:'$L($P($G(STR),"^",DRGI)) D
  1. . . . N IDRG,DRGOUT S IDRG=$P($G(STR),"^",DRGI) Q:+IDRG'>0
  1. . . . K DRGOUT D DRGD^ICDGTDRG(IDRG,"DRGOUT",,$G(CDT))
  1. . . . S:$L($G(DRGOUT(1)))&(+DRGI>0) ARY(FY,"E",MDC,IDRG)=$G(DRGOUT(1))
  1. Q
  1. VMDCDX(IEN,CDT) ; Get versioned MDC for Diagnosis Code
  1. ;
  1. ; Input
  1. ;
  1. ; IEN Internal Entry Number file 80
  1. ; CDT Code Set Versioning Date
  1. ;
  1. ; Output
  1. ;
  1. ; $$VMDCDX Versioned MDC
  1. ;
  1. N ICDI,ICDD,ICDS,ICDM,ICDY S ICDI=+($G(IEN)) Q:'$D(^ICD9(ICDI,4,"B")) ""
  1. S ICDS=$P($G(^ICD9(+ICDI,1)),"^",1),ICDD=$$DTBR^ICDEX($G(CDT),0,ICDS)
  1. S (ICDM,ICDY)="",ICDY=$O(^ICD9(+ICDI,4,"B",(ICDD+.0001)),-1)
  1. S ICDM=$O(^ICD9(ICDI,4,"B",+ICDY,ICDM))
  1. Q $P($G(^ICD9(ICDI,4,+ICDM,0)),U,2)
  1. VMDCOP(IEN,MDC,CDT) ; Get versioned MDC for Op/Pro ICD code from previous years
  1. ;
  1. ; Input
  1. ;
  1. ; IEN Internal Entry Number file 80.1
  1. ; MDC Major Diagnostic Category
  1. ; CDT Code Set Versioning Date
  1. ;
  1. ; Output
  1. ;
  1. ; $$VMDCOP 4 piece "^" delimited string
  1. ;
  1. ; 1 Fiscal Year Fileman format
  1. ; 2 MDC Pointer to file 80.3
  1. ; 3 Fiscal Year pointer to sub-file 80.171
  1. ; (formerly known as DADRGFY)
  1. ; 4 MDC pointer to sub-file 80.1711
  1. ; (formerly known as DAMDC)
  1. ;
  1. N ICDI,ICDC,ICDD,ICDO,ICDY,ICDM,ICDS S ICDI=+($G(IEN)) Q:'$D(^ICD0(ICDI,2,"B")) ""
  1. S ICDC=$G(MDC) Q:'$L(MDC) "" S ICDS=$P($G(^ICD0(+ICDI,1)),"^",1)
  1. S ICDD=$$DTBR^ICDEX($G(CDT),0,ICDS) S (ICDM,ICDY)=""
  1. S ICDD=ICDD+.0001 F S ICDD=$O(^ICD0(ICDI,2,"B",ICDD),-1) Q:'ICDD!(ICDM>0) D
  1. . S ICDY=$O(^ICD0(ICDI,2,"B",+$G(ICDD),ICDY)),ICDO=ICDD
  1. . S ICDM=$O(^ICD0(ICDI,2,+ICDY,1,"B",ICDC,ICDM))
  1. Q:'$L($G(ICDO)) ""
  1. Q (ICDO_"^"_ICDC_"^"_ICDY_"^"_ICDM)
  1. ;
  1. MDCG(IEN,CDT,ARY) ; Set up ICDMDC() array
  1. ;
  1. ; Input
  1. ;
  1. ; IEN ICD Diagnosis (IEN)
  1. ; CDT Code Set Versioning Date
  1. ; .ARY Array name passed by reference
  1. ;
  1. ; Output
  1. ;
  1. ; ARY Array listing MDCs for all DRGs
  1. ;
  1. ; ARY=MDC
  1. ; ARY(MDC)=""
  1. ;
  1. N I,ICDC,ICDO,ICDTMP,ICDS,ICDD,DRGS S IEN=$G(IEN) Q:+IEN'>0 S ICDS=$P($G(^ICD9(+IEN,1)),"^",1)
  1. S ICDD=$$DTBR^ICDEX($G(CDT),0,ICDS) Q:'$L(IEN) S ICDO=$G(ARY) K ARY S:$L(ICDO) ARY=ICDO
  1. S ICDTMP=$$GETDRG^ICDEX(80,IEN,ICDD) Q:'$P(ICDTMP,";",3) S DRGS=$P(ICDTMP,";")
  1. F I=1:1 Q:'$L($P(DRGS,"^",I)) Q:'$P(DRGS,"^",I) D
  1. . N DRG,MDC S DRG=$P(DRGS,"^",I) Q:DRG="" S MDC=$P($$DRG^ICDGTDRG(DRG,ICDD),"^",5) Q:MDC="" S ARY(MDC)=""
  1. Q
  1. MDCT(IEN,CDT,ARY,FMT) ; For Multiple MDC DX Codes
  1. ;
  1. ; Input:
  1. ;
  1. ; IEN Internal Entry Number for file 80.1
  1. ; CDT Code Set Versioning Date
  1. ; .ARY Array of MDCs passed by reference (required)
  1. ; FMT Output Format (optional)
  1. ;
  1. ; 0 Boolean value only (default)
  1. ; 1 2 piece "^" delimited string
  1. ; 1 Boolean value
  1. ; 2 String of matching MDCs delimited by ";"
  1. ; Output:
  1. ;
  1. ; $$MDCT Boolean value
  1. ;
  1. ; 0 The ICD Procedure code identified by IEN
  1. ; does not include any of the MDCs passed
  1. ; in .ARY(MDC) on the date specified (CDT)
  1. ;
  1. ; 1 The ICD Procedure code identified by IEN
  1. ; includes one or more of the MDCs passed
  1. ; in .ARY(MDC) on the date specified (CDT)
  1. ;
  1. N FY,FYI,I,MD,MDC,OK,STR
  1. S IEN=+($G(IEN)) Q:'$D(^ICD0(+IEN,0)) 0
  1. Q:$P($G(^ICD0(IEN,1)),"^",7)>0 0
  1. S CDT=$G(CDT) S:CDT'?7N CDT=$$DT^XLFDT
  1. S FMT=+($G(FMT)),(STR,MD)="",OK=0 F I=1:1 S MD=$O(ARY(MD)) Q:MD="" D
  1. . N FY,FYI,MDC S FY=$O(^ICD0(IEN,2,"B",(+CDT+.001)),-1) Q:FY'?7N
  1. . S FYI=$O(^ICD0(IEN,2,"B",+FY,0))
  1. . S MDC=$D(^ICD0(IEN,2,+FYI,1,"B",MD))
  1. . S:MDC>0 STR=STR_";"_MD
  1. . S:MDC>0 OK=1
  1. F Q:$E(STR,1)'=";" S STR=$E(STR,2,$L(STR))
  1. S OK=+OK S:FMT>0&($L(STR)) OK=OK_"^"_STR
  1. Q OK
  1. MDCD(IEN,MDC,CDT) ; Check for default MDC
  1. ;
  1. ; Input:
  1. ;
  1. ; IEN Internal Entry Number for file 80.1
  1. ; MDC Major Diagnostic Category
  1. ; CDT Code Set Versioning Date (optional)
  1. ; If not passed, the first FY is used
  1. ;
  1. ; Output:
  1. ;
  1. ; $$MDCD Boolean value
  1. ;
  1. ; 0 MDC Does not exist
  1. ; 1 MDC Exist
  1. ;
  1. N ICDY,ICDM,ICDD,ICDF S ICDY=+($G(IEN)) Q:'$D(^ICD0(+IEN,2,1,1)) 0 S ICDM=$G(MDC) Q:'$L(ICDM) 0
  1. S ICDD=$G(CDT),ICDF=$O(^ICD0(+ICDY,2,"B",(ICDD+.001)),-1) S:ICDF'?7N ICDF=$O(^ICD0(+ICDY,2,"B",""))
  1. S ICDF=$O(^ICD0(+ICDY,2,"B",+ICDF,0)) Q:ICDF'>0 $S($D(^ICD0(ICDY,2,1,1,"B",ICDM))>0:1,1:0)
  1. Q:ICDF>0 $S($D(^ICD0(ICDY,2,+ICDF,1,"B",ICDM))>0:1,1:0)
  1. MDCN(IEN) ; Major Diagnostic Category Name
  1. ;
  1. ; Input:
  1. ;
  1. ; IEN Internal Entry Number for file 80.3
  1. ;
  1. ; Output:
  1. ;
  1. ; $$MDCN Major Diagnostic Category Name
  1. ;
  1. ; Replaces ICR 1586
  1. ;
  1. Q $P($G(^ICM(+($G(IEN)),0)),"^",1)
  1. MOR(IEN) ; Major O.R. Procedure
  1. ;
  1. ; Input:
  1. ;
  1. ; IEN Internal Entry Number for file 80.1
  1. ;
  1. ; Output:
  1. ;
  1. ; $$MOR Major O.R. Procedure
  1. ;
  1. Q $G(^ICD0(+($G(IEN)),"M"))
  1. ;
  1. ISVALID(FILE,IEN,CDT) ; Is an ICD code Valid
  1. ;
  1. ; Input:
  1. ;
  1. ; FILE File or global root
  1. ; IEN Internal Entry Number
  1. ; CDT Effective date to use (default TODAY)
  1. ;
  1. ; Output:
  1. ;
  1. ; $$ISVALID This is a Boolean value
  1. ;
  1. ; 1 if the code is valid
  1. ; 0 if the code is not valid
  1. ;
  1. N ICDO,ICDD,ICDF,ICDT,ICDX,ICDI,ICDR S ICDO=0
  1. S FILE=$S(FILE="9":80,FILE="0":80.1,1:FILE)
  1. S ICDD=$P($G(CDT),".",1) S:ICDD'?7N ICDD=$$DT^XLFDT
  1. S ICDF=$$FILE^ICDEX(FILE) Q:"^80^80.1^"'[("^"_FILE_"^") ICDO
  1. S ICDR=$$ROOT^ICDEX(FILE),ICDI=+($G(IEN)) Q:+ICDI'>0 ICDO
  1. Q:'$D(@(ICDR_+ICDI_",0)")) ICDO S ICDX=$$EXC^ICDEX(ICDF,ICDI) Q:ICDX>0 ICDO
  1. S ICDT=$$LS^ICDEX(ICDF,ICDI,ICDD) I ICDT>0 S ICDO=1
  1. Q ICDO
  1. REF(IEN,CDT) ; Return Reference Table
  1. ;
  1. ; Input:
  1. ;
  1. ; IEN Internal Entry Number
  1. ; CDT Effective date to use (default TODAY)
  1. ;
  1. ; Output:
  1. ;
  1. ; $$REF Table reference associated DRG entry
  1. ; or null if not found
  1. ;
  1. N ICDI,ICDD,ICDR,ICDFY,ICDR
  1. S ICDI=+($G(IEN)) Q:+IEN'>0!('$D(^ICD(IEN,2))) ""
  1. S (ICDFY,ICDR)="",ICDD=$P($G(CDT),".",1)
  1. S:ICDD'?7N ICDD=$$DT^XLFDT
  1. S ICDFY=$O(^ICD(ICDI,2,"B",(+ICDD+.01)),-1)
  1. S ICDR=$O(^ICD(ICDI,2,"B",+ICDFY,ICDR))
  1. S ICDR=$P($G(^ICD(ICDI,2,+ICDR,0)),U,3)
  1. Q ICDR