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

ICDEXLK.m

Go to the documentation of this file.
  1. ICDEXLK ;SLC/KER - ICD Extractor - Lookup ;04/21/2014
  1. ;;18.0;DRG Grouper;**57**;Oct 20, 2000;Build 7
  1. ;
  1. ; Global Variables
  1. ; ^ICDS( N/A
  1. ; ^TMP("ICD0") SACC 2.3.2.5.1
  1. ; ^TMP("ICD9") SACC 2.3.2.5.1
  1. ; ^TMP("ICDEXLK") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; ^DIM ICR 10016
  1. ; $$DT^XLFDT ICR 10103
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ; DIC,ICDFMT,ICDSYS,ICDVDT
  1. ;
  1. LK ; Lookup
  1. ;
  1. ; This is the Special Lookup program for files 80 and 80.1.
  1. ; Only the ^DIC call honors the special lookup routines.
  1. ; Those calls that allow the user to specify the indexes
  1. ; (IX^DIC and MIX^DIC1), and the Data Base Server calls
  1. ; (FIND^DIC, $$FIND1^DIC, and UPDATE^DIE) all ignore the
  1. ; Special Lookup Program. Also, if DIC(0) contains an
  1. ; "I" then the Special Lookup program will be ignored.
  1. ;
  1. ; Local Variables Newed or Killed by Calling Application
  1. ;
  1. ; Versioning Date (Fileman format) (OLD, CSV)
  1. ;
  1. ; ICDVDT or
  1. ; ^TMP("ICDEXLK",$J,"ICDVDT"
  1. ;
  1. ; If supplied only active codes on that date
  1. ; will be included in the selection list.
  1. ;
  1. ; If not supplied, the date will default to
  1. ; TODAY and all codes may be selected, active
  1. ; and inactive.
  1. ;
  1. ; In both cases the display will be altered
  1. ; based on the date.
  1. ;
  1. ; Coding System (from file 80.4) (new)
  1. ;
  1. ; ICDSYS or
  1. ; ^TMP("ICDEXLK",$J,"ICDSYS"
  1. ;
  1. ; 1 ICD ICD-9-CM
  1. ; 2 ICP ICD-9 Proc
  1. ; 30 10D ICD-10-CM
  1. ; 31 10P ICD-10-PCS
  1. ;
  1. ; Display Format (numeric, 1-4) (new)
  1. ;
  1. ; ICDFMT or
  1. ; ^TMP("ICDEXLK",$J,"ICDFMT"
  1. ;
  1. ; 1 = Fileman format, code and short text (default)
  1. ;
  1. ; 250.00 DMII CMP NT ST UNCNTR
  1. ;
  1. ; 2 = Fileman format, code and description
  1. ;
  1. ; 250.00 DIABETES MELLITUS NO MENTION OF
  1. ; COMPLICATION, TYPE II OR UNSPECIFIED
  1. ; TYPE, NOT STATED AS UNCONTROLLED
  1. ;
  1. ; 3 = Lexicon format, short text followed by code
  1. ;
  1. ; DMII CMP NT ST UNCNTR (250.00)
  1. ;
  1. ; 4 = Lexicon format, description followed by code
  1. ;
  1. ; DIABETES MELLITUS NO MENTION OF COMPLICATION,
  1. ; TYPE II OR UNSPECIFIED TYPE, NOT STATED AS
  1. ; UNCONTROLLED (250.00)
  1. ;
  1. ; Special Lookup
  1. ; ^DD(80,0,"DIC")="ICDEXLK"
  1. ; ^DD(80.1,0,"DIC")="ICDEXLK"
  1. ;
  1. ; FileMan Variables
  1. ;
  1. ; X If DIC(0) does not contain an A, then the variable
  1. ; X must be defined equal to the value you want to
  1. ; find in the requested Index(es).
  1. ;
  1. ; DIC Global root or File Number
  1. ;
  1. ; ^ICD9( or 80
  1. ; ^ICD0( or 80.1
  1. ;
  1. ; DIC(0) (Optional) A string of characters which alter how
  1. ; DIC responds. Default value for ICD files "AEM"
  1. ;
  1. ; Applicable to a versioned lookup
  1. ; A Ask the entry; if erroneous, ask again
  1. ; E Echo information
  1. ; F Forget the lookup value
  1. ; I Ignore the special lookup program
  1. ; M Multiple-index lookup allowed
  1. ; O Only find one entry if it matches exactly
  1. ; S Suppresses display of .01
  1. ; X EXact match required
  1. ; Z Zero node in Y(0), external form in Y(0,0)
  1. ;
  1. ; Not Applicable to a versioned lookup
  1. ; C Versioned cross-references not turned off
  1. ; B There is no B index to use
  1. ; K Primary Key not established
  1. ; L Learning a new entry LAYGO not allowed
  1. ; N Uppercase, IEN lookup allowed (not forced)
  1. ; n ICD has no pure numeric entries
  1. ; Q Input is pre-processed, ?? not necessary
  1. ; U All values are external
  1. ; T All versioned Indexes are used
  1. ; V Verification is not optional
  1. ;
  1. ; DIC("A") (Optional) A prompt that is displayed prior to the
  1. ; reading of the X input. If DIC("A") is not defined,
  1. ; a prompt will be supplied by the special lookup
  1. ; routines.
  1. ;
  1. ; DIC("B") (Optional) The default answer which is presented to
  1. ; the user when the lookup prompt is issued. If a
  1. ; terminal user simply presses the Enter/Return key,
  1. ; the DIC("B") default value will be used, and
  1. ; returned in X. DIC("B") will only be used if it is
  1. ; non-null.
  1. ;
  1. ; DIC("S") (Optional) DIC("S") is a string of M code that DIC
  1. ; executes to screen an entry from selection.
  1. ; DIC("S") must contain an IF statement to set the
  1. ; value of $T. Those entries that the IF sets as
  1. ; $T=0 will not be displayed or selectable. If the
  1. ; DIC("S") code is executed, the local variable Y is
  1. ; the internal number of the entry being screened
  1. ; and the M naked indicator is at the global level
  1. ; @(DIC_"Y,0)").
  1. ;
  1. ; DIC("W") (Optional) An M command string which is executed
  1. ; when DIC displays each of the entries that match
  1. ; the user's input. The condition of the variable
  1. ; Y and of the naked indicator is the same as for
  1. ; DIC("S"). If DIC("W") is defined, it overrides
  1. ; the display of any identifiers of the file. Thus,
  1. ; if DIC("W")="", the display of identifiers will
  1. ; be suppressed.
  1. ;
  1. ; DIC("?N",<file>)=n
  1. ; (Optional) The number "n" should be an integer set
  1. ; to the number of entries to be displayed on the
  1. ; screen at one time when using "?" help in a lookup.
  1. ;
  1. ; FileMan Variables not used:
  1. ;
  1. ; DIC("DR")
  1. ; DIC("PTRIX",<from>,<to>,<file>)
  1. ; DIC("T")
  1. ; DIC("V")
  1. ; DIC("?PARAM",<file>,"INDEX")
  1. ; DIC("?PARAM",<file>,"FROM",<subscript>)
  1. ; DIC("?PARAM",<file>,"PART",<subscript>)
  1. ;
  1. ; FileMan Variables KILLed:
  1. ;
  1. ; DLAYGO
  1. ; DINUM
  1. ;
  1. ; Output
  1. ;
  1. ; Y IEN ^ Code Fileman
  1. ;
  1. ; If DIC(0) contains "Z"
  1. ;
  1. ; Y(0) 0 Node Fileman
  1. ; Y(0,0) Code Fileman
  1. ; Y(0,1) $$ICDDX or $$ICDOP Non-Fileman
  1. ; Y(0,2) Long Description Non-Fileman
  1. ;
  1. K ^TMP("ICD9",$J),^TMP("ICD0",$J) D DIE
  1. N DIRUT,DIROUT,FILE,ROOT,SUB,SBI,FND,ICDDICA,ICDDICB,ICDDICN,ICDDICW,ICDDICS,ICDDICSS
  1. N ICDDICST,ICDDIC0,ICDOLD0,ICDDIC00,ICDCDT,ICDCSY,ICDISF,ICDOUT,ICDVER,ICDX,ICDXP,KEY,INP,INP2,INP1,ERR
  1. N ICDOFND,ICDOSEL,ICDOINP,ICDREDO,ICDOREV,ICDISCD,ICDOUPA
  1. S (ICDOFND,ICDOSEL,ICDOREV,ICDOUPA)=0,ICDXP=$G(X)
  1. K DLAYGO,DINUM S (ICDOINP,ICDX)=$S($E($G(X),1)'=" ":$$TM($G(X)),1:$G(X))
  1. K X,Y,DTOUT,DUOUT S ICDCSY=0,ROOT=$G(DIC),FILE=$$FILE^ICDEX(ROOT)
  1. I "^80^80.1^"'[("^"_FILE_"^") S ERR="Invalid File" G ERR
  1. S ROOT=$$ROOT^ICDEX(FILE)
  1. I "^ICD9(^ICD0(^"'[("^"_$E(ROOT,2,$L(ROOT))_"^") S ERR="Invalid Global Root" G ERR
  1. I $L(ICDXP) D
  1. . N ICD0,ICD1,ICD2 S ICD0=$TR(ICDXP,"""",""),ICD1=$O(@(ROOT_"""BA"","""_ICD0_""",0)"))
  1. . S ICD2=$O(@(ROOT_"""BA"","""_ICD0_""","" "")"),-1) I ICD1>0,ICD1=ICD2 S (X,ICDX)="`"_+ICD1
  1. I $G(ICDX)[";" D
  1. . N ICD1,ICD2 S ICD1=$P(ICDX,";",1),ICD2=("^"_$P(ICDX,";",2))
  1. . Q:ICD2'=DIC Q:ICD1'?1N.N S:$D(@(ROOT_+ICD1_",0)")) (X,ICDX)="`"_+ICD1
  1. ; System
  1. S ICDCSY=0
  1. S:$L($G(ICDSYS)) ICDCSY=$G(ICDSYS)
  1. S:'$L($G(ICDSYS))&($L($G(^TMP("ICDEXLK",$J,"ICDSYS")))) ICDCSY=$G(^TMP("ICDEXLK",$J,"ICDSYS"))
  1. S ICDCSY=$$SYS^ICDEX($G(ICDCSY))
  1. ; Date
  1. S:$L($G(ICDVDT)) ICDCDT=$G(ICDVDT)
  1. S:'$L($G(ICDVDT))&($L($G(^TMP("ICDEXLK",$J,"ICDVDT")))) ICDCDT=$G(^TMP("ICDEXLK",$J,"ICDVDT"))
  1. ; Format
  1. S ICDOUT=0 S:$L($G(ICDFMT)) ICDOUT=$G(ICDFMT)
  1. I $D(DDS) S:$D(ICDFMT) ICDFMT=1 S ICDOUT=1
  1. S:'$L($G(ICDFMT))&($L($G(^TMP("ICDEXLK",$J,"ICDFMT")))) ICDOUT=$G(^TMP("ICDEXLK",$J,"ICDFMT"))
  1. S:+ICDOUT'>0 ICDOUT=1 S:+ICDOUT>4 ICDOUT=1
  1. S:$L($G(ICDFMT))!($L($G(^TMP("ICDEXLK",$J,"ICDFMT")))) ICDISF=1
  1. ; Versioned Lookup
  1. S ICDVER=$S($G(ICDCDT)?7N:1,1:0) S:$G(ICDCDT)'?7N ICDCDT=$$DT^XLFDT
  1. ; Enforce Business Rule for Date
  1. I ICDVER'>0 S:$D(^ICDS(+ICDCSY,0)) ICDCDT=$$DTBR^ICDEX(ICDCDT,,+($G(ICDCSY)))
  1. ; Space Bar Return (passed)
  1. I $D(ICDX),$G(ICDX)=" ",DIC(0)'["A" D SBR^ICDEXLK2 G:+($G(Y))>0 QUIT K Y
  1. ; TMP global
  1. S SUB=$TR(ROOT,"^(","") K ^TMP(SUB,$J)
  1. ; Save DIC
  1. S ICDDICA=$G(DIC("A")),ICDDICB=$G(DIC("B")),ICDDICW=$G(DIC("W"))
  1. S ICDDICS="",ICDDICST=$$DICS($G(DIC("S"))) S:$L(ICDDICST) ICDDICS=ICDDICST
  1. S ICDDICSS="" I $L($G(DICR(1,31))) D
  1. . Q N X S X=$G(DICR(1,31)) D ^DIM S:$D(X) ICDDICSS=X
  1. S ICDDICN=$G(DIC("?N",FILE)) S:+ICDDICN'>0 ICDDICN=5
  1. S ICDDIC00=$G(DIC(0)),(ICDDIC0,DIC(0))=$$DIC0^ICDEXLK6($G(DIC(0)))
  1. K:+($G(ICDISF))>0 DIC("W") K:$D(DDS) DIC("W")
  1. I $L(ICDX)'>4,ICDX'["." D
  1. . S:ICDX?3N&($D(@(ROOT_"""BA"","""_ICDX_". "")"))) ICDX=ICDX_"."
  1. . S:$E(ICDX,1)="E"&($E(ICDX,2,4)?3N)&($D(@(ROOT_"""BA"","""_ICDX_". "")"))) ICDX=ICDX_"."
  1. . S:$E(ICDX,1)?1U&($E(ICDX,2,3)?2N)&($D(@(ROOT_"""BA"","""_ICDX_". "")"))) ICDX=ICDX_"."
  1. I ICDX="?",$G(DIC(0))'["A" D I $L($G(DIE)),$L($G(DIC)),$G(DIE)'=$G(DIC) S Y=-1 W:'$D(DDS) ! Q
  1. . D INPH^ICDEXLK2(FILE) S ICDX="" S:$G(DIC(0))'["A" DIC(0)=DIC(0)_"A"
  1. I ICDX="??",$G(DIC(0))'["A" D I $L($G(DIE)),$L($G(DIC)),$G(DIE)'=$G(DIC) S Y=-1 W:'$D(DDS) ! Q
  1. . D INPH2^ICDEXLK2(FILE) S ICDX="" S:$G(DIC(0))'["A" DIC(0)=DIC(0)_"A"
  1. LKR ; Lookup Recursive
  1. ; QUASAR
  1. I '$D(DIC("S")),$G(DICR(2,1))="^ACK(509850.1," S DIROUT=1,X="^^",ICDX="",Y=-1 G QUIT
  1. I $D(DICR),+($G(ICDOREV))>0,+($G(ICDOFND))>0,+($G(ICDOSEL))'>0 N ICDDICS S ICDDICS=""
  1. S FND=0 S:'$L(DIC(0)) DIC(0)="AEM" S ICDREDO=""
  1. S:$L($G(DIC(0))) DIC(0)=$TR(DIC(0),"CL","")
  1. I +($G(ICDOREV))>0 D
  1. . S (ICDOFND,ICDOSEL,ICDOREV)=0 K X S ICDX=""
  1. I $G(DIC(0))["A" D I '$L(X),$G(DIC(0))'["T" S X="",ICDOREV=1 G ERR
  1. . S X=$$INP^ICDEXLK2(FILE,$G(ICDVER),$G(ICDCDT))
  1. I $D(DTOUT)!($D(DUOUT)) G ERR
  1. I ($G(DIC(0))["A"),('$L(X)!(X="^")),$G(DIC(0))["T" S X="" K Y G LKR
  1. I $G(DIC(0))'["A"&($L($G(ICDX))) S X=$G(ICDX)
  1. I $G(X)["^" S DUOUT="" G ERR
  1. I '$L($G(X)) G ERR
  1. S X=$$TM(X),INP=X,INP1=$E(INP,1),INP2=$E(INP,2,245)
  1. ; Forced IEN
  1. K Y I INP1="`",INP2?1N.N,+INP2>0 D G:$L(X)&(+($G(Y))<0) QUIT I +($G(FND))'>0 K X,Y G LKR
  1. . D IEN^ICDEXLK5 I +FND'>0,$G(DIC(0))["Q" D
  1. . . W:'$D(DICR(1))&('$D(DIROUT))&('$D(DUOUT))&('$D(DTOUT))&('$D(DDS))&(+($G(ICDOREV))'>0) " ??"
  1. . . W:$D(DICR(1))&('$D(DDS)) !
  1. I $D(Y) S:+Y<0 X=INP G QUIT
  1. ; Lookup X
  1. I X'?1N.N G:$L($G(X))'>0!($E($G(X))="^")!($G(X)["^^")!($D(DTOUT))!($D(DUOUT)) ERR
  1. N LOUD S LOUD="" S ICDX=X I +($G(FND))'>0 D
  1. . S:$L(ICDX)&($L(ICDX)>1) FND=$$LK^ICDEXLK3($G(X),FILE,ICDCDT,ICDCSY,ICDVER,ICDOUT)
  1. . S:$L(ICDX)&($L(ICDX)'>1) FND=$$CD^ICDEXLK3($G(X),FILE,ICDCDT,ICDCSY,ICDVER,ICDOUT)
  1. . S:+($G(FND))>0 ICDOFND=+($G(FND)) S:$L($G(ICDX)) X=$G(ICDX)
  1. I +FND'>0,$G(DIC(0))["Q" W:'$D(DICR(1))&('$D(DIROUT))&('$D(DUOUT))&('$D(DTOUT))&('$D(DDS))&(+($G(ICDOREV))'>0) " ??"
  1. I +FND'>0,$L(INP),$E(INP,1)'=" ",'$D(DTOUT),'$D(DUOUT),$G(DIC(0))["A",'($G(DIC(0))["N"&(INP?1N.N)) K X,Y G LKR
  1. S:+FND'>0 X=INP
  1. ; Check Numeric - DIC(0)["N" and DIC(0)'["E"
  1. I +$G(ICDOSEL)'>0,$G(DIC(0))["N",INP?1N.N D G:+($G(Y))>0 QUIT
  1. . Q:DIC(0)["E"&(+$G(ICDOSEL)'>0)&(+$G(ICDOFND)>0) K Y N XX
  1. . I $D(@(ROOT_+INP_",0)")) S FND=1 D Q
  1. . . N IEN S IEN=+INP S (FND,ICDOFND,ICDOSEL)=1
  1. . . S X=$P($G(@(ROOT_+X_",0)")),"^",1)
  1. . . D Y^ICDEXLK2($G(ROOT),IEN,$G(ICDCDT))
  1. . I '$D(@(ROOT_+INP_",0)")) D Q
  1. . . S X=$S($L($G(INP)):INP,1:$G(X))
  1. . . S Y="-1^Numeric value not found"
  1. . S XX=$$LD^ICDEX(FILE,+$G(INP),ICDCDT)
  1. . I $E(XX,1,2)="-1" D Q
  1. . . S Y="-1^Long description not found",X=$G(INP)
  1. . W:$G(DIC(0))["E"&('$D(DDS)) " ",XX S X=$G(INP)
  1. . D Y^ICDEXLK2($G(ROOT),$G(X),$G(ICDCDT))
  1. . S:+Y>0&(+X'<0) X=XX S:+Y<0 X=INP
  1. I +FND'>0,$G(DIC(0))["N",X?1N.N,+($G(Y))<0 G ERR
  1. I +FND'>0,$L($G(ICDX)),$L($G(DIC("S"))),$L($G(DICR(1))),$L($G(DICR(1,1))) K DIC("S") K Y G LKR
  1. I +FND'>0,$L($G(ICDX)),'$D(DIC("S")),$L($G(DICR(1))),$G(DICR(1))=$G(ICDX),$L($G(DICR(1,1))) D G QUIT
  1. . S X=$S($L($G(INP)):INP,1:$G(X)),Y="-1^No matches found"
  1. I +FND'>0,$G(DIC(0))'["T" D G QUIT
  1. . W:$G(DIC(0))["E"&('$L($G(DICR(1))))&('$D(DDS)) !," No matches found"
  1. . S X=$S($L($G(INP)):INP,1:$G(X)),Y="-1^No matches found"
  1. I +FND'>0,$G(DIC(0))["T" K Y G LKR
  1. S ICDOUPA=0 D ASK^ICDEXLK2
  1. I $D(DUOUT),$D(DIROUT) D G QUIT
  1. . S (DUOUT,DIRUT)=1,X="^^"
  1. . S ICDX="",Y=-1
  1. I +FND=1,$G(ICDOFND)=1,$G(ICDOSEL)=0,$G(ICDOREV)=1,'$D(DICR(1)) D G:$D(DIROUT)!($G(DIC(0))'["A") QUIT G:DIC(0)["A" LKR
  1. . S (ICDX,INP1,INP2,ICDOINP,X)="",Y="-1^No selection made"
  1. I +FND=1,$G(ICDOFND)=1,$G(ICDOSEL)=0,$G(ICDOREV)=1,$D(DICR(1)) D G:$D(DIROUT)!($G(DIC(0))'["A") QUIT N ICDDICS G:DIC(0)["A" LKR
  1. . S:$D(DICR("1")) DICR("1")=ICDX S X=ICDX S:$D(DIROUT)!($G(DIC(0))'["A") (ICDX,INP1,INP2,ICDOINP,X)="",Y="-1^No selection made"
  1. I +FND>1,$G(ICDOSEL)=0,$G(ICDOREV)=1 D G:$D(DUOUT)!($G(DIC(0))'["A") QUIT G:DIC(0)["A" LKR
  1. . S X="",Y=-1
  1. I $G(ICDOUPA)>0,'$D(DICR(1)),'$D(DIE),'$D(DR),'$D(DDS),DIC(0)["A" S (X,ICDX)="" K Y G LKR
  1. I $D(DUOUT),'$D(DIROUT) S (DUOUT,DIRUT)=1,X="^",ICDX="",Y=-1 D I '$D(DICR(1)),'$D(DDS) G:+($G(ICDOREV))>0 QUIT G:+($G(ICDOREV))'>0 LKR
  1. . Q:$D(DICR(1))!($D(DDS)) S:+($G(ICDOREV))>0 (X,ICDX)="^",Y=-1 I +($G(ICDOREV))'>0 S ICDX="" K DUOUT,DIRUT,DIROUT,DTOUT,X,Y
  1. I ($D(DUOUT)!($D(DIROUT)))&($D(DICR(1))) D G ERR
  1. . S:$D(DUOUT) X="^",DUOUT=1 S:$D(DIROUT) X="^^",DUOUT=1,DIROUT=1 W:'$D(DDS) !
  1. I +($G(FND))>1,+($G(ICDOFND))>1,+($G(ICDOSEL))=0,+($G(ICDOREV))=1,$D(DICR(1)),'$D(DIC("S")) D G QUIT
  1. . S (ICDOFND,ICDOSEL,ICDOREV)=0,Y=-1,(X,ICDX,ICDOINP,DICR("1"))=""
  1. I $L($G(ICDREDO)) D G LKR
  1. . S DIC(0)=$TR(DIC(0),"A","") S:'$L(DIC(0)) DIC(0)="EMQ" K DIC("S")
  1. . S (ICDX,X,INP)=ICDREDO K Y
  1. ; If found, all reviewed and no selection made
  1. I +($G(ICDOFND))>0,+($G(ICDOSEL))'>0,+($G(ICDOREV))>0 D G:$G(DIC(0))'["A" ERR G:$G(DIC(0))["A" LKR
  1. . K ICDX,Y,INP,INP1,INP2,KEY,^TMP(SUB,$J),X S (FND,ICDOFND,ICDOSEL,ICDOREV)=0 S:$D(DICR("1")) DICR("1")=""
  1. ; If found, not all are reviewed and no selection made, single up arrow
  1. I +($G(ICDOFND))>0,+($G(ICDOSEL))'>0,+($G(ICDOREV))'>0,$D(DUOUT),'$D(DIROUT) D G:$G(DIC(0))'["A" ERR G:$G(DIC(0))["A" LKR
  1. . K ICDX,Y,INP,INP1,INP2,KEY,^TMP(SUB,$J),X S (FND,ICDOFND,ICDOSEL,ICDOREV)=0 S:$D(DICR("1")) DICR("1")=""
  1. ; If found, no selection made, no up arrow and no timeout
  1. I +($G(ICDOFND))>0,+($G(ICDOSEL))'>0,'$D(DUOUT),'$D(DTOUT),$G(DIC(0))["E" G LKR
  1. G:+($G(Y))'>0&($D(DUOUT))&('$D(DIROUT)) LKR
  1. G:+($G(ICDOSEL))'>0 ERR
  1. G:+($G(Y))'>0&('$D(DUOUT))&('$D(DTOUT)) LKR
  1. G:+($G(Y))'>0&($D(DUOUT))&('$D(DIROUT)) LKR
  1. G:+($G(Y))'>0 ERR
  1. D RED,UDIC
  1. Q
  1. LKQ ; Quit
  1. Q
  1. ERR ; Quit On Error
  1. N ICDX,ICDY,ICDE S ICDY=$G(Y),ICDX=$G(X) K X,Y S Y=-1
  1. S:$L($P($G(ICDY),"^",2)) Y=Y_"^"_$P($G(ICDY),"^",2)
  1. I $D(DTOUT),$G(DIC(0))["E",'$D(DDS) W !!,?2,"Try again later" K ERR
  1. I $D(DUOUT),$G(DIC(0))["E" K ERR
  1. I '$D(DUOUT),+($G(ICDOFND)>0),+($G(ICDOSEL)'>0),$G(DIC(0))["E" K ERR
  1. I $L($G(ERR)),$G(DIC(0))["E",'$D(DDS) W !!,?2,$G(ERR)
  1. S:$E(ICDY,1,2)="-1"&($L($P(ICDY,"^",2))) Y=ICDY
  1. S X=ICDX I $D(DTOUT) S X="",Y="-1^Search timed out"
  1. I Y="-1",+($G(ICDOFND)>0),+($G(ICDOSEL)'>0) S Y="-1^No Selection Made"
  1. N XX S XX=$G(X) S X="" S:XX="^"!(XX="^^") X=XX D QUIT
  1. Q
  1. QUIT ; Quit without Error
  1. N ICDUA S ICDUA=$$UA($G(ICDX))
  1. I ICDUA="^" S X=ICDUA,Y="-1^Search aborted (up-arrow detected)"
  1. I ICDUA="^^" S X=ICDUA,Y="-1^Search aborted (up-arrow detected)"
  1. S:ICDUA["^"&(+($G(ICDOUPA))=2) Y="-1^Search aborted (doupble up-arrow detected)"
  1. I +Y>0 D Y^ICDEXLK2($G(ROOT),+Y,$G(ICDCDT))
  1. I $P($G(X),"`",2)=$P($G(Y),"^",1),$L($P($G(Y),"^",2)) S (ICDX,X)=$P($G(Y),"^",2)
  1. D UDIC I $D(DDS) S:$L($G(ICDOINP))&(+Y'>0) X=$G(ICDOINP)
  1. S:$L($G(ICDX)) X=$G(ICDX) S X=$G(X) D RED
  1. Q
  1. UDIC ; Undo DIC
  1. S:$L($G(ICDDICW)) DIC("W")=$G(ICDDICW)
  1. S:$L($G(ICDDICA)) DIC("A")=$G(ICDDICA)
  1. S:$L($G(ICDDICB)) DIC("B")=$G(ICDDICB)
  1. S:$L($G(ICDDICS)) DIC("S")=$G(ICDDICS)
  1. S:$L($G(ICDDIC0)) DIC(0)=$G(ICDDIC0)
  1. S:$L($G(ICDDIC00)) DIC(0)=$G(ICDDIC00)
  1. Q
  1. DIE ; Set for DIE call
  1. Q:'$L($G(DIE)) S:'$L($G(DIC("A")))&($L($G(DIP))) DIC("A")=$G(DIP)
  1. S:$L($G(DIC("A")))&($G(DIC("A"))'[": ") DIC("A")=$G(DIC("A"))_": "
  1. N DIE,DIP,DZ,X1
  1. Q
  1. DICS(ICDS) ; Check DIC("S")
  1. N ICDT1,ICDT2,ICDTS S ICDT1=$D(X),ICDT2=$G(X) Q:'$L($G(ICDS)) ""
  1. S (ICDTS,X)=$G(ICDS) D ^DIM I '$D(X) S:ICDT1>0 X=$G(ICDT2) Q ""
  1. S ICDS=$G(ICDTS) S:ICDT1>0 X=$G(ICDT2) S:$L($G(ICDX)) X=$G(ICDX)
  1. Q ICDS
  1. RED ; Re-Display
  1. Q:+($G(Y))'>0 Q:'$L($P(Y,"^",2)) Q:$G(FILE)'>0 Q:$D(DDS) Q:$G(DIC(0))'["E"
  1. Q:$G(DICR(2,1))="^ACK(509850.1,"
  1. N CODE,EXP,CC,STA S CODE=$P(Y,"^",2) S CODE=CODE_$J(" ",(10-$L(CODE)))
  1. S CC="" S:FILE=80 CC=$$VCC^ICDEX(+Y,$G(ICDCDT))
  1. S CC=$S(CC="1":"(CC)",CC="2":"(Major CC)",1:"")
  1. S STA=$O(@(ROOT_+Y_",66,""B"","_(+($G(ICDCDT))+.000001)_")"),-1)
  1. S STA=$O(@(ROOT_+Y_",66,""B"","_+STA_","" "")"),-1)
  1. S STA=$P($G(@(ROOT_+Y_",66,"_+STA_",0)")),"^",2)
  1. S STA=$S($G(STA)?1N&(+$G(STA)'>0):" (Inactive)",$G(STA)'?1N&(+$G(STA)'>0):" (Pending)",1:"")
  1. S:$G(ICDFMT)=2!($G(ICDFMT)=4) EXP=$$VLT^ICDEX(FILE,+Y,$G(ICDCDT))
  1. S:$G(ICDFMT)=1!($G(ICDFMT)=3)!($G(ICDFMT)="") EXP=$$VST^ICDEX(FILE,+Y,$G(ICDCDT))
  1. W:$L(CODE)&($L(EXP))&($D(DPP(1))) !,?5 W:$L(CODE)&($L(EXP)) " ",$G(CODE),$G(EXP),$G(CC),$G(STA)
  1. Q
  1. UA(X) ; Up Arrow
  1. Q:($D(DUOUT)!($D(DIROUT)))&($D(DICR(1))) "^^"
  1. K:$G(ICDOUPA)>0&($G(ICDOUPA)'>1) DIROUT
  1. Q:$D(DUOUT)&('$D(DIROUT)) "^" Q:$D(DUOUT)&($D(DIROUT)) "^^"
  1. Q:$G(INP)["^"&($G(INP)'["^^") "^" Q:$G(INP)["^"&($G(INP)["^^") "^^"
  1. Q:$G(X)["^"&($G(X)'["^^") "^" Q:$G(X)["^"&($G(X)["^^") "^^"
  1. Q X
  1. TM(X,Y) ; Trim Y
  1. S Y=$G(Y) S:'$L(Y) Y=" "
  1. F Q:$E(X,1)'=Y S X=$E(X,2,$L(X))
  1. F Q:$E(X,$L(X))'=Y S X=$E(X,1,($L(X)-1))
  1. S X=$TR(X,"""","")
  1. Q X
  1. CLR ; Clear Environment
  1. K DDS,DICR N ICDTEST,DPP,DR
  1. Q