LEXCODE ; ISL/KER Retrieval of IEN^Term based on Code ; 05/14/2003
 ;;2.0;LEXICON UTILITY;**25**;Sep 23, 1996;Build 1
 ;
 ; External References
 ;   DBIA  10104  $$UP^XLFSTR
 ;                   
 Q
 ; EN^LEXCODE(X,LEXVDT)
 ;                   
 ;   X        Code taken from a classification 
 ;            system listed in Coding Systems
 ;            file #757.03
 ;                   
 ;   LEXVDT   The date against which the codes 
 ;            found by the search will be compared
 ;            in order to determine whether they 
 ;            are active or inactive. If null is 
 ;            passed then it should default to
 ;            the current date.
 ;                   
 ; Returns Local Array
 ;     LEXS(0)=X
 ;     LEXS(SAB,0)=#
 ;     LEXS(SAB,#)=IEN^TERM
 ;                   
 ; 3 character mnemonics for SAB (Source Abbreviation)
 ;                   
 ;     SAB   Nomenclature  Source
 ;     -----------------------------------------------------------
 ;     ICD     ICD-9-CM    Int'l Class of Disease (Diagnosis)
 ;     ICP     ICD-9-CM    Int'l Class of Disease (Procedures)
 ;     CPT     CPT-4       Current Procedural Terminology
 ;     DSM     DSM-IIIR    Diag & Stat Manual of Mental Disorders
 ;     SNM     SNOMED      Systematic Nomenclature for Medicine
 ;     NAN     NANDA       North American Nursing Diagnosis Assoc
 ;     NIC                 Nursing Intervention Classification
 ;     OMA                 Omaha Nursing Diagnosis/Interventions
 ;     ACR                 American College of Radiology (Diag)
 ;     AIR     AI/RHEUM    National Library of Medicine source
 ;     COS     COSTAR      Computer Stored Ambulatory Records
 ;     CST     COSTART     Coding Sym Thes Adverse Reaction Terms
 ;     DXP     DXPLAIN     Diagnostic Prompting System
 ;     MCM                 McMaster University (Epidemiology)
 ;     UMD                 Universal Medical Device Nomemclature
 ;     CSP     CRISP    
 ;     UWA                 University of Washington (Neuronames)
 ;                   
 ; Example returned array using code 309.24
 ;                   
 ;     LEXS(0)=309.24
 ;     LEXS("DSM",0)=1
 ;     LEXS("DSM",1)=3273^Adjustment disorder with anxious mood
 ;     LEXS("ICD",0)=2
 ;     LEXS("ICD",1)=268308^Adjustment reaction with anxious mood
 ;     LEXS("ICD",2)=3273^Adjustment disorder with anxious mood
 ;                   
 Q
EN(LEX,LEXVDT) ; Get terms associated with a Code
 K LEXS S LEX=$$UP^XLFSTR($G(LEX)) Q:'$L(LEX)
 N LEXSRC,LEXSO,LEXO,LEXSAB,LEXDA,LEXPF,LEXINA,LEXSTA
 S LEXS(0)=LEX,LEXO=LEX_" ",LEXDA=0 Q:'$D(^LEX(757.02,"CODE",LEXO))
 F  S LEXDA=$O(^LEX(757.02,"CODE",LEXO,LEXDA)) Q:+LEXDA=0  D CHK
 D ASEM Q
CHK ; Check if Valid
 S LEXSO=$P($G(^LEX(757.02,LEXDA,0)),"^",2) Q:LEXSO'=LEX
 S LEXSTA=$$STATCHK^LEXSRC2(LEXSO,$G(LEXVDT)) Q:+LEXSTA'>0
 S LEXSRC=+($P($G(^LEX(757.02,LEXDA,0)),"^",3)) Q:LEXSRC'>0
 S LEXSAB=$E($G(^LEX(757.03,+LEXSRC,0)),1,3) Q:$L(LEXSAB)'=3
 S LEXPF=+($P($G(^LEX(757.02,LEXDA,0)),"^",5))
 S:LEXPF=1 LEXS(LEXSAB,"PRE")=LEXDA
 S:LEXPF'=1 LEXS(LEXSAB,"OTH",LEXDA)=""
 Q
ASEM ; Assemble List
 Q:'$D(LEXS)
 N LEXSAB,LEXCT,LEXDA,LEXEX,LEXEXP,LEXY S LEXSAB=""
 F  S LEXSAB=$O(LEXS(LEXSAB)) Q:LEXSAB=""  S LEXCT=0 D
 . I $D(LEXS(LEXSAB,"PRE")) D LEXY
 . S LEXDA=0
 . F  S LEXDA=$O(LEXS(LEXSAB,"OTH",LEXDA)) Q:+LEXDA=0  D LEXY
 . S:+LEXSAB'>0&(LEXSAB'="0") LEXS(LEXSAB,0)=LEXCT
 Q
LEXY ; Get IEN^TERM for Code X
 S:$D(LEXS(LEXSAB,"PRE")) LEXDA=LEXS(LEXSAB,"PRE")
 K:'$D(LEXS(LEXSAB,"PRE")) LEXS(LEXSAB,"OTH",LEXDA) K LEXS(LEXSAB,"PRE")
 S LEXY="",LEXEX=+($P($G(^LEX(757.02,LEXDA,0)),"^",1))
 Q:'$L($G(^LEX(757.01,+LEXEX,0)))
 S LEXEXP=$G(^LEX(757.01,+LEXEX,0)),LEXCT=LEXCT+1,LEXY=LEXEX_"^"_LEXEXP
 S LEXS(LEXSAB,LEXCT)=LEXY
 Q
