ICDDICA ;SLC/KER - ICD DIC Lookup Prototype ;04/21/2014
;;18.0;DRG Grouper;**57**;Oct 20, 2000;Build 7
;
; Global Variables
; ^ICDS( N/A
; ^XTMP("ICDID") SACC 2.3.2.5.2
;
; External References
; ^%DT ICR 10003
; ^DIC ICR 10006
; $$GET1^DIQ ICR 2056
; ^DIR ICR 10026
; $$DT^XLFDT ICR 10103
; $$FMADD^XLFDT ICR 10103
; $$FMTE^XLFDT ICR 10103
; $$UP^XLFSTR ICR 10104
;
; Local Variables NEWed or KILLed in ICDDIC
; ICDCS,ICDDP,ICDFI,ICDFM,ICDOA,ICDVD,ICDVR
;
EN ;
W:$L($G(IOF)) @IOF
W ! S ICDDP=$$DP,ICDCS="" Q:ICDDP["^" Q:$D(DTOUT)!($D(DUOUT))
S ICDFI=$S(ICDDP="D":"80^ICD DIAGNOSIS",ICDDP="P":"80.1^ICD OPERATION/PROCEDURE",1:"")
Q:+ICDFI'>0 S ICDOA=$$OA(+ICDFI) Q:ICDOA["^" Q:$D(DTOUT)!($D(DUOUT))
S:ICDOA="O" ICDCS=$$CS(+ICDFI) Q:$D(DTOUT)!($D(DUOUT))
S ICDVR=$$VR(+ICDFI) Q:$D(DTOUT)!($D(DUOUT))
S ICDVD="" S:ICDVR>0 ICDVD=$$VD(+ICDFI) Q:$D(DTOUT)!($D(DUOUT))
N ICD10D S ICD10D=$$IMP^ICDEX(30) S ICDSRC=+ICDCS
S:+ICDCS'>0&(+ICDFI=80) ICDSRC=$S(+ICDVD<+ICD10D:1,1:30)
S:+ICDCS'>0&(+ICDFI=80.1) ICDSRC=$S(+ICDVD<+ICD10D:2,1:31)
S ICDFM=$$FM Q:$D(DTOUT)!($D(DUOUT))
N ICDTEST
Q
DP(X) ; Diagnosis or Procedure
N ICD,DIR,ICDB,ICDN,Y K ICD K DTOUT,DUOUT,DIRUT,DIROUT
S ICD="",DIR(0)="SAO^D:Diagnosis;P:Procedures"
S DIR("B")=$$RET("DP") S:'$L(DIR("B")) DIR("B")="Diagnosis"
S (DIR("?"),DIR("??"))="^D DPH^ICDDICA"
S DIR("PRE")="S X=$$DPP^ICDDICA($G(X))"
S DIR("A")=" Search ICD Diagnosis or Procedures (D/P): "
D ^DIR S X=Y
S ICDN="" S:X="D" ICDN="Diagnosis" S:X="P" ICDN="Procedures"
D:$L(ICDN) SAV("DP",ICDN)
Q X
DPP(X) ; Diagnosis or Procedure - Pre-process
Q:'$L($G(X)) "" Q:X["?" "??" Q:X["^^" "^^" Q:X["^" "^"
S X=$$UP^XLFSTR(X) Q:$E("OPERATIONS",1,$L(X))=X "Procedures"
Q:$E("PROCEDURES",1,$L(X))=X "Procedures" Q:$E("DIAGNOSIS",1,$L(X))=X "Diagnosis"
Q X
DPH ; Diagnosis or Procedure - Help
W !,?5,"Enter 'D' or 'Diagnosis' to search the ICD DIAGNOSIS file #80"
W !,?5,"Enter 'P' or 'Procedures' to search the ICD PROCEDURE file #80.1"
W !,?5,"Enter '^' to quit, and 'Return' to accept the default value."
Q
OA(X) ; One or All Coding System
N ICD,DIR,ICDB,ICDN,ICDF,Y K ICD K DTOUT,DUOUT,DIRUT,DIROUT
S ICDF=+($G(X)) Q:'$D(^ICDS("F",+ICDF)) "A"
S ICD="",DIR(0)="SAO^O:One System;A:All Systems"
S DIR("B")=$$RET("OA") S:'$L(DIR("B")) DIR("B")="All Coding Systems"
S (DIR("?"),DIR("??"))="^D OAH^ICDDICA"
S DIR("PRE")="S X=$$OAP^ICDDICA($G(X))"
S DIR("A")=" Search One or All Coding Systems in file "_ICDF_" (O/A): "
S DIR("A")=" Search One or All Coding Systems (O/A): "
D ^DIR S X=Y
S ICDN="" S:X="O" ICDN="One System" S:X="A" ICDN="All Systems"
D:$L(ICDN) SAV("OA",ICDN)
Q X
OAP(X) ; One or All Coding System - Pre-process
Q:'$L($G(X)) "" Q:X["?" "??" Q:X["^^" "^^" Q:X["^" "^" S X=$$UP^XLFSTR(X)
Q:$E("ONE CODING SYSTEM",1,$L(X))=X "One System"
Q:$E("ONE SYSTEM",1,$L(X))=X "One System"
Q:$E("ALL CODING SYSTEMS",1,$L(X))=X "All Systems"
Q:$E("ALL SYSTEMS",1,$L(X))=X "All Systems"
S:"^O^A"'[("^"_$E(X,1)_"^") X="??"
Q X
OAH ; One or All Coding System - Help
W !,?5,"Enter 'O' to search one coding system " W:+($G(ICDF))>0 "in file ",$G(ICDF)
W !,?5,"Enter 'A' to search all coding systems " W:+($G(ICDF))>0 "in file ",$G(ICDF)
I $D(^ICDS("F",+($G(ICDF)))) D
. N ICDI,ICDC S (ICDI,ICDC)=0 F S ICDI=$O(^ICDS("F",+($G(ICDF)),ICDI)) Q:ICDI'>0 D
. . N ICDS S ICDS=$P($G(^ICDS(ICDI,0)),"^",1) Q:'$L(ICDS) S ICDC=ICDC+1 W:ICDC=1 !
. . W !,?15,ICDS
Q
CS(X) ; Coding System
N ICD,DIC,ICDB,ICDBI,ICDN,ICDF,ICDI,ICDD,Y K ICD K DTOUT,DUOUT,DIRUT,DIROUT
S ICDF=+($G(X)) Q:'$D(^ICDS("F",+ICDF)) "^" S ICDI=$O(^ICDS("F",+ICDF," "),-1) Q:+ICDI'>0 "^"
S ICDD=$P($G(^ICDS(+ICDI,0)),"^",1) Q:'$L(ICDD) "^" S ICD="",DIC="^ICDS(",DIC(0)="AEQM"
S ICDB=$$RET("CS"),ICDBI=0 S:$L(ICDB) ICDBI=$O(^ICDS("B",ICDB,0))
S:$L(ICDB)&(+($G(ICDBI))'>0) ICDBI=$O(^ICDS("C",ICDB,0))
S:ICDBI>0&($P($G(^ICDS(+ICDBI,0)),"^",3)'=+ICDF) ICDB=""
S:$L(ICDB) DIC("B")=ICDB S:'$L($G(DIC("B")))&($L(ICDD)) DIC("B")=ICDD
S DIC("A")=" Select Coding Systems: "
S DIC("S")="I $G(ICDF)>0&($P($G(^ICDS(+Y,0)),""^"",3)=$G(ICDF))"
S (DIC("?"),DIC("??"))="^D CSH^ICDDICA"
D ^DIC I +Y>0 S ICDD=$P($G(^ICDS(+Y,0)),"^",1) D:$L(ICDD) SAV("CS",ICDD)
S X=Y
Q X
CSH ; One or All Coding System - Help
W !,?5,"Answer with ICD CODING SYSTEMS (i.e., "
W $S(+ICDF=80:"ICD-10-CM",+ICDF=80.1:"ICD-10-PCS",1:"ICD-10-CM")
W " or ICD CODING SYSTEM NOMENCLATURE, or"
W ?5,"CODING SYSTEM ABBREVIATION"
Q
I $D(^ICDS("F",+($G(ICDF)))) D
. N ICDI,ICDC S (ICDI,ICDC)=0 F S ICDI=$O(^ICDS("F",+($G(ICDF)),ICDI)) Q:ICDI'>0 D
. . N ICDS S ICDS=$P($G(^ICDS(ICDI,0)),"^",1) Q:'$L(ICDS) S ICDC=ICDC+1 W:ICDC=1 !
. . W !,?15,ICDS
Q
VR(X) ; Versioned Search
N ICD,DIR,ICDB,ICDN,Y K ICD K DTOUT,DUOUT,DIRUT,DIROUT
S ICD="",DIR(0)="YAO" S DIR("B")=$$RET("VR") S:'$L(DIR("B")) DIR("B")="Yes"
S (DIR("?"),DIR("??"))="^D VRH^ICDDICA"
S DIR("PRE")="S X=$$VRP^ICDDICA($G(X))"
S DIR("A")=" Conduct a versioned (date sensitive) Search (Y/N): "
D ^DIR S X=Y
S ICDN="" S:X="1" ICDN="Yes" S:X="0" ICDN="No"
D:$L(ICDN) SAV("VR",ICDN)
Q X
VRP(X) ; Diagnosis or Procedure - Pre-process
Q:'$L($G(X)) "" Q:X["?" "??" Q:X["^^" "^^" Q:X["^" "^"
S X=$$UP^XLFSTR(X) Q:$E("YES",1,$L(X))=X "Yes" Q:$E("NO",1,$L(X))=X "No"
S X="??"
Q X
VRH ; Diagnosis or Procedure - Help
W !,?5,"Enter 'Yes' to conduct a versioned search (date sensitive) or"
W !,?5,"enter 'No' to contuct an unversioned search.",!
W !,?5,"NOTE: Inactive codes will NOT be displayed during a versioned"
W !,?5," search (date sensitive) and will be displayed during an "
W !,?5," unversioned search (date doesn't matter)."
Q
VD(X) ; Versioned Date
N ICD,DIR,ICDB,ICDN,ICDTD,ICDD1,ICDD2,Y K ICD K DTOUT,DUOUT,DIRUT,DIROUT
S ICDTD=$$DT^XLFDT,ICDD1=2781001,ICDD2=$$FMADD^XLFDT(ICDTD,(365*5))
S DIR(0)="DAO^"_ICDD1_":"_ICDD2_":"
S DIR("B")=$$RET("VD") S:'$L(DIR("B")) DIR("B")=$$FMTE^XLFDT(ICDTD)
S (DIR("?"),DIR("??"))="^D VDH^ICDDICA"
S DIR("PRE")="S X=$$VDP^ICDDICA($G(X))"
S DIR("A")=" Enter a versioning date: "
S DIR("A")=" Enter a date from "_$$FMTE^XLFDT($G(ICDD1),"5Z")_" to "_$$FMTE^XLFDT($G(ICDD2),"5Z")_": "
D ^DIR S X=Y
S ICDN="" S:$P(X,".",1)?7N ICDN=$$UP^XLFSTR($$FMTE^XLFDT($P(X,".",1)))
D:$L(ICDN) SAV("VD",ICDN)
Q X
VDP(X) ; Diagnosis or Procedure - Pre-process
S X=$$UP^XLFSTR($G(X)) Q:'$L($G(X)) "" Q:X["?" "??" Q:X["^^" "^^" Q:X["^" "^"
N ICDI,ICDA,ICDO S (ICDA,ICDI)=$$EFM(X) S:ICDA#10000=0 ICDA=ICDA+101 S:ICDA#100=0 ICDA=ICDA+1
S:$E(ICDA,4,5)="00" ICDA=$E(ICDA,1,3)_"01"_$E(ICDA,6,7) S:$E(ICDA,6,7)="00" ICDA=$E(ICDA,1,5)_"01"
S ICDA=$P(ICDA,".",1) S ICDO=$$UP^XLFSTR($$FMTE^XLFDT(ICDA)) Q:ICDA?7N ICDO S X="??"
Q X
VDH ; Diagnosis or Procedure - Help
W !,?5,"Enter a date from ",$$FMTE^XLFDT($G(ICDD1))," to ",$$FMTE^XLFDT($G(ICDD2)),". Time is"
W !,?5,"allowed but not required. Code Set Business rules apply"
W !,?5,"for imprecise dates:",!
W !,?5," Month is missing: Use January"
W !,?5," Day is missing: Use the 1st"
Q
FM(X) ; Diagnosis or Procedure
N ICD,DIR,ICDB,ICDN,ICDSRC,Y K ICD K DTOUT,DUOUT,DIRUT,DIROUT S ICDSRC=$G(X) S ICD=""
S DIR(0)="SAO^1:FileMan Format;2:Modified FileMan Format;3:Short Lexicon Format;4:Long Lexicon Format"
S DIR("B")=$$RET("FM") S:'$L(DIR("B")) DIR("B")="FileMan Format"
S (DIR("?"),DIR("??"))="^D FMH^ICDDICA"
S DIR("PRE")="S X=$$FMP^ICDDICA($G(X))"
S DIR("A")=" Select Display Format (1-4): "
D ^DIR S X=Y S ICDN="" S:$L($G(Y(0))) ICDN=$G(Y(0))
D:$L(ICDN) SAV("FM",ICDN)
Q X
FMP(X) ; Diagnosis or Procedure - Pre-process
S X=$$UP^XLFSTR($G(X)) Q:'$L($G(X)) "" Q:X["?" "??" Q:X["^^" "^^" Q:X["^" "^"
Q:X=1 "FileMan Format" Q:X=2 "Modified FileMan Format" Q:X=3 "Short Lexicon Format" Q:X=4 "Long Lexicon Format"
Q:$E("FILEMAN FORMAT",1,$L(X))=X "FileMan Format"
Q:$E("MODIFIED FILEMAN FORMAT",1,$L(X))=X "Modified FileMan Format"
Q:$E("SHORT LEXICON FORMAT",1,$L(X))=X "Short Lexicon Format"
Q:$E("LONG LEXICON FORMAT",1,$L(X))=X "Long Lexicon Format"
S X="??"
Q X
FMH ; Display Format - Help
N ICDCOD,ICDSHRT,ICDLONG,ICDMIX
I $G(ICDSRC)=1!("^1^2^30^31^"'[("^"_+($G(ICDSRC))_"^")) D
. S ICDCOD="275.1"
. S ICDSHRT="DIS COPPER METABOLISM"
. S ICDLONG="DISORDERS OF COPPER METABOLISM"
. S ICDMIX="Disorders of Copper Metabolism"
I $G(ICDSRC)=2 D
. S ICDCOD="01.21"
. S ICDSHRT="CRANIAL SINUS I D"
. S ICDLONG="INCISION AND DRAINAGE OF CRANIAL SINUS"
. S ICDMIX="Incision and Drainage of Cranial Sinus"
I $G(ICDSRC)=30 D
. S ICDCOD="T36.0X1S"
. S ICDSHRT="Penicillin poisoning , acc, sequela"
. S ICDLONG="POISONING BY PENICILLINS, ACCIDENTAL, SEQUELA"
. S ICDMIX="Poisoning by Penicillins, Accidental, Sequela"
I $G(ICDSRC)=31 D
. S ICDCOD="0BQ37ZZ"
. S ICDSHRT="Repair Right Bronchus, Opening"
. S ICDLONG="REPAIR RIGHT BRONCHUS, VIA NATURAL/ARTIFICIAL OPENING"
. S ICDMIX="Repair right Bronchus, via Natural/Artificial Opening"
W !,?5,"Enter "
W !,?5," 1 FileMan format, code followed by short text (default):"
W !,?5,""
W !,?5," ",ICDCOD," ",ICDSHRT
W !,?5,""
W !,?5," 2 Modified FileMan format, code followed by description:"
W !,?5,""
W !,?5," ",ICDCOD," ",ICDLONG
W !,?5,""
W !,?5," 3 Short Lexicon format, short text followed by code:"
W !,?5,""
W !,?5," ",ICDSHRT," (",ICDCOD,")"
W !,?5,""
W !,?5," 4 Long Lexicon format, description followed by code:"
W !,?5," "
W !,?5," ",ICDMIX," (",ICDCOD,")"
W !,?5," "
Q
SAV(X,ICDV) ; Save Defaults
N ICDR,ICDT,ICDU,ICDC,ICDVAL,ICDN,ICDID,ICDD,ICDF,ICDK,Y S ICDR=$P($T(+1)," ",1) Q:$L(ICDR)'>1 Q:$L(ICDR)>8
S ICDT=$G(X) Q:'$L(ICDT) S ICDC=$T(@(ICDT_"^"_ICDR)) Q:'$L(ICDC) S ICDU=+($G(DUZ)) Q:+ICDU'>0
S ICDN=$$GET1^DIQ(200,(ICDU_","),.01) Q:'$L(ICDN) S ICDVAL=$G(ICDV) Q:ICDU'>0 Q:'$L(ICDVAL)
S ICDC=$$TM($P(ICDC,";",2)) Q:'$L(ICDC) S ICDK=$E(ICDC,1,13) F Q:$L(ICDK)>12 S ICDK=ICDK_" "
S ICDD=$$DT^XLFDT,ICDF=$$FMADD^XLFDT(ICDD,30),ICDID=ICDR_" "_ICDU_" "_ICDK
S ^XTMP(ICDID,0)=ICDF_"^"_ICDD_"^"_ICDC,^XTMP(ICDID,ICDT)=ICDVAL
Q
RET(X) ; Retrieve Defaults
N ICDR,ICDT,ICDU,ICDC,ICDN,ICDID,ICDD,ICDF,ICDK S ICDR=$P($T(+1)," ",1) Q:$L(ICDR)'>1 Q:$L(ICDR)>8
S ICDT=$G(X) Q:'$L(ICDT) S ICDC=$T(@(ICDT_"^"_ICDR)) Q:'$L(ICDC) S ICDU=+($G(DUZ)) Q:+ICDU'>0
S ICDN=$$GET1^DIQ(200,(ICDU_","),.01) Q:'$L(ICDN) S ICDC=$$TM($P(ICDC,";",2)) Q:'$L(ICDC)
S ICDK=$E(ICDC,1,13) F Q:$L(ICDK)>12 S ICDK=ICDK_" "
S ICDD=$$DT^XLFDT,ICDF=$$FMADD^XLFDT(ICDD,30),ICDID=ICDR_" "_ICDU_" "_ICDK
S X=$G(^XTMP(ICDID,ICDT))
Q X
EFM(X) ; Convert External Date to FM
N Y,%DT D ^%DT S X=Y K %DT
Q X
TM(X,Y) ; Trim Character Y - Default " "
S X=$G(X) Q:X="" X S Y=$G(Y) S:'$L(Y) Y=" " Q:X'[Y X
F Q:$E(X,1)'=Y S X=$E(X,2,$L(X))
F Q:$E(X,$L(X))'=Y S X=$E(X,1,($L(X)-1))
Q X
ICDDICA ;SLC/KER - ICD DIC Lookup Prototype ;04/21/2014
+1 ;;18.0;DRG Grouper;**57**;Oct 20, 2000;Build 7
+2 ;
+3 ; Global Variables
+4 ; ^ICDS( N/A
+5 ; ^XTMP("ICDID") SACC 2.3.2.5.2
+6 ;
+7 ; External References
+8 ; ^%DT ICR 10003
+9 ; ^DIC ICR 10006
+10 ; $$GET1^DIQ ICR 2056
+11 ; ^DIR ICR 10026
+12 ; $$DT^XLFDT ICR 10103
+13 ; $$FMADD^XLFDT ICR 10103
+14 ; $$FMTE^XLFDT ICR 10103
+15 ; $$UP^XLFSTR ICR 10104
+16 ;
+17 ; Local Variables NEWed or KILLed in ICDDIC
+18 ; ICDCS,ICDDP,ICDFI,ICDFM,ICDOA,ICDVD,ICDVR
+19 ;
EN ;
+1 IF $LENGTH($GET(IOF))
WRITE @IOF
+2 WRITE !
SET ICDDP=$$DP
SET ICDCS=""
IF ICDDP["^"
QUIT
IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+3 SET ICDFI=$SELECT(ICDDP="D":"80^ICD DIAGNOSIS",ICDDP="P":"80.1^ICD OPERATION/PROCEDURE",1:"")
+4 IF +ICDFI'>0
QUIT
SET ICDOA=$$OA(+ICDFI)
IF ICDOA["^"
QUIT
IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+5 IF ICDOA="O"
SET ICDCS=$$CS(+ICDFI)
IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+6 SET ICDVR=$$VR(+ICDFI)
IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+7 SET ICDVD=""
IF ICDVR>0
SET ICDVD=$$VD(+ICDFI)
IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+8 NEW ICD10D
SET ICD10D=$$IMP^ICDEX(30)
SET ICDSRC=+ICDCS
+9 IF +ICDCS'>0&(+ICDFI=80)
SET ICDSRC=$SELECT(+ICDVD<+ICD10D:1,1:30)
+10 IF +ICDCS'>0&(+ICDFI=80.1)
SET ICDSRC=$SELECT(+ICDVD<+ICD10D:2,1:31)
+11 SET ICDFM=$$FM
IF $DATA(DTOUT)!($DATA(DUOUT))
QUIT
+12 NEW ICDTEST
+13 QUIT
DP(X) ; Diagnosis or Procedure
+1 NEW ICD,DIR,ICDB,ICDN,Y
KILL ICD
KILL DTOUT,DUOUT,DIRUT,DIROUT
+2 SET ICD=""
SET DIR(0)="SAO^D:Diagnosis;P:Procedures"
+3 SET DIR("B")=$$RET("DP")
IF '$LENGTH(DIR("B"))
SET DIR("B")="Diagnosis"
+4 SET (DIR("?"),DIR("??"))="^D DPH^ICDDICA"
+5 SET DIR("PRE")="S X=$$DPP^ICDDICA($G(X))"
+6 SET DIR("A")=" Search ICD Diagnosis or Procedures (D/P): "
+7 DO ^DIR
SET X=Y
+8 SET ICDN=""
IF X="D"
SET ICDN="Diagnosis"
IF X="P"
SET ICDN="Procedures"
+9 IF $LENGTH(ICDN)
DO SAV("DP",ICDN)
+10 QUIT X
DPP(X) ; Diagnosis or Procedure - Pre-process
+1 IF '$LENGTH($GET(X))
QUIT ""
IF X["?"
QUIT "??"
IF X["^^"
QUIT "^^"
IF X["^"
QUIT "^"
+2 SET X=$$UP^XLFSTR(X)
IF $EXTRACT("OPERATIONS",1,$LENGTH(X))=X
QUIT "Procedures"
+3 IF $EXTRACT("PROCEDURES",1,$LENGTH(X))=X
QUIT "Procedures"
IF $EXTRACT("DIAGNOSIS",1,$LENGTH(X))=X
QUIT "Diagnosis"
+4 QUIT X
DPH ; Diagnosis or Procedure - Help
+1 WRITE !,?5,"Enter 'D' or 'Diagnosis' to search the ICD DIAGNOSIS file #80"
+2 WRITE !,?5,"Enter 'P' or 'Procedures' to search the ICD PROCEDURE file #80.1"
+3 WRITE !,?5,"Enter '^' to quit, and 'Return' to accept the default value."
+4 QUIT
OA(X) ; One or All Coding System
+1 NEW ICD,DIR,ICDB,ICDN,ICDF,Y
KILL ICD
KILL DTOUT,DUOUT,DIRUT,DIROUT
+2 SET ICDF=+($GET(X))
IF '$DATA(^ICDS("F",+ICDF))
QUIT "A"
+3 SET ICD=""
SET DIR(0)="SAO^O:One System;A:All Systems"
+4 SET DIR("B")=$$RET("OA")
IF '$LENGTH(DIR("B"))
SET DIR("B")="All Coding Systems"
+5 SET (DIR("?"),DIR("??"))="^D OAH^ICDDICA"
+6 SET DIR("PRE")="S X=$$OAP^ICDDICA($G(X))"
+7 SET DIR("A")=" Search One or All Coding Systems in file "_ICDF_" (O/A): "
+8 SET DIR("A")=" Search One or All Coding Systems (O/A): "
+9 DO ^DIR
SET X=Y
+10 SET ICDN=""
IF X="O"
SET ICDN="One System"
IF X="A"
SET ICDN="All Systems"
+11 IF $LENGTH(ICDN)
DO SAV("OA",ICDN)
+12 QUIT X
OAP(X) ; One or All Coding System - Pre-process
+1 IF '$LENGTH($GET(X))
QUIT ""
IF X["?"
QUIT "??"
IF X["^^"
QUIT "^^"
IF X["^"
QUIT "^"
SET X=$$UP^XLFSTR(X)
+2 IF $EXTRACT("ONE CODING SYSTEM",1,$LENGTH(X))=X
QUIT "One System"
+3 IF $EXTRACT("ONE SYSTEM",1,$LENGTH(X))=X
QUIT "One System"
+4 IF $EXTRACT("ALL CODING SYSTEMS",1,$LENGTH(X))=X
QUIT "All Systems"
+5 IF $EXTRACT("ALL SYSTEMS",1,$LENGTH(X))=X
QUIT "All Systems"
+6 IF "^O^A"'[("^"_$EXTRACT(X,1)_"^")
SET X="??"
+7 QUIT X
OAH ; One or All Coding System - Help
+1 WRITE !,?5,"Enter 'O' to search one coding system "
IF +($GET(ICDF))>0
WRITE "in file ",$GET(ICDF)
+2 WRITE !,?5,"Enter 'A' to search all coding systems "
IF +($GET(ICDF))>0
WRITE "in file ",$GET(ICDF)
+3 IF $DATA(^ICDS("F",+($GET(ICDF))))
Begin DoDot:1
+4 NEW ICDI,ICDC
SET (ICDI,ICDC)=0
FOR
SET ICDI=$ORDER(^ICDS("F",+($GET(ICDF)),ICDI))
IF ICDI'>0
QUIT
Begin DoDot:2
+5 NEW ICDS
SET ICDS=$PIECE($GET(^ICDS(ICDI,0)),"^",1)
IF '$LENGTH(ICDS)
QUIT
SET ICDC=ICDC+1
IF ICDC=1
WRITE !
+6 WRITE !,?15,ICDS
End DoDot:2
End DoDot:1
+7 QUIT
CS(X) ; Coding System
+1 NEW ICD,DIC,ICDB,ICDBI,ICDN,ICDF,ICDI,ICDD,Y
KILL ICD
KILL DTOUT,DUOUT,DIRUT,DIROUT
+2 SET ICDF=+($GET(X))
IF '$DATA(^ICDS("F",+ICDF))
QUIT "^"
SET ICDI=$ORDER(^ICDS("F",+ICDF," "),-1)
IF +ICDI'>0
QUIT "^"
+3 SET ICDD=$PIECE($GET(^ICDS(+ICDI,0)),"^",1)
IF '$LENGTH(ICDD)
QUIT "^"
SET ICD=""
SET DIC="^ICDS("
SET DIC(0)="AEQM"
+4 SET ICDB=$$RET("CS")
SET ICDBI=0
IF $LENGTH(ICDB)
SET ICDBI=$ORDER(^ICDS("B",ICDB,0))
+5 IF $LENGTH(ICDB)&(+($GET(ICDBI))'>0)
SET ICDBI=$ORDER(^ICDS("C",ICDB,0))
+6 IF ICDBI>0&($PIECE($GET(^ICDS(+ICDBI,0)),"^",3)'=+ICDF)
SET ICDB=""
+7 IF $LENGTH(ICDB)
SET DIC("B")=ICDB
IF '$LENGTH($GET(DIC("B")))&($LENGTH(ICDD))
SET DIC("B")=ICDD
+8 SET DIC("A")=" Select Coding Systems: "
+9 SET DIC("S")="I $G(ICDF)>0&($P($G(^ICDS(+Y,0)),""^"",3)=$G(ICDF))"
+10 SET (DIC("?"),DIC("??"))="^D CSH^ICDDICA"
+11 DO ^DIC
IF +Y>0
SET ICDD=$PIECE($GET(^ICDS(+Y,0)),"^",1)
IF $LENGTH(ICDD)
DO SAV("CS",ICDD)
+12 SET X=Y
+13 QUIT X
CSH ; One or All Coding System - Help
+1 WRITE !,?5,"Answer with ICD CODING SYSTEMS (i.e., "
+2 WRITE $SELECT(+ICDF=80:"ICD-10-CM",+ICDF=80.1:"ICD-10-PCS",1:"ICD-10-CM")
+3 WRITE " or ICD CODING SYSTEM NOMENCLATURE, or"
+4 WRITE ?5,"CODING SYSTEM ABBREVIATION"
+5 QUIT
+6 IF $DATA(^ICDS("F",+($GET(ICDF))))
Begin DoDot:1
+7 NEW ICDI,ICDC
SET (ICDI,ICDC)=0
FOR
SET ICDI=$ORDER(^ICDS("F",+($GET(ICDF)),ICDI))
IF ICDI'>0
QUIT
Begin DoDot:2
+8 NEW ICDS
SET ICDS=$PIECE($GET(^ICDS(ICDI,0)),"^",1)
IF '$LENGTH(ICDS)
QUIT
SET ICDC=ICDC+1
IF ICDC=1
WRITE !
+9 WRITE !,?15,ICDS
End DoDot:2
End DoDot:1
+10 QUIT
VR(X) ; Versioned Search
+1 NEW ICD,DIR,ICDB,ICDN,Y
KILL ICD
KILL DTOUT,DUOUT,DIRUT,DIROUT
+2 SET ICD=""
SET DIR(0)="YAO"
SET DIR("B")=$$RET("VR")
IF '$LENGTH(DIR("B"))
SET DIR("B")="Yes"
+3 SET (DIR("?"),DIR("??"))="^D VRH^ICDDICA"
+4 SET DIR("PRE")="S X=$$VRP^ICDDICA($G(X))"
+5 SET DIR("A")=" Conduct a versioned (date sensitive) Search (Y/N): "
+6 DO ^DIR
SET X=Y
+7 SET ICDN=""
IF X="1"
SET ICDN="Yes"
IF X="0"
SET ICDN="No"
+8 IF $LENGTH(ICDN)
DO SAV("VR",ICDN)
+9 QUIT X
VRP(X) ; Diagnosis or Procedure - Pre-process
+1 IF '$LENGTH($GET(X))
QUIT ""
IF X["?"
QUIT "??"
IF X["^^"
QUIT "^^"
IF X["^"
QUIT "^"
+2 SET X=$$UP^XLFSTR(X)
IF $EXTRACT("YES",1,$LENGTH(X))=X
QUIT "Yes"
IF $EXTRACT("NO",1,$LENGTH(X))=X
QUIT "No"
+3 SET X="??"
+4 QUIT X
VRH ; Diagnosis or Procedure - Help
+1 WRITE !,?5,"Enter 'Yes' to conduct a versioned search (date sensitive) or"
+2 WRITE !,?5,"enter 'No' to contuct an unversioned search.",!
+3 WRITE !,?5,"NOTE: Inactive codes will NOT be displayed during a versioned"
+4 WRITE !,?5," search (date sensitive) and will be displayed during an "
+5 WRITE !,?5," unversioned search (date doesn't matter)."
+6 QUIT
VD(X) ; Versioned Date
+1 NEW ICD,DIR,ICDB,ICDN,ICDTD,ICDD1,ICDD2,Y
KILL ICD
KILL DTOUT,DUOUT,DIRUT,DIROUT
+2 SET ICDTD=$$DT^XLFDT
SET ICDD1=2781001
SET ICDD2=$$FMADD^XLFDT(ICDTD,(365*5))
+3 SET DIR(0)="DAO^"_ICDD1_":"_ICDD2_":"
+4 SET DIR("B")=$$RET("VD")
IF '$LENGTH(DIR("B"))
SET DIR("B")=$$FMTE^XLFDT(ICDTD)
+5 SET (DIR("?"),DIR("??"))="^D VDH^ICDDICA"
+6 SET DIR("PRE")="S X=$$VDP^ICDDICA($G(X))"
+7 SET DIR("A")=" Enter a versioning date: "
+8 SET DIR("A")=" Enter a date from "_$$FMTE^XLFDT($GET(ICDD1),"5Z")_" to "_$$FMTE^XLFDT($GET(ICDD2),"5Z")_": "
+9 DO ^DIR
SET X=Y
+10 SET ICDN=""
IF $PIECE(X,".",1)?7N
SET ICDN=$$UP^XLFSTR($$FMTE^XLFDT($PIECE(X,".",1)))
+11 IF $LENGTH(ICDN)
DO SAV("VD",ICDN)
+12 QUIT X
VDP(X) ; Diagnosis or Procedure - Pre-process
+1 SET X=$$UP^XLFSTR($GET(X))
IF '$LENGTH($GET(X))
QUIT ""
IF X["?"
QUIT "??"
IF X["^^"
QUIT "^^"
IF X["^"
QUIT "^"
+2 NEW ICDI,ICDA,ICDO
SET (ICDA,ICDI)=$$EFM(X)
IF ICDA#10000=0
SET ICDA=ICDA+101
IF ICDA#100=0
SET ICDA=ICDA+1
+3 IF $EXTRACT(ICDA,4,5)="00"
SET ICDA=$EXTRACT(ICDA,1,3)_"01"_$EXTRACT(ICDA,6,7)
IF $EXTRACT(ICDA,6,7)="00"
SET ICDA=$EXTRACT(ICDA,1,5)_"01"
+4 SET ICDA=$PIECE(ICDA,".",1)
SET ICDO=$$UP^XLFSTR($$FMTE^XLFDT(ICDA))
IF ICDA?7N
QUIT ICDO
SET X="??"
+5 QUIT X
VDH ; Diagnosis or Procedure - Help
+1 WRITE !,?5,"Enter a date from ",$$FMTE^XLFDT($GET(ICDD1))," to ",$$FMTE^XLFDT($GET(ICDD2)),". Time is"
+2 WRITE !,?5,"allowed but not required. Code Set Business rules apply"
+3 WRITE !,?5,"for imprecise dates:",!
+4 WRITE !,?5," Month is missing: Use January"
+5 WRITE !,?5," Day is missing: Use the 1st"
+6 QUIT
FM(X) ; Diagnosis or Procedure
+1 NEW ICD,DIR,ICDB,ICDN,ICDSRC,Y
KILL ICD
KILL DTOUT,DUOUT,DIRUT,DIROUT
SET ICDSRC=$GET(X)
SET ICD=""
+2 SET DIR(0)="SAO^1:FileMan Format;2:Modified FileMan Format;3:Short Lexicon Format;4:Long Lexicon Format"
+3 SET DIR("B")=$$RET("FM")
IF '$LENGTH(DIR("B"))
SET DIR("B")="FileMan Format"
+4 SET (DIR("?"),DIR("??"))="^D FMH^ICDDICA"
+5 SET DIR("PRE")="S X=$$FMP^ICDDICA($G(X))"
+6 SET DIR("A")=" Select Display Format (1-4): "
+7 DO ^DIR
SET X=Y
SET ICDN=""
IF $LENGTH($GET(Y(0)))
SET ICDN=$GET(Y(0))
+8 IF $LENGTH(ICDN)
DO SAV("FM",ICDN)
+9 QUIT X
FMP(X) ; Diagnosis or Procedure - Pre-process
+1 SET X=$$UP^XLFSTR($GET(X))
IF '$LENGTH($GET(X))
QUIT ""
IF X["?"
QUIT "??"
IF X["^^"
QUIT "^^"
IF X["^"
QUIT "^"
+2 IF X=1
QUIT "FileMan Format"
IF X=2
QUIT "Modified FileMan Format"
IF X=3
QUIT "Short Lexicon Format"
IF X=4
QUIT "Long Lexicon Format"
+3 IF $EXTRACT("FILEMAN FORMAT",1,$LENGTH(X))=X
QUIT "FileMan Format"
+4 IF $EXTRACT("MODIFIED FILEMAN FORMAT",1,$LENGTH(X))=X
QUIT "Modified FileMan Format"
+5 IF $EXTRACT("SHORT LEXICON FORMAT",1,$LENGTH(X))=X
QUIT "Short Lexicon Format"
+6 IF $EXTRACT("LONG LEXICON FORMAT",1,$LENGTH(X))=X
QUIT "Long Lexicon Format"
+7 SET X="??"
+8 QUIT X
FMH ; Display Format - Help
+1 NEW ICDCOD,ICDSHRT,ICDLONG,ICDMIX
+2 IF $GET(ICDSRC)=1!("^1^2^30^31^"'[("^"_+($GET(ICDSRC))_"^"))
Begin DoDot:1
+3 SET ICDCOD="275.1"
+4 SET ICDSHRT="DIS COPPER METABOLISM"
+5 SET ICDLONG="DISORDERS OF COPPER METABOLISM"
+6 SET ICDMIX="Disorders of Copper Metabolism"
End DoDot:1
+7 IF $GET(ICDSRC)=2
Begin DoDot:1
+8 SET ICDCOD="01.21"
+9 SET ICDSHRT="CRANIAL SINUS I D"
+10 SET ICDLONG="INCISION AND DRAINAGE OF CRANIAL SINUS"
+11 SET ICDMIX="Incision and Drainage of Cranial Sinus"
End DoDot:1
+12 IF $GET(ICDSRC)=30
Begin DoDot:1
+13 SET ICDCOD="T36.0X1S"
+14 SET ICDSHRT="Penicillin poisoning , acc, sequela"
+15 SET ICDLONG="POISONING BY PENICILLINS, ACCIDENTAL, SEQUELA"
+16 SET ICDMIX="Poisoning by Penicillins, Accidental, Sequela"
End DoDot:1
+17 IF $GET(ICDSRC)=31
Begin DoDot:1
+18 SET ICDCOD="0BQ37ZZ"
+19 SET ICDSHRT="Repair Right Bronchus, Opening"
+20 SET ICDLONG="REPAIR RIGHT BRONCHUS, VIA NATURAL/ARTIFICIAL OPENING"
+21 SET ICDMIX="Repair right Bronchus, via Natural/Artificial Opening"
End DoDot:1
+22 WRITE !,?5,"Enter "
+23 WRITE !,?5," 1 FileMan format, code followed by short text (default):"
+24 WRITE !,?5,""
+25 WRITE !,?5," ",ICDCOD," ",ICDSHRT
+26 WRITE !,?5,""
+27 WRITE !,?5," 2 Modified FileMan format, code followed by description:"
+28 WRITE !,?5,""
+29 WRITE !,?5," ",ICDCOD," ",ICDLONG
+30 WRITE !,?5,""
+31 WRITE !,?5," 3 Short Lexicon format, short text followed by code:"
+32 WRITE !,?5,""
+33 WRITE !,?5," ",ICDSHRT," (",ICDCOD,")"
+34 WRITE !,?5,""
+35 WRITE !,?5," 4 Long Lexicon format, description followed by code:"
+36 WRITE !,?5," "
+37 WRITE !,?5," ",ICDMIX," (",ICDCOD,")"
+38 WRITE !,?5," "
+39 QUIT
SAV(X,ICDV) ; Save Defaults
+1 NEW ICDR,ICDT,ICDU,ICDC,ICDVAL,ICDN,ICDID,ICDD,ICDF,ICDK,Y
SET ICDR=$PIECE($TEXT(+1)," ",1)
IF $LENGTH(ICDR)'>1
QUIT
IF $LENGTH(ICDR)>8
QUIT
+2 SET ICDT=$GET(X)
IF '$LENGTH(ICDT)
QUIT
SET ICDC=$TEXT(@(ICDT_"^"_ICDR))
IF '$LENGTH(ICDC)
QUIT
SET ICDU=+($GET(DUZ))
IF +ICDU'>0
QUIT
+3 SET ICDN=$$GET1^DIQ(200,(ICDU_","),.01)
IF '$LENGTH(ICDN)
QUIT
SET ICDVAL=$GET(ICDV)
IF ICDU'>0
QUIT
IF '$LENGTH(ICDVAL)
QUIT
+4 SET ICDC=$$TM($PIECE(ICDC,";",2))
IF '$LENGTH(ICDC)
QUIT
SET ICDK=$EXTRACT(ICDC,1,13)
FOR
IF $LENGTH(ICDK)>12
QUIT
SET ICDK=ICDK_" "
+5 SET ICDD=$$DT^XLFDT
SET ICDF=$$FMADD^XLFDT(ICDD,30)
SET ICDID=ICDR_" "_ICDU_" "_ICDK
+6 SET ^XTMP(ICDID,0)=ICDF_"^"_ICDD_"^"_ICDC
SET ^XTMP(ICDID,ICDT)=ICDVAL
+7 QUIT
RET(X) ; Retrieve Defaults
+1 NEW ICDR,ICDT,ICDU,ICDC,ICDN,ICDID,ICDD,ICDF,ICDK
SET ICDR=$PIECE($TEXT(+1)," ",1)
IF $LENGTH(ICDR)'>1
QUIT
IF $LENGTH(ICDR)>8
QUIT
+2 SET ICDT=$GET(X)
IF '$LENGTH(ICDT)
QUIT
SET ICDC=$TEXT(@(ICDT_"^"_ICDR))
IF '$LENGTH(ICDC)
QUIT
SET ICDU=+($GET(DUZ))
IF +ICDU'>0
QUIT
+3 SET ICDN=$$GET1^DIQ(200,(ICDU_","),.01)
IF '$LENGTH(ICDN)
QUIT
SET ICDC=$$TM($PIECE(ICDC,";",2))
IF '$LENGTH(ICDC)
QUIT
+4 SET ICDK=$EXTRACT(ICDC,1,13)
FOR
IF $LENGTH(ICDK)>12
QUIT
SET ICDK=ICDK_" "
+5 SET ICDD=$$DT^XLFDT
SET ICDF=$$FMADD^XLFDT(ICDD,30)
SET ICDID=ICDR_" "_ICDU_" "_ICDK
+6 SET X=$GET(^XTMP(ICDID,ICDT))
+7 QUIT X
EFM(X) ; Convert External Date to FM
+1 NEW Y,%DT
DO ^%DT
SET X=Y
KILL %DT
+2 QUIT X
TM(X,Y) ; Trim Character Y - Default " "
+1 SET X=$GET(X)
IF X=""
QUIT X
SET Y=$GET(Y)
IF '$LENGTH(Y)
SET Y=" "
IF X'[Y
QUIT X
+2 FOR
IF $EXTRACT(X,1)'=Y
QUIT
SET X=$EXTRACT(X,2,$LENGTH(X))
+3 FOR
IF $EXTRACT(X,$LENGTH(X))'=Y
QUIT
SET X=$EXTRACT(X,1,($LENGTH(X)-1))
+4 QUIT X