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

LEXQIP.m

Go to the documentation of this file.
  1. LEXQIP ;ISL/KER - Query - ICD Procedure - Extract ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**62,73,80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^TMP("LEXQIP") SACC 2.3.2.5.1
  1. ; ^TMP("LEXQIPA") SACC 2.3.2.5.1
  1. ; ^TMP("LEXQIPO") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; GETS^DIQ ICR 2056
  1. ; $$CODEC^ICDEX ICR 5747
  1. ; $$CSI^ICDEX ICR 5747
  1. ; $$DTBR^ICDEX ICR 5747
  1. ; $$HIST^ICDEX ICR 5747
  1. ; $$ICDOP^ICDEX ICR 5747
  1. ; $$LA^ICDEX ICR 5747
  1. ; $$LD^ICDEX ICR 5747
  1. ; $$MOR^ICDEX ICR 5747
  1. ; $$ROOT^ICDEX ICR 5747
  1. ; $$SD^ICDEX ICR 5747
  1. ; $$DT^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Local Variables NEWed or KILLed Elsewhere
  1. ; None
  1. ;
  1. EN ; Main Entry Point
  1. N LEXENV S LEXENV=$$EV^LEXQM Q:+LEXENV'>0 N DIC,DTOUT,DUOUT,ICDFMT,ICDSYS,ICDVDT,LEX,LEX1,LEX2,LEX3,LEXAD,LEXBOD,LEXBRD
  1. N LEXBRW,LEXC,LEXCC,LEXCDT,LEXCHR,LEXD,LEXDAT,LEXDDT,LEXDG,LEXDI,LEXDR,LEXDRG,LEXDRG1,LEXDRG2,LEXDRGC,LEXDRGD,LEXDRGI
  1. N LEXDRI,LEXDTXT,LEXDX,LEXE,LEXEDT,LEXEE,LEXEF,LEXEFF,LEXELDT,LEXENV,LEXES,LEXEXIT,LEXFA,LEXFUL,LEXH,LEXHDR,LEXHIS,LEXHR
  1. N LEXI,LEXI1,LEXI2,LEXIA,LEXICP,LEXICPC,LEXID,LEXIDI,LEXIEN,LEXIENS,LEXINC,LEXINCC,LEXINOT,LEXINT,LEXIREQ,LEXL,LEXLA
  1. N LEXLAST,LEXLC,LEXLD,LEXLDD,LEXLDT,LEXLEF,LEXLEN,LEXLHI,LEXLS,LEXLSD,LEXLTXT,LEXM,LEXMC,LEXMDCC,LEXMDCE,LEXMDCI,LEXMI
  1. N LEXMOR,LEXMR,LEXMSG,LEXN,LEXNAM,LEXOD,LEXODD,LEXPC,LEXR,LEXREF,LEXRT,LEXS,LEXSD,LEXSDD,LEXSDT,LEXSO,LEXST,LEXSTA
  1. N LEXSTAT,LEXSTR,LEXSY,LEXSYS,LEXT,LEXTEST,LEXTMP,LEXUD,LEXUM,LEXVDT,LEXVTXT,LEXW,LEXWN,LEXX,X,Y S LEXEXIT=0,LEXCDT=""
  1. K ^TMP("LEXQIP",$J),^TMP("LEXQIPO",$J),^TMP("LEXQIPA",$J)
  1. F S LEXCDT=$$AD^LEXQM,LEXAD=LEXCDT Q:'$L(LEXCDT) Q:+($G(LEXEXIT))>0 S LEXEDT=$P(LEXCDT,"^",1),LEXCDT=$P(LEXCDT,"^",2) Q:LEXCDT'?7N D LOOK Q:LEXCDT'?7N Q:+($G(LEXEXIT))>0
  1. K ^TMP("LEXQIP",$J),^TMP("LEXQIPO",$J),^TMP("LEXQIPA",$J)
  1. Q
  1. LOOK ; ICD Lookup Loop
  1. N LEXDG,LEXST,LEXSD,LEXLD,LEXMOR,LEXWN,LEXCC,LEXMC,LEXICP,LEXICPC
  1. S LEXCDT=$G(LEXCDT),LEXEDT=$$ED^LEXQM(LEXCDT) I LEXCDT'?7N S LEXCDT="" Q
  1. S LEXLEN=62 F S LEXICP=$$ICP^LEXQIPA D Q:LEXICP="^"!(LEXICP="^^")
  1. . S:LEXICP="^^" LEXEXIT=1 Q:LEXICP="^"!(LEXICP="^^")
  1. . K LEXST,LEXSD,LEXLD,LEXWN,LEXCC,LEXMOR,LEXMC,^TMP("LEXQIP",$J)
  1. . N LEXIEN,LEXLDT,LEXELDT,LEXINC,LEXINOT,LEXIREQ,LEXINCC,LEXSO,LEXNAM
  1. . S LEXIEN=+($G(LEXICP)),LEXLDT=+($G(LEXCDT)) Q:+LEXIEN'>0 Q:LEXLDT'?7N
  1. . S LEXELDT=$$SD^LEXQM(LEXLDT) Q:'$L(LEXELDT)
  1. . D CSV,EN^LEXQIP3
  1. Q
  1. CSV ; Code Set Versioning Display
  1. N LEXEDT,LEXIEN,LEXIENS,LEXLTXT,LEXSTAT,LEXSYS,LEXMSG,LEXDAT
  1. N LEXT,LEXTMP S LEXCDT=$G(LEXCDT),LEXEDT=$$ED^LEXQM(LEXCDT)
  1. I LEXCDT'?7N S (LEXICP,LEXCDT)="" Q
  1. S LEXIEN=+($G(LEXICP)),LEXSO=$$CODEC^ICDEX(80.1,+LEXIEN)
  1. S LEXLTXT=$P($G(LEXICP),"^",3) S LEXSYS=$$CSI^ICDEX(80.1,+LEXIEN)
  1. Q:+LEXIEN'>0 Q:'$L(LEXSO) Q:+LEXSYS'>0
  1. S LEXDAT=$$ICDOP^ICDEX(LEXSO,LEXCDT,LEXSYS,"E")
  1. S LEXSO=$P(LEXDAT,"^",2),LEXNAM=$P(LEXDAT,"^",5)
  1. I '$L(LEXNAM)!($P(LEXNAM,"^",1)=-1) D
  1. . N LEXLA S LEXLA=$$LA^ICDEX(80.1,+LEXIEN,9999999)
  1. . S LEXNAM=$$SD^ICDEX(80.1,+LEXIEN,LEXLA)
  1. Q:'$L($G(LEXNAM))
  1. ;
  1. ; "Unversioned" Fields
  1. ;
  1. ; ,01 Code
  1. ; 1.1 Coding System
  1. ; 1.2 Identifier
  1. ; 1.4 MDC24
  1. ; 1.7 ICD Expanded
  1. ; 1.8 Exclude from Lookup
  1. ; 20 MAJOR O.R. PROC
  1. ;
  1. S LEXTMP=$$MOR^ICDEX(+LEXIEN) D:$L(LEXTMP) OR^LEXQIP2(LEXTMP,.LEXMOR)
  1. ;
  1. ; Get the "Versioned" Fields
  1. ;
  1. ; Date/Status 80.166 (66)
  1. S LEXST=$$EF(+($G(LEXIEN)),+LEXCDT),LEXSTAT=+($P(LEXST,"^",2))
  1. ; Procedure Name 80.167 (67)
  1. D SDS(+($G(LEXIEN)),+LEXCDT,.LEXSD,62,LEXSTAT)
  1. ; Description 80.168 (68)
  1. D LDS(+($G(LEXIEN)),+LEXCDT,.LEXLD,62,LEXSTAT)
  1. ; Warning Message
  1. D WN(+LEXCDT,.LEXWN,62)
  1. ; MDC/DRG Groups 80.171 (71)
  1. D MDCDRG^LEXQIP2(+LEXIEN,+LEXCDT,.LEXDG,LEXLEN)
  1. Q
  1. ;
  1. EF(X,LEXCDT) ; Effective Dates
  1. N LEX,LEXAD,LEXBRD,LEXBRW,LEXEE,LEXEF,LEXES,LEXFA,LEXH,LEXI,LEXID,LEXIEN,LEXRT,LEXLS,LEXSO,LEXSYS,LEXST S LEXIEN=+($G(X)),LEXCDT=+($G(LEXCDT))
  1. S LEXRT=$$ROOT^ICDEX(80.1) Q:+LEXIEN'>0 "^^" S LEXSO=$$CODEC^ICDEX(80.1,+LEXIEN) Q:'$L(LEXSO)!($P(LEXSO,"^",1)="-1") Q:LEXCDT'?7N "^^"
  1. S LEXSYS=$$CSI^ICDEX(80.1,+LEXIEN),LEX=$$ICDOP^ICDEX(LEXSO,LEXCDT,LEXSYS,"E")
  1. S LEXFA=$$FA(+LEXIEN),(LEXLS,LEXST)=$P(LEX,"^",10),LEXID=$P(LEX,"^",12),LEXAD=$P(LEX,"^",13),LEXBRD=2781001,LEXBRW=""
  1. I LEXCDT<LEXBRD&(+LEXFA=LEXBRD) D
  1. . S LEXBRW="Warning: The 'Based on Date' provided precedes the initial Code Set Business Rule date of "
  1. . S LEXBRW=LEXBRW_$$SD^LEXQM(LEXBRD)_", the Effective date may be inaccurate."
  1. S LEXES=$S(+LEXST>0:"Active",1:"Inactive")
  1. S:+LEXST'>0&(+LEXAD'>0) LEXES="Not Applicable",LEXLS=-1
  1. S:+LEXFA>0&(+LEXCDT>0)&(LEXFA>LEXCDT) LEXES="Pending",LEXLS=-1,LEXST=0,LEXBRW=""
  1. S:LEXST>0 LEXEF=LEXAD S:LEXST'>0 LEXEF=LEXID
  1. S:LEXST'>0&(+LEXID'>0) LEXEF=LEXFA S LEXEE=$$SD^LEXQM(LEXEF)
  1. I LEXST'>0,+LEXID'>0,$L(LEXEE),+LEXEF>LEXCDT S LEXEE="(future activation of "_LEXEE_")",LEXEF=""
  1. S X=LEXLS_"^"_LEXST_"^"_LEXEF_"^"_LEXES_"^"_LEXEE S:$L(LEXBRW) $P(X,"^",6)=LEXBRW
  1. Q X
  1. ;
  1. SDS(X,LEXVDT,LEX,LEXLEN,LEXSTA) ; Operation/Procedure (short description)
  1. ;
  1. ; LEX=# of Lines
  1. ; LEX(0)=External Date of Operation/Procedure Name
  1. ; LEX(#)=Operation/Procedure Name
  1. ;
  1. N LEXBRD,LEXBRW,LEXC,LEXD,LEXDDT,LEXE,LEXEE,LEXEFF,LEXFA
  1. N LEXHIS,LEXI,LEXIA,LEXIEN,LEXL,LEXLA,LEXLAST,LEXLEF
  1. N LEXLHI,LEXLSD,LEXM,LEXOD,LEXODD,LEXR,LEXS,LEXSD,LEXSDD
  1. N LEXSDT,LEXSO,LEXSY,LEXT S LEXIEN=$G(X) Q:+LEXIEN'>0
  1. S LEXVDT=+($G(LEXVDT)) S:LEXVDT'?7N LEXVDT=$$DT^XLFDT
  1. S LEXSTA=+($G(LEXSTA)) S LEXSO=$$CODEC^ICDEX(80.1,+LEXIEN)
  1. S LEXSY=$$CSI^ICDEX(80.1,+LEXIEN)
  1. S LEXLA=$$LA^ICDEX(80.1,+LEXIEN,9999999),LEXFA=$$FA(+LEXIEN)
  1. S LEXLAST=$$ICDOP^ICDEX(LEXSO,LEXLA,LEXSY,"E")
  1. S LEXLSD=$P(LEXLAST,"^",5),LEXBRD=$$DTBR^ICDEX(LEXVDT,0,LEXSY),LEXBRW=""
  1. S LEXSD=$$SD^ICDEX(80.1,+LEXIEN,LEXVDT,.LEXS)
  1. S LEXSD=$G(LEXS(1)),LEXSDD=$P($G(LEXS(0)),"^",2)
  1. S:'$L(LEXSD) LEXSDD="--/--/----" S LEXM=""
  1. I $P(LEXSD,"^",1)="-1"!('$L(LEXSD)) D
  1. . S LEXM="Operation/Procedure Short Name is not available."
  1. . I (LEXVDT'?7N!(LEXFA'?7N)),LEXVDT<LEXFA D
  1. . . S LEXM=LEXM_" The date provided precedes the initial activation of the code"
  1. . I LEXVDT?7N&(LEXFA?7N),LEXVDT<LEXFA D
  1. . . S LEXM=LEXM_" The date provided ("_$$ED^LEXQM(LEXVDT)_") precedes the initial activation ("_$$ED^LEXQM(LEXFA)_") of the code"
  1. . S:$L(LEXM) LEXM="NOTE: "_LEXM S LEXOD=LEXLSD,LEXODD="--/--/----"
  1. I $L(LEXSD)&($P(LEXSD,"^",1)'="-1") D
  1. . S LEXM="" S LEXOD=LEXSD,LEXODD=$S(LEXSDD?7N:$$ED^LEXQM(LEXSDD),1:"--/--/----")
  1. S:'$L(LEXOD) LEXOD="Operation/Procedure Short Name not found"
  1. S:'$L(LEXODD) LEXODD="--/--/----"
  1. K LEX,LEXT S LEXT(1)=LEXOD D PR^LEXQM(.LEXT,(LEXLEN-7))
  1. S LEXI=0 F S LEXI=$O(LEXT(LEXI)) Q:+LEXI'>0 S LEXT=$G(LEXT(LEXI)) S LEX(LEXI)=LEXT
  1. I $L($G(LEXM)) D
  1. . K LEX,LEXT N LEXC S LEXT(1)=LEXM D PR^LEXQM(.LEXT,(LEXLEN-7))
  1. . S LEXI=0 F S LEXI=$O(LEXT(LEXI)) Q:+LEXI'>0 S LEXT=$G(LEXT(LEXI)) S LEXC=$O(LEX(" "),-1)+1,LEX(LEXC)=LEXT
  1. S:$D(LEX(1)) LEX(0)=LEXODD
  1. Q
  1. LDS(X,LEXVDT,LEX,LEXLEN,LEXSTA) ; Operation/Procedure (short description)
  1. ;
  1. ; LEX=# of Lines
  1. ; LEX(0)=External Date of Operation/Procedure Name
  1. ; LEX(#)=Operation/Procedure Name
  1. ;
  1. N LEXBRD,LEXBRW,LEXC,LEXD,LEXDDT,LEXE,LEXEE,LEXEFF,LEXFA
  1. N LEXHIS,LEXI,LEXIA,LEXIEN,LEXL,LEXLA,LEXLAST,LEXLEF
  1. N LEXLHI,LEXLSD,LEXM,LEXOD,LEXODD,LEXR,LEXS,LEXLD,LEXLDD
  1. N LEXSDT,LEXSO,LEXSY,LEXT S LEXIEN=$G(X) Q:+LEXIEN'>0
  1. S LEXVDT=+($G(LEXVDT)) S:LEXVDT'?7N LEXVDT=$$DT^XLFDT
  1. S LEXSTA=+($G(LEXSTA)) S LEXSO=$$CODEC^ICDEX(80.1,+LEXIEN)
  1. S LEXSY=$$CSI^ICDEX(80.1,+LEXIEN)
  1. S LEXLA=$$LA^ICDEX(80.1,+LEXIEN,9999999),LEXFA=$$FA(+LEXIEN)
  1. S LEXLSD=$$LD^ICDEX(80.1,+LEXIEN,LEXLA)
  1. S LEXBRD=$$DTBR^ICDEX(LEXVDT,0,LEXSY),LEXBRW=""
  1. S LEXLD=$$LD^ICDEX(80.1,+LEXIEN,LEXVDT,.LEXS,245)
  1. S LEXLD=$G(LEXS(1)),LEXLDD=$P($G(LEXS(0)),"^",2)
  1. S:'$L(LEXLD) LEXLDD="--/--/----" S LEXM=""
  1. I $P(LEXLD,"^",1)="-1"!('$L(LEXLD)) D
  1. . S LEXM="Operation/Procedure Description is not available."
  1. . I (LEXVDT'?7N!(LEXFA'?7N)),LEXVDT<LEXFA D
  1. . . S LEXM=LEXM_" The date provided precedes the initial activation of the code"
  1. . I LEXVDT?7N&(LEXFA?7N),LEXVDT<LEXFA D
  1. . . S LEXM=LEXM_" The date provided ("_$$ED^LEXQM(LEXVDT)_") precedes the initial activation ("_$$ED^LEXQM(LEXFA)_") of the code"
  1. . S:$L(LEXM) LEXM="NOTE: "_LEXM S LEXOD=LEXLSD,LEXODD="--/--/----"
  1. I $L(LEXLD)&($P(LEXLD,"^",1)'="-1") D
  1. . S LEXM="" S LEXOD=LEXLD,LEXODD=$S(LEXLDD?7N:$$ED^LEXQM(LEXLDD),1:"--/--/----")
  1. S:'$L(LEXOD) LEXOD="Operation/Procedure Description not found"
  1. S:'$L(LEXODD) LEXODD="--/--/----"
  1. K LEX,LEXT S LEXT(1)=LEXOD D PR^LEXQM(.LEXT,(LEXLEN-7))
  1. S LEXI=0 F S LEXI=$O(LEXT(LEXI)) Q:+LEXI'>0 S LEXT=$G(LEXT(LEXI)) S LEX(LEXI)=LEXT
  1. I $L($G(LEXM)) D
  1. . K LEX,LEXT N LEXC S LEXT(1)=LEXM D PR^LEXQM(.LEXT,(LEXLEN-7))
  1. . S LEXI=0 F S LEXI=$O(LEXT(LEXI)) Q:+LEXI'>0 S LEXT=$G(LEXT(LEXI)) S LEXC=$O(LEX(" "),-1)+1,LEX(LEXC)=LEXT
  1. S:$D(LEX(1)) LEX(0)=LEXODD
  1. Q
  1. ;
  1. WN(X,LEX,LEXLEN) ; Warning
  1. ;
  1. ; LEX=# of Lines
  1. ; LEX(0)=External Date
  1. ; LEX(#)=Warning
  1. ;
  1. N LEXVDT,LEXREF,LEXIA,LEXTMP K LEX S LEXVDT=$G(X) Q:LEXVDT'?7N S LEXLEN=+$G(LEXLEN) S LEXIA=$$IA(LEXVDT,LEXIEN) Q:+LEXIA'>0 S:+LEXLEN>62 LEXLEN=62
  1. S LEXTMP(1)="Warning: The 'Based on Date' provided precedes Code Set Versioning. The Operation/Procedure (Short Name) and Description may be inaccurate for "_$$SD^LEXQM(LEXVDT)
  1. D PR^LEXQM(.LEXTMP,LEXLEN) K LEX S LEXI=0 F S LEXI=$O(LEXTMP(LEXI)) Q:+LEXI'>0 S LEX(LEXI)=$G(LEXTMP(LEXI))
  1. S LEX=$O(LEX(" "),-1),LEX(0)=$$SD^LEXQM(LEXVDT)
  1. Q
  1. ; Miscellaneous
  1. FA(X) ; First Activation
  1. N LEXFA,LEXH,LEXI,LEXIEN,LEXSO,LEXSY
  1. S LEXIEN=+($G(X)) S X="",LEXSO=$$CODEC^ICDEX(80.1,+LEXIEN),LEXSY=$$CSI^ICDEX(80.1,+LEXIEN)
  1. K LEXH S X=$$HIST^ICDEX(LEXSO,.LEXH,LEXSY) S LEXFA="",LEXI=0
  1. F S LEXI=$O(LEXH(LEXI)) Q:+LEXI'>0!($L(LEXFA)) S:+($G(LEXH(LEXI)))>0&(LEXI?7N) LEXFA=LEXI Q:$L(LEXFA)
  1. S X=LEXFA
  1. Q X
  1. IA(X,Y) ; Inaccurate
  1. N LEXBRD,LEXVDT,LEXIEN,LEXSYS S LEXVDT=+($G(X)),LEXIEN=+($G(Y)) Q:+LEXIEN'>0 0
  1. S LEXSYS=$$CSI^ICDEX(80.1,+LEXIEN) Q:+LEXSYS'>0 0 S:'$L(LEXVDT) LEXVDT=$$DT^XLFDT
  1. S:LEXVDT#10000=0 LEXVDT=LEXVDT+101 S:LEXVDT#100=0 LEXVDT=LEXVDT+1
  1. S LEXBRD=$$DTBR^ICDEX(LEXVDT,0,LEXSYS) S X=$S(LEXVDT<LEXBRD:1,1:0)
  1. Q X