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

LEX10CS2.m

Go to the documentation of this file.
  1. LEX10CS2 ;ISL/KER - ICD-10 Code Set (cont) ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**80,103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; ^TMP(LEXSUB,$J, SACC 2.3.2.5.1
  1. ; ^YSD(627.7, ICR 1612
  1. ; ^ICPT( ICR 4489
  1. ;
  1. ; External References
  1. ; $$CODEABA^ICDEX ICR 5747
  1. ; $$ROOT^ICDEX ICR 5747
  1. ; $$CODEN^ICPTCOD ICR 1995
  1. ; $$DT^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. CODELIST(X,LEXSPEC,LEXSUB,LEXD,LEXL,LEXF) ; Wild Card Search for Codes
  1. ;
  1. ; Input
  1. ;
  1. ; X Coding System (Required)
  1. ; LEXSPEC Search Specification (Required)
  1. ; First 2 characters alpha-numeric
  1. ; May contain a "?" wildcard in any position
  1. ; May contain a "*" wildcard in last position
  1. ;
  1. ; LEXSUB Global Subscript in the calling applications
  1. ; namespace to be used in the output ^TMP
  1. ; global array (Optional, default "CODELIST")
  1. ;
  1. ; ^TMP(LEXSUB,$J, ...
  1. ;
  1. ; LEXD Search Date (Optional)
  1. ; LEXL List Length (Optional, Default 30)
  1. ; LEXF Output Flag (Optional)
  1. ; 0 or Null brief output
  1. ; 1 detailed output
  1. ;
  1. ; Output
  1. ;
  1. ; ^TMP(LEXSUB,$J) Output Array containing the codes found
  1. ;
  1. ; LEXF = 0 or not passed
  1. ;
  1. ; ^TMP(LEXSUB,$J,0)=Total n
  1. ; ^TMP(LEXSUB,$J,1)=Code 1
  1. ; ^TMP(LEXSUB,$J,2)=Code 2
  1. ; ^TMP(LEXSUB,$J,n)=Code n
  1. ;
  1. ; LEXF > 0
  1. ;
  1. ; ^TMP(LEXSUB,$J,0)=Total n
  1. ; ^TMP(LEXSUB,$J,1)=Code 1
  1. ; ^TMP(LEXSUB,$J,1,1)=Code 1 ^ date
  1. ; ^TMP(LEXSUB,$J,1,2)=Expression 1 IEN ^ Expression 1
  1. ; ^TMP(LEXSUB,$J,1,"MSG")=Message (unversioned only)
  1. ; ^TMP(LEXSUB,$J,2)=Code 1
  1. ; ^TMP(LEXSUB,$J,2,1)=Code 2 ^ date
  1. ; ^TMP(LEXSUB,$J,2,2)=Expression 2 IEN ^ Expression 2
  1. ; ^TMP(LEXSUB,$J,2,"MSG")=Message (unversioned only)
  1. ; ^TMP(LEXSUB,$J,n)=Code n
  1. ; ^TMP(LEXSUB,$J,n,1)=Code n ^ date
  1. ; ^TMP(LEXSUB,$J,n,2)=Expression n IEN ^ Expression n
  1. ; ^TMP(LEXSUB,$J,n,"MSG")=Message (unversioned only)
  1. ;
  1. ; $$CODELIST
  1. ;
  1. ; A variable defining success/error conditions
  1. ;
  1. ; Positive number for success
  1. ; Negative number for error or condition
  1. ;
  1. ; "-1^Coding system not specified"
  1. ; "-2^Invalid coding system/source abbreviation"
  1. ; "-3^No search specification"
  1. ; "-4^Insufficient search specification"
  1. ; "-5^Invalid search specification"
  1. ; "-6^Number of matches exceeds specified limit"
  1. ;
  1. N LEX,LEXAI,LEXC,LEXCLIS,LEXCODE,LEXEFF,LEXEI,LEXEX,LEXEXC,LEXEXIT
  1. N LEXEXP,LEXFLG,LEXHIS,LEXI,LEXLEN,LEXND,LEXO,LEXOK,LEXR,LEXSI,LEXUN
  1. N LEXSP,LEXSRC,LEXSS,LEXTOT,LEXVDT S LEXTOT=0
  1. Q:'$L($G(X)) "-1^Coding system not specified"
  1. S LEXEXC=0,LEXSRC=$$SRC($G(X))
  1. Q:LEXSRC'>0 "-2^Invalid coding system/source abbreviation"
  1. S LEXSPEC=$$UP^XLFSTR($G(LEXSPEC))
  1. I LEXSRC=30 D
  1. . I $L(LEXSPEC)=4,$E(LEXSPEC,3)="*",$E(LEXSPEC,4)="." S LEXSPEC=$E(LEXSPEC,1,3)
  1. . I $L(LEXSPEC)=3,$E(LEXSPEC,3)'="*" S LEXSPEC=LEXSPEC_"."
  1. . I $L(LEXSPEC)>3,LEXSPEC'["." S LEXSPEC=$E(LEXSPEC,1,3)_"."_$E(LEXSPEC,4,$L(LEXSPEC))
  1. Q:'$L(LEXSPEC) "-3^No search specification"
  1. S LEXR=$P(LEXSPEC,"*",1),LEXR=$P(LEXR,"?",1)
  1. Q:$L(LEXR)'>1 "-4^Insufficient search specification"
  1. S LEXEXIT=0,LEXOK=1 F LEXI=1,2 D
  1. . S:$E(LEXSPEC,LEXI)'?1A&($E(LEXSPEC,LEXI)'?1N) LEXOK=0
  1. Q:'LEXOK "-5^Invalid search specification, first two characters must be alpha numeric"
  1. I LEXSPEC["*",$L($TR($P(LEXSPEC,"*",2,4000),".","")) S LEXOK=0
  1. Q:'LEXOK "-5^Invalid search specification, trailing wildcard character ""*"""
  1. S LEXSS=$G(LEXSUB) S:'$L(LEXSS) LEXSS="CODELIST" S LEXVDT=$G(LEXD)
  1. S LEXUN=$S(LEXVDT?7N:0,1:1)
  1. S LEXLEN=$G(LEXL) S:+LEXLEN'>0 LEXLEN=5000000
  1. S LEXFLG=+($G(LEXF))
  1. S LEXO=$E(LEXR,1,($L(LEXR)-1))_$C($A($E(LEXR,$L(LEXR)))-1)_"~"
  1. S LEXEX=$S($E(LEXSPEC,$L(LEXSPEC))="*":0,1:1),LEXSP=$TR(LEXSPEC,"*","")
  1. S LEXEXIT=0 F S LEXO=$O(^LEX(757.02,"CODE",LEXO)) D Q:LEXEXIT
  1. . S:'$L(LEXO)!($E(LEXO,1,$L(LEXR))'=LEXR) LEXEXIT=1 Q:LEXEXIT
  1. . S LEXC=$TR(LEXO," ","") Q:LEXEX&($L(LEXSP)'=$L(LEXC))
  1. . S LEXOK=1 F LEXI=1:1:$L(LEXSP) D
  1. . . Q:$E(LEXSPEC,LEXI)="?" Q:$E(LEXSPEC,LEXI)="*"
  1. . . S:$E(LEXC,LEXI)'=$E(LEXSPEC,LEXI) LEXOK=0
  1. . Q:'LEXOK S LEXSI=0
  1. . F S LEXSI=$O(^LEX(757.02,"CODE",LEXO,LEXSI)) Q:+LEXSI'>0 D
  1. . . N LEXAI,LEXCODE,LEXEFF,LEXEI,LEXEXP,LEXHIS,LEXND,LEXVAR,LEXMSG
  1. . . S LEXND=$G(^LEX(757.02,+LEXSI,0))
  1. . . Q:$P(LEXND,"^",3)'=LEXSRC Q:$P(LEXND,"^",5)'=1
  1. . . I LEXVDT?7N S LEXEFF=$O(^LEX(757.02,+LEXSI,4,"B",(LEXVDT+.001)),-1) Q:LEXEFF'?7N
  1. . . I LEXVDT?7N S LEXHIS=$O(^LEX(757.02,+LEXSI,4,"B",LEXEFF," "),-1) Q:LEXHIS'?1N.N
  1. . . I LEXVDT'?7N S LEXEFF=$O(^LEX(757.02,+LEXSI,4,"B",(9999999+.001)),-1) Q:LEXEFF'?7N
  1. . . I LEXVDT'?7N S LEXHIS=$O(^LEX(757.02,+LEXSI,4,"B",LEXEFF," "),-1) Q:LEXHIS'?1N.N
  1. . . I LEXVDT?7N Q:$P($G(^LEX(757.02,+LEXSI,4,+LEXHIS,0)),"^",2)'=1
  1. . . S LEXEI=+LEXND,LEXEXP=$P($G(^LEX(757.01,+LEXEI,0)),"^",1)
  1. . . S LEXCODE=$P(LEXND,"^",2) Q:'$L(LEXCODE) Q:+LEXEI'>0 Q:'$L(LEXEXP)
  1. . . S LEXMSG="" S:LEXUN>0 LEXMSG=$$MSG(LEXCODE)
  1. . . S LEXAI=$O(^TMP(LEXSS,$J," "),-1)+1
  1. . . S LEXTOT=LEXTOT+1 I LEXAI>LEXLEN S LEXEXC=1 Q
  1. . . S LEXVAR="" S:$L(LEXCODE)&(+LEXSRC>0) LEXVAR=$$VAR(LEXCODE,LEXSRC)
  1. . . S ^TMP(LEXSS,$J,0)=LEXAI
  1. . . S ^TMP(LEXSS,$J,LEXAI)=LEXCODE
  1. . . S:+LEXFLG>0 ^TMP(LEXSS,$J,LEXAI,1)=LEXVAR_"^"_LEXCODE_"^"_LEXEFF
  1. . . S:+LEXFLG>0 ^TMP(LEXSS,$J,LEXAI,2)=LEXEI_"^"_LEXEXP
  1. . . S:$L($G(LEXMSG)) ^TMP(LEXSS,$J,LEXAI,"MSG")=$G(LEXMSG)
  1. N LEXICON S X="1^"_+($G(^TMP(LEXSS,$J,0))) I +LEXEXC>0 D
  1. . I +($G(LEXTOT))>+($G(LEXLEN)) D
  1. . . S LEXTOT=$S(+($G(LEXTOT))>0:("("_+($G(LEXTOT))_") "),1:"")
  1. . . S LEXLEN=$S(+($G(LEXLEN))>0:(" ("_+($G(LEXLEN))_")"),1:"")
  1. . E S (LEXTOT,LEXLEN)=""
  1. . S X="-6^Number "_$G(LEXTOT)_"of matches "
  1. . S X=X_"exceeds specified limit"_$G(LEXLEN)
  1. Q X
  1. SRC(X) ; Source
  1. N LEXS S LEXS=$G(X) Q:'$L(LEXS) -1
  1. Q:LEXS?1N.N&($D(^LEX(757.03,+LEXS,0))) +LEXS
  1. Q:$D(^LEX(757.03,"B",LEXS)) $O(^LEX(757.03,"B",LEXS,0))
  1. Q:$D(^LEX(757.03,"ASAB",$E(LEXS,1,3))) $O(^LEX(757.03,"ASAB",$E(LEXS,1,3),0))
  1. Q -1
  1. VAR(X,Y) ; Variable Pointer for code X and system Y
  1. N LEXCODE,LEXI,LEXIEN,LEXO,LEXRT,LEXSYS,LEXT,LEXVAR S LEXCODE=$G(X),LEXSYS=$G(Y) S LEXVAR=""
  1. I "^1^30^"[("^"_LEXSYS_"^") D S X=LEXVAR Q X
  1. . S LEXRT=$$ROOT^ICDEX(80),LEXIEN=$$CODEABA^ICDEX(LEXCODE,80,LEXSYS)
  1. . S:+($G(LEXIEN))>0&(LEXRT["^") LEXVAR=+($G(LEXIEN))_";"_$TR(LEXRT,"^","")
  1. I "^2^31^"[("^"_LEXSYS_"^") D S X=LEXVAR Q X
  1. . S LEXRT=$$ROOT^ICDEX(80.1),LEXIEN=$$CODEABA^ICDEX(LEXCODE,80.1,LEXSYS)
  1. . S:+($G(LEXIEN))>0&(LEXRT["^") LEXVAR=+($G(LEXIEN))_";"_$TR(LEXRT,"^","")
  1. I "^3^4^"[("^"_LEXSYS_"^") D S X=LEXVAR Q X
  1. . S LEXRT="^ICPT(",LEXIEN=$$CODEN^ICPTCOD(LEXCODE)
  1. . S:+($G(LEXIEN))>0 LEXVAR=+($G(LEXIEN))_";"_$TR(LEXRT,"^","")
  1. I "^5^6^"[("^"_LEXSYS_"^") D S X=LEXVAR Q X
  1. . N LEXT,LEXI,LEXIEN,LEXRT S LEXVAR=""
  1. . S LEXRT=" ^YSD(627.7,",LEXT=$S(LEXSYS=5:"3R",LEXSYS=6:4,1:"") Q:+LEXT'>0
  1. . S LEXI=0 F S LEXI=$O(^YSD(627.7,"B",LEXCODE,LEXI)) Q:+LEXI=0 D
  1. . . Q:$P($G(^YSD(627.7,LEXI,0)),"^",2)'=LEXT S LEXIEN=LEXI
  1. . S:+($G(LEXIEN))>0 LEXVAR=+($G(LEXIEN))_";"_$TR(LEXRT,"^","")
  1. S X=LEXVAR
  1. Q X
  1. MSG(X) ; Message for Unversioned Search
  1. N LEXCODE,LEXIA,LEXAC,LEXPD,LEXTD S LEXTD=$$DT^XLFDT,LEXCODE=$TR(X," ","")
  1. S:$G(LEXCDT)?7N&($G(LEXCDT)'=LEXTD) LEXTD=$G(LEXCDT)
  1. I $G(LEXCDT)="" S:$G(LEXVDT)?7N&($G(LEXVDT)'=LEXTD) LEXTD=$G(LEXVDT)
  1. Q:'$L(LEXCODE) "" Q:'$D(^LEX(757.02,"ACT",(LEXCODE_" "))) ""
  1. S LEXIA=$O(^LEX(757.02,"ACT",(LEXCODE_" "),2,(LEXTD+.0001)),-1)
  1. S LEXAC=$O(^LEX(757.02,"ACT",(LEXCODE_" "),3,(LEXTD-.0001)),-1)
  1. S LEXPD=$O(^LEX(757.02,"ACT",(LEXCODE_" "),3,(LEXTD)))
  1. I LEXIA?7N,LEXAC?7N,LEXIA>LEXAC D Q X
  1. . S X="Inactive "_$$FMTE^XLFDT(LEXIA,"5Z")
  1. I LEXAC'=LEXTD,LEXPD?7N,LEXPD>LEXTD D Q X
  1. . S X="Pending "_$$FMTE^XLFDT(LEXPD,"5Z")
  1. Q ""