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

ICDDICA.m

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