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

LEXQC6.m

Go to the documentation of this file.
  1. LEXQC6 ;ISL/KER - Query - Changes - Summary ;05/23/2017
  1. ;;2.0;LEXICON UTILITY;**103**;Sep 23, 1996;Build 2
  1. ;
  1. ; Global Variables
  1. ; ^TMP("LEXQC") SACC 2.3.2.5.1
  1. ; ^TMP("LEXQCO") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; HOME^%ZIS ICR 10086
  1. ; ^%ZTLOAD ICR 10063
  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. ; ^XMD ICR 10070
  1. ;
  1. EN ; Change List Summary
  1. N LEXENV S LEXENV=$$ENV Q:+LEXENV'>0
  1. W !!," Summary (totals only)"
  1. N %,I,LEXCDT,LEXBDT,LEXADT,LEXEDT,LEXRT,LEXSAB,LEXCONT,LEXIMP
  1. S LEXCDT=$$CSD^LEXQM,LEXEDT=$P(LEXCDT,"^",1),LEXCDT=$P(LEXCDT,"^",2)
  1. I '$L(LEXCDT)!(LEXCDT'?7N) W !!," Code Set Date invalid or not selected",! Q
  1. I $$CDTOK(LEXCDT)'>0 W !!," No Code Set changes found for ",$$FMTE^XLFDT(LEXCDT),! Q
  1. S LEXBDT=$$FMADD^XLFDT(LEXCDT,-1),LEXADT=$$FMADD^XLFDT(DT,+1)
  1. Q:LEXBDT'?7N Q:LEXADT'?7N K ^TMP("LEXQC",$J)
  1. D TASK K ^TMP("LEXQC",$J)
  1. Q
  1. MAIL ; Send Results by MailMan
  1. N LEXTASK S LEXTASK=1 D EN
  1. Q
  1. TASK ; Task Search for CSV Changes
  1. N X,Y,ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE,ZTQUEUED,ZTREQ
  1. S LEXCDT=+($G(LEXCDT)) Q:LEXCDT'?7N S LEXEDT=$G(LEXEDT) Q:'$L(LEXEDT)
  1. S ZTRTN="SUM^LEXQC6",ZTSAVE("LEXCDT")="",ZTIO="",ZTDTH=$H
  1. S ZTDESC="Search for CSV Changes on "_LEXEDT
  1. D:'$D(LEXTASK) @ZTRTN D:$D(LEXTASK) ^%ZTLOAD D HOME^%ZIS S X=+($G(ZTSK))
  1. I +X>0 D
  1. . W !!," A search for CSV changes on ",LEXEDT," has been queued"
  1. . W !," (task ",+X,"). A summary report will be sent to you in"
  1. . W !," a MailMan message.",!
  1. K Y,ZTSK,ZTDESC,ZTDTH,ZTIO,ZTRTN,LEXQUIET,LEXTASK
  1. Q
  1. ;
  1. SUM ; Summary
  1. D GET,DSP K ^TMP("LEXQC",$J)
  1. Q
  1. GET ; Get Data
  1. N LEX1,LEX2,LEX3,LEXTX,LEXTT,LEXTV,LEXIIMP,LEXCIMP,LEXQLEN,LEXQSTR,LEXQTOT,LEXTOT,LEXCAT
  1. S:$G(LEXCDT)'?7N LEXCDT=$$DT^XLFDT
  1. S:$G(LEXBDT)'?7N LEXBDT=$$FMADD^XLFDT(LEXCDT,-1)
  1. S:$G(LEXADT)'?7N LEXADT=$$FMADD^XLFDT(DT,+1)
  1. S LEX1=3,LEX2=5,LEX3=26
  1. S LEXIIMP=$$IMPDATE^LEXU("10D"),LEXCIMP=$$IMPDATE^LEXU("CPT"),LEXQTOT=0
  1. I LEXCDT<LEXIIMP S LEXQTOT=LEXQTOT+($P($G(^LEX(757.03,1,0)),"^",6))+($P($G(^LEX(757.03,2,0)),"^",6))
  1. I LEXCDT>(LEXIIMP-.0001) S LEXQTOT=LEXQTOT+($P($G(^LEX(757.03,30,0)),"^",6))+($P($G(^LEX(757.03,31,0)),"^",6))
  1. I LEXCDT>(LEXCIMP-.0001) S LEXQTOT=LEXQTOT+($P($G(^LEX(757.03,3,0)),"^",6))+($P($G(^LEX(757.03,4,0)),"^",6))
  1. S:+($G(LEXQTOT))'>0 LEXQTOT=193006
  1. S LEXQLEN=68,LEXQSTR=+(LEXQTOT\LEXQLEN) S:LEXQSTR=0 LEXQSTR=1
  1. W:'$D(ZTQUEUED) !!," Gathering data, please wait.",!," "
  1. D:LEXCDT<LEXIIMP D09^LEXQC3,P09^LEXQC3
  1. D:LEXCDT>(LEXIIMP-.0001) D10^LEXQC3,P10^LEXQC3
  1. D:LEXCDT>(LEXCIMP-.0001) CPT^LEXQC4,MOD^LEXQC4
  1. I $D(^TMP("LEXQC",$J)),$G(LEXCDT)?7N D
  1. . N LEXTT,LEXQT,LEXFY,LEXQI,LEXQTR S LEXQT=""
  1. . S:$E(LEXCDT,4,7)="0101" LEXQT=2 S:$E(LEXCDT,4,7)="0401" LEXQT=3 S:$E(LEXCDT,4,7)="0701" LEXQT=4 S:$E(LEXCDT,4,7)="1001" LEXQT=1
  1. . S LEXFY=$E((+($E(LEXCDT,1,3))+1700),3,4) S:LEXQT=1 LEXFY=LEXFY+1 S LEXFY=$E(LEXFY,($L(LEXFY)-1),$L(LEXFY))
  1. . S:$L(LEXFY)=1 LEXFY="0"_LEXFY S:$L(LEXFY)=1 LEXFY="0"_LEXFY S LEXQI=$S(LEXQT=1:"st",LEXQT=2:"nd",LEXQT=3:"rd",LEXQT=4:"th",1:"")
  1. . S LEXQTR="" S:+LEXQT>0&(LEXQT<5)&($L(LEXFY)=2)&($L(LEXQI)) LEXQTR="FY"_LEXFY_" "_LEXQT_LEXQI_" Qtr"
  1. . S LEXTT=" Change list summary for "_$$FMTE^XLFDT(LEXCDT,"5Z")_" "_$S($L(LEXQTR):" (",1:"")_LEXQTR_$S($L(LEXQTR):")",1:"")
  1. . D BL,TL(LEXTT)
  1. S (LEXTOT,LEXCAT)=0
  1. S LEXSAB="ICD" I $D(^TMP("LEXQC",$J,LEXSAB)) D
  1. . N LEXTX,LEXC S LEXC=+($P($$CGS(LEXSAB),"^",2)),LEXCAT=LEXCAT+1,LEXTOT=LEXTOT+LEXC
  1. . S LEXTX=$$TTL("ICD-9-CM Diagnosis",LEXC)
  1. . D BL,TL(LEXTX),BL,SAB
  1. S LEXSAB="ICP" I $D(^TMP("LEXQC",$J,LEXSAB)) D
  1. . N LEXTX,LEXC S LEXC=+($P($$CGS(LEXSAB),"^",2)),LEXCAT=LEXCAT+1,LEXTOT=LEXTOT+LEXC
  1. . S LEXTX=$$TTL("ICD-9 Procedures",LEXC) D BL,TL(LEXTX),BL,SAB
  1. S LEXSAB="10D" I $D(^TMP("LEXQC",$J,LEXSAB)) D
  1. . N LEXTX,LEXC S LEXC=+($P($$CGS(LEXSAB),"^",2)),LEXCAT=LEXCAT+1,LEXTOT=LEXTOT+LEXC
  1. . S LEXTX=$$TTL("ICD-10-CM Diagnosis",LEXC) D BL,TL(LEXTX),BL,SAB
  1. S LEXSAB="10P" I $D(^TMP("LEXQC",$J,LEXSAB)) D
  1. . N LEXTX,LEXC S LEXC=+($P($$CGS(LEXSAB),"^",2)),LEXCAT=LEXCAT+1,LEXTOT=LEXTOT+LEXC
  1. . S LEXTX=$$TTL("ICD-10-PCS Procedures",LEXC) D BL,TL(LEXTX),BL,SAB
  1. S LEXSAB="CPT" I $D(^TMP("LEXQC",$J,LEXSAB)) D
  1. . N LEXTX,LEXC S LEXC=+($P($$CGS(LEXSAB),"^",2)),LEXCAT=LEXCAT+1,LEXTOT=LEXTOT+LEXC
  1. . S LEXTX=$$TTL("CPT Procedures",LEXC) D BL,TL(LEXTX),BL,SAB
  1. S LEXSAB="CPC" I $D(^TMP("LEXQC",$J,LEXSAB)) D
  1. . N LEXTX,LEXC S LEXC=+($P($$CGS(LEXSAB),"^",2)),LEXCAT=LEXCAT+1,LEXTOT=LEXTOT+LEXC
  1. . S LEXTX=$$TTL("HCPCS Procedures",LEXC) D BL,TL(LEXTX),BL,SAB
  1. S LEXSAB="MOD" I $D(^TMP("LEXQC",$J,LEXSAB)) D
  1. . N LEXTX,LEXC S LEXC=+($P($$CGS(LEXSAB),"^",2)),LEXCAT=LEXCAT+1,LEXTOT=LEXTOT+LEXC
  1. . S LEXTX=$$TTL("CPT/HCPCS Modifiers",LEXC) D BL,TL(LEXTX),BL,SAB
  1. I LEXCAT>1 D
  1. . Q:+LEXTOT'>0 N LEXTX S LEXTX=$$TTL("Total Changes",LEXTOT) D BL,TL(LEXTX),BL
  1. F LEXSAB="ICD","ICP","10D","10P","CPT","CPC","MOD" K ^TMP("LEXQC",$J,LEXSAB)
  1. Q
  1. SAB ; Get Data by Source Abbreviation (SAB)
  1. Q:'$L($G(LEXSAB))
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"ACT",0)) D
  1. . N LEXTX S LEXTX=$$FMT("","Added Codes",+$G(^TMP("LEXQC",$J,LEXSAB,"ACT",0))) D TL(LEXTX)
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"INA",0)) D
  1. . N LEXTX S LEXTX=$$FMT("","Inactivated Codes",+$G(^TMP("LEXQC",$J,LEXSAB,"INA",0))) D TL(LEXTX)
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"REA",0)) D
  1. . N LEXTX S LEXTX=$$FMT("","Re-Activated Codes",+$G(^TMP("LEXQC",$J,LEXSAB,"REA",0))) D TL(LEXTX)
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"REU",0)) D
  1. . N LEXTX S LEXTX=$$FMT("","Re-Used Codes",+$G(^TMP("LEXQC",$J,LEXSAB,"REU",0))) D TL(LEXTX)
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"REV",0)) D
  1. . N LEXTX S LEXTX=$$FMT("","Revised Codes",+$G(^TMP("LEXQC",$J,LEXSAB,"REV",0))) D TL(LEXTX)
  1. Q
  1. CGS(X) ; Changes for a Source Abbreviation (SAB)
  1. N LEXSAB S LEXSAB=$G(X) Q:'$L($G(LEXSAB)) N LEXT,LEXC S (LEXT,LEXC)=0
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"ACT",0)) S LEXT=LEXT+1,LEXC=LEXC+$G(^TMP("LEXQC",$J,LEXSAB,"ACT",0))
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"INA",0)) S LEXT=LEXT+1,LEXC=LEXC+$G(^TMP("LEXQC",$J,LEXSAB,"INA",0))
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"REA",0)) S LEXT=LEXT+1,LEXC=LEXC+$G(^TMP("LEXQC",$J,LEXSAB,"REA",0))
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"REU",0)) S LEXT=LEXT+1,LEXC=LEXC+$G(^TMP("LEXQC",$J,LEXSAB,"REU",0))
  1. I $D(^TMP("LEXQC",$J,LEXSAB,"REV",0)) S LEXT=LEXT+1,LEXC=LEXC+$G(^TMP("LEXQC",$J,LEXSAB,"REV",0))
  1. S X=LEXT_"^"_LEXC
  1. Q X
  1. DSP ; Display Data
  1. K ^TMP("LEXQCO",$J) M ^TMP("LEXQCO",$J)=^TMP("LEXQC",$J,"SUM")
  1. D:'$D(ZTQUEUED)&($D(^TMP("LEXQCO",$J))) DSP^LEXQO("LEXQCO")
  1. D:$D(ZTQUEUED)&($D(^TMP("LEXQCO",$J))) MM^LEXQC6
  1. K ^TMP("LEXQCO",$J)
  1. Q
  1. ;
  1. ; Miscellaneous
  1. MM ; MailMan Message
  1. G:'$D(^TMP("LEXQCO",$J)) MMQ N XCNP,XMSCR,XMDUZ,XMY,XMZ,XMSUB,XMTEXT,XMDUZ,LEXJ,LEXNM
  1. S XMTEXT="^TMP(""LEXQCO"","_$J_",",XMSUB="CSV ICD/CPT Changes (Summary)",LEXNM=$$GET1^DIQ(200,+($G(DUZ)),.01) G:'$L(LEXNM) MMQ
  1. S XMY(LEXNM)="",XMDUZ=.5 D ^XMD
  1. MMQ ; MailMan Quit
  1. K ^TMP("LEXQCO",$J),LEXNM,LEXSUB
  1. Q
  1. TTL(X,Y) ; Format Title Line
  1. N LEXTX,LEXI1,LEXI2,LEXI3 S LEXI1=$S(+($G(LEX1))>0:+($G(LEX1)),1:3)
  1. S LEXI2=$S(+($G(LEX2))>0:+($G(LEX2)),1:5) S LEXI3=$S(+($G(LEX3))>0:+($G(LEX3)),1:30)
  1. S LEXTX="",LEXTX=LEXTX_$J(" ",(LEXI1-$L(LEXTX)))_$G(X) S Y=$S(+Y>0:+Y,1:"")
  1. S LEXTX=LEXTX_$J(" ",(LEXI3-$L(LEXTX)))_$J($G(Y),6) S:+Y>0 LEXTX=LEXTX_" code"_$S(+($G(Y))>1:"s",1:"")
  1. S X=LEXTX
  1. Q X
  1. FMT(X,Y,Z) ; Format Data Line
  1. N LEXTX,LEXI1,LEXI2,LEXI3 S LEXI1=$S(+($G(LEX1))>0:+($G(LEX1)),1:3)
  1. S LEXI2=$S(+($G(LEX2))>0:+($G(LEX2)),1:5) S LEXI3=$S(+($G(LEX3))>0:+($G(LEX3)),1:30)
  1. S LEXTX="",LEXTX=LEXTX_$J(" ",(LEXI1-$L(LEXTX)))_$G(X)
  1. S:$L($G(Y)) LEXTX=LEXTX_$J(" ",(LEXI2-$L(LEXTX)))_$G(Y)
  1. S:$L($G(Z)) LEXTX=LEXTX_$J(" ",(LEXI3-$L(LEXTX)))_$J($G(Z),6) S X=LEXTX
  1. Q X
  1. CDTOK(X) ; Code Set Date is OK
  1. N LEXCDT,LEXOK,LEXSAB,LEXI S LEXOK=0,LEXCDT=$G(X) Q:LEXCDT'?7N LEXOK
  1. F LEXSAB="ICD","ICP","10D","10P","CPT","CPC" D Q:LEXOK>0
  1. . S:$D(^LEX(757.02,"AUPD",LEXSAB,LEXCDT)) LEXOK=1
  1. I LEXOK'>0 S LEXI=0 F S LEXI=$O(@("^DIC(81.3,"_LEXI_")")) Q:+LEXI'>0 D Q:LEXOK>0
  1. . S:$D(@("^DIC(81.3,"_LEXI_",60,""B"","_LEXCDT_")")) LEXOK=1
  1. . S:$D(@("^DIC(81.3,"_LEXI_",61,""B"","_LEXCDT_")")) LEXOK=1
  1. . S:$D(@("^DIC(81.3,"_LEXI_",62,""B"","_LEXCDT_")")) LEXOK=1
  1. S X=LEXOK
  1. Q X
  1. BL ; Blank Like
  1. D TL(" ")
  1. Q
  1. TL(X) ; Text Line
  1. N LEXI,LEXX S LEXX=$G(X) W:$D(LEXTEST) !,LEXX
  1. S LEXI=$O(^TMP("LEXQC",$J,"SUM"," "),-1)+1,^TMP("LEXQC",$J,"SUM",+LEXI)=LEXX N LEXTEST
  1. Q
  1. CONT(X) ; Continue
  1. Q:$G(LEXCONT)["^" "^" N DIR,DIROUT,DIRUT,DUOUT,DTOUT,Y S DIR(0)="FAO^1:30",DIR("A")=" Press <Enter> to continue or '^' to exit "
  1. S DIR("PRE")="S:X[""^^"" X=""^^"" S:X'[""^^""&(X[""^"") X=""^"" S:X[""?"" X=""??"" S:X'[""^""&(X'[""?"") X="""""
  1. S (DIR("?"),DIR("??"))="^D CONTH^"_$$LR D ^DIR Q:X["^^"!($D(DIROUT)) "^^" Q:$D(DUOUT) "^" Q:X["^" "^" Q ""
  1. Q ""
  1. CONTH ; Continue Help
  1. W !," Press <Enter> to continue or '^' to exit"
  1. Q
  1. LR(X) ; Local Routine
  1. S X=$T(+1),X=$P(X," ",1) Q X
  1. ENV(X) ; Check environment
  1. N LEX S DT=$$DT^XLFDT D HOME^%ZIS S U="^" I +($G(DUZ))=0 W !!,?5,"DUZ not defined" Q 0
  1. S LEX=$$GET1^DIQ(200,(DUZ_","),.01) I '$L(LEX) W !!,?5,"DUZ not valid" Q 0
  1. Q 1