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

ATXCODE.m

Go to the documentation of this file.
  1. ATXCODE ; IHS/CMI/LAB - INTERFACE TO SELECT ICD CODES ;
  1. ;;5.1;TAXONOMY;**11**;FEB 04, 1997;Build 48
  1. ;
  1. ;cmi/anch/maw 9/10/2007 code set versioning in DISPLAY
  1. ;
  1. I ATXFILE=80.1 G ^ATXTAXI
  1. D INIT
  1. BEGIN D ASK1
  1. I Y="^" S ATXSTP=1 G X
  1. I $D(ATXTBLE) D CHECK I Y'=1 G BEGIN ;@$S(Y=0:"BEGIN",1:"X")
  1. X D EOJ
  1. Q
  1. ;
  1. INIT ;
  1. S ATX("NO DISPLAY")=0
  1. I $D(ATXX) D I 1
  1. . I $D(ATXTBLE) S ATX("MODIFY")=1 D RANGES I 1
  1. . E S ATX("ENTER")=1
  1. E S ATX("NOT TAX")=""
  1. Q
  1. ;
  1. ASK1 ;
  1. W !!,"Updating codes in the ",$P(^ATXAX(ATXTAXI,0),U)," Taxonomy.",!
  1. S ATXA=0
  1. I $G(ATXREMM) W !!,"To remove a code from the list, enter an ""-"" before the code, e.g. -250.00 or -250.00-250.93",!
  1. K ATX("LOW"),ATX("HI")
  1. S DIR("A")=$S('$D(ATXTBLE):"ENTER DX",1:"ENTER ANOTHER DX") D SETDIR,^DIR K DIR
  1. I "^"[Y G X1
  1. I Y="" G X1
  1. D PROCESS
  1. I $D(ATXTBLE),'ATX("NO DISPLAY") D RANGES
  1. S ATX("NO DISPLAY")=0
  1. G ASK1
  1. X1 Q
  1. ICDCS ;
  1. ;WHAT CODING SYSTEM?
  1. S ATXSYS=""
  1. NEW Y,X
  1. W !,"You must enter the coding system from which you want to "_$S($G(ATXREMM):"remove ",1:" enter")_" a code,",!,"or range of codes.",!
  1. S DIC="^ICDS(",DIC("S")="I $P(^(0),U,3)=80",DIC(0)="AEMQ" D ^DIC K DIC
  1. I Y=-1 G X1
  1. S ATXSYS=+Y
  1. Q
  1. ;I Y="*" W !!,"Sorry, '*' is not allowed.
  1. ;
  1. LOOK ; ENTRY POINT - LOOKUP USER RESPONSE; SET UTILITY NODES
  1. S DIC="^ICD9(",DIC(0)="EMF",ICDSYS=ATXSYS D ^DIC K DIC,DR
  1. I Y<0 S ATXA=1 W $C(7)," ??" S ATX("NO DISPLAY")=1 G X3
  1. S:ATXTYP="LOW" ATX("LOW")=$P($S(ATXSYS=1:$$ICDDX^ICDEX(+Y),1:$$ICDDX^ICDEX(+Y)),U,2)_" "
  1. I ATXTYP="LOW",ATXONE S ATX("HI")=ATX("LOW") D ^ATXCOD1
  1. I ATXTYP="HI" S ATX("HI")=$P($S(ATXSYS=1:$$ICDDX^ICDEX(+Y),1:$$ICDDX^ICDEX(+Y)),U,2)_" " D I 'ATX("NO DISPLAY") D DISPLAY,^ATXCOD1
  1. . I $E(ATX("HI"))?1N&($E(ATX("LOW"))?1N)!($E(ATX("LOW"))'?1N&($E(ATX("HI"))'?1N))
  1. . E W !,$C(7),"Low and high codes of range must both start either with a letter or a number.",! S ATX("NO DISPLAY")=1
  1. . I 'ATX("NO DISPLAY") I ATX("LOW")]ATX("HI") W !,$C(7),"Low code is higher than high code.",! S ATX("NO DISPLAY")=1
  1. X3 Q
  1. ;
  1. SETDIR ; ENTRY POINT - SETS HELP AND DIR FOR INIT SUBROUTINE OF ATXCODE
  1. S DIR(0)="FO",DIR("?",1)="Enter ICD diagnosis code or narrative. You may enter a range of",DIR("?",2)="codes by placing a ""-"" between two codes. Codes in a range will"
  1. S DIR("?",3)="include the first and last codes indicated and all codes that fall",DIR("?",4)="between. Only one code or one range of codes at a time. You may"
  1. S DIR("?",5)="also enter ""[TAXONOMY NAME"" to select codes already within a taxonomy."
  1. S DIR("?",6)="To select all codes in a set you can use a '*' wildcard. E.g. E11*, 250*"
  1. S DIR("?",7)="You can also ""de-select"" a code or range of codes by placing a ""-"" in",DIR("?",8)="front of it. (e.g. '-250.00' or '-250.01-250.91') Enter ""??"" to see"
  1. S DIR("?")="code ranges selected so far."
  1. S DIR("??")="^D ASK2^ATXCODE"
  1. Q
  1. ;
  1. ASK2 ;ASKS USER IF WANTS TO DISPLAY/PRINT RESULTS TO THIS POINT
  1. I '$D(ATXTBLE) W !!,"A code range has yet to be selected. A display cannot be generated.",! Q
  1. W !!,"Do you want to display the codes from a range you have already selected" S %=1 D YN^DICN I %=1 D SHOW^ATXCODE
  1. I %=2!(%=-1) Q
  1. I %=0 W !!,"A table of ranges you have selected is displayed above. You may ask for the",!,"codes in one of the ranges to be displayed.",! G ASK2
  1. Q
  1. ;
  1. STAR ;
  1. I $E(X)="-" S ATXSUB=1
  1. NEW ATXTEMP
  1. D LST^ATXAPI(ATXSYS,80,$S($E(X)="-":$E(X,2,999),1:X),"CODE","ATXTEMP")
  1. I '$D(ATXTEMP) W " ?? There are no codes in that range!" S ATX("NO DISPLAY")=1 Q
  1. S ATX("LOW")=$O(ATXTEMP(0))
  1. NEW Z,C
  1. S (Z,C)="" F S Z=$O(ATXTEMP(Z)) Q:Z="" S C=Z
  1. S ATX("HI")=C
  1. D DISPLAY,^ATXCOD1
  1. Q
  1. PROCESS ;EVALUATE USER RESPONSE
  1. S (ATXSUB,ATXONE)=0 ;ATXSUB=0 => NO DELETE OF CODE(S),ATXONE=0 => RANGE OF CODES ENTERED
  1. I $E(X,1,2)="-[" W " ?? Not allowed" S ATX("NO DISPLAY")=1 G X2
  1. I $E(X)="[" D TAX G X2
  1. I $E(X,$L(X))="*" D ICDCS G:'$G(ATXSYS) X2 D STAR G X2
  1. I X'["-" D ICDCS G:'$G(ATXSYS) X2 S ATXTYP="LOW",ATXONE=1 D LOOK G X2
  1. I $E(X)="-",'$D(ATXTBLE) W $C(7)," ?? No previous codes entered!" G X2
  1. I $L(X,"-")>3 W $C(7)," ??" S ATXA=1 S ATX("NO DISPLAY")=1 G X2
  1. I $L(X,"-")=3,$E(X,$L(X))="-" W $C(7)," ??" S ATXA=1 S ATX("NO DISPLAY")=1 G X2
  1. I $L(X,"-")=3,$P(X,"-")]"" W $C(7)," ??" S ATXA=1 S ATX("NO DISPLAY")=1 G X2
  1. D ICDCS G:'$G(ATXSYS) X2
  1. I $E(X)="-" S ATXSUB=1 D I 1
  1. . S ATXSAVE("X")=X
  1. . I $L(X,"-")=3 S X=$P(ATXSAVE("X"),"-",2),ATXTYP="LOW" D LOOK I 'ATXA S X=$P(ATXSAVE("X"),"-",3),ATXTYP="HI" W ! D LOOK Q
  1. . I $L(ATXSAVE("X"),"-")=2 S X=$E(X,2,99),ATXTYP="LOW",ATXONE=1 D LOOK
  1. E S ATXSAVE("X")=X S ATXTYP="LOW",X=$P(ATXSAVE("X"),"-") D LOOK I 'ATXA S ATXTYP="HI",X=$P(ATXSAVE("X"),"-",2) W ! D LOOK
  1. ;
  1. X2 Q
  1. ;
  1. EOP ;
  1. S ATXQ=0
  1. NEW DIR
  1. K DIRUT,DFOUT,DLOUT,DTOUT,DUOUT
  1. S DIR(0)="E" D ^DIR K DIR
  1. I $D(DUOUT) S ATXQ=1 Q
  1. W:$D(IOF) @IOF
  1. Q
  1. DISPLAY ;EP - SHOW CODES IN RANGE SELECTED
  1. W:$D(IOF) @IOF
  1. NEW ATXX,ATXQ,ATXARR
  1. ;W !!,"ICD codes in this range =>",!! W $P(ATX("LOW")," ") S ATXDFN=$O(^ICD9("BA",ATX("LOW"),"")) W ?9,$P(^ICD9(ATXDFN,0),U,3) ;cmi/anch/maw 9/10/2007 orig line
  1. W !!,"ICD codes in this range =>",!!
  1. ;call new API to get all codes back in ATXARR
  1. D LST^ATXAPI(ATXSYS,80,$$STRIP^XLFSTR(ATX("LOW"))_"-"_$$STRIP^XLFSTR(ATX("HI")),"CODE","ATXARR")
  1. S ATXX="",ATXQ=0 F S ATXX=$O(ATXARR(ATXX)) Q:ATXX=""!($G(ATXQ)) D
  1. .I $Y>(IOSL-2) D EOP Q:ATXQ
  1. .I $P(ATXARR(ATXX),U,2)=1 W !,ATXX,?12,$E($P($$ICDDX^ICDEX($P(ATXARR(ATXX),U,1)),U,4),1,40),?60,$P(ATXARR(ATXX),U,4) I 1
  1. .E W !,ATXX,?12,$E($P($$ICDDX^ICDEX($P(ATXARR(ATXX),U,1)),U,4),1,40),?60,$P(ATXARR(ATXX),U,4)
  1. NEW DIR
  1. S DIR(0)="E",DIR("A")="Press Enter to Continue <>" D ^DIR
  1. Q
  1. ;
  1. RANGES ;DISPLAY TABLE OF ALL RANGES
  1. W:$D(IOF) @IOF
  1. W !!,"ICD Code Range(s) Selected So Far =>",!
  1. S (ATX("NUM"),ATX)=0 F S ATX=$O(ATXTBLE(ATX)) Q:ATX="" S ATX("NUM")=ATX("NUM")+1 W !,ATX("NUM"),") ",ATX,$S(ATX'=$P(ATXTBLE(ATX),U,1):"- "_$P(ATXTBLE(ATX),U,1),1:"") D
  1. .I $P(ATXTBLE(ATX),U,2) W ?30,$P(^ICDS($P(ATXTBLE(ATX),U,2),0),U,1)
  1. I '$D(ATX("BANG")) W !
  1. Q
  1. ;
  1. SHOW ; ENTRY POINT - ALLOW USER TO SELECT FROM RANGES TO DISPLAY CODES
  1. D RANGES
  1. A W !,"Enter an Item Number from the table above to display code(s): " R ATX("N"):300 W:"^"[ATX("N") ! Q:"^"[ATX("N") I ATX("N")'?1N!(ATX("N")>ATX("NUM")) W " ??",$C(7) G A
  1. F ATXI=1:1:ATX("N") S ATX=$O(ATXTBLE(ATX)) I ATXI=ATX("N") S ATX("LOW")=ATX,ATX("HI")=ATXTBLE(ATX) D DISPLAY Q
  1. S ATX("BANG")="" D RANGES K ATX("BANG")
  1. Q
  1. ;
  1. TAX ;EP - PLACE CODES FROM SELECTED TAXONOMY IN ATXTBLE
  1. S ATX("S")="I Y'=ATXX",ATX("S")=$S($D(ATXX):ATX("S")_",$O(^ATXAX(Y,21,0))",1:"I $O(^(21,0))"),DIC("A")="TAXONOMY FROM WHICH TO SELECT CODES: ",ATX("S")=ATX("S")_$S('$D(ATXX):"",1:",$P(^ATXAX(ATXX,0),U,15)=$P(^ATXAX(Y,0),U,15)")
  1. I $E(X,2)="?" S X="?",DIC="^ATXAX(",DIC(0)="EM",DIC("S")=ATX("S") D ^DIC S DIC(0)="AEMQ",DIC("S")=ATX("S"),DIC="^ATXAX(" D ^DIC K DIC I 1
  1. E S X=$E(X,2,99),DIC(0)="EMQ",DIC("S")=ATX("S"),DIC="^ATXAX(" D ^DIC K DIC
  1. I Y=-1 G X4
  1. ;S ATX("CODE")=0 F S ATX("CODE")=$O(^ATXAX(+Y,21,"AA",ATX("CODE"))) Q:ATX("CODE")="" S ATXTBLE(ATX("CODE"))=$O(^(ATX("CODE"),""))
  1. NEW X,A,B,ATXN
  1. S ATXN=+Y
  1. S X="" F S X=$O(^ATXAX(ATXN,21,"B",X)) Q:X="" D
  1. .S Y=0 F S Y=$O(^ATXAX(ATXN,21,"B",X,Y)) Q:Y="" D
  1. ..S A=$P(^ATXAX(ATXN,21,Y,0),U,1),B=$P(^ATXAX(ATXN,21,Y,0),U,2),C=$P(^ATXAX(ATXN,21,Y,0),U,3)
  1. ..S ATXTBLE(A)=B_U_C
  1. X4 W ! Q
  1. ;
  1. CHECK ;ASKS USER IF SATISFIED WITH ENTERED RANGES
  1. W ! S DIR(0)="Y",DIR("B")="Y",DIR("A")="Is everything okay" D ^DIR K DIR
  1. W !
  1. Q
  1. ;
  1. EOJ ;
  1. K ATXSUB,ATXTYP,ATXDFN,DIR,ATXSAVE,ATXA,ATXCNT,ATX,ATXR,ATXI,ATXONE,ATXFLG,ATXSTP
  1. Q
  1. ;